ETH Price: $3,483.15 (+2.20%)
Gas: 9 Gwei

Token

TurboBot (TURBO)
 

Overview

Max Total Supply

1,000,000 TURBO

Holders

337

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bennybalboa.eth
Balance
0.413142014457715625 TURBO

Value
$0.00
0x156fe1286b7d94420dd99a257c8ee09cde8c0176
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TurboBot

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : TurboBot.sol
/** 
   TurboBot, a powerful and user-friendly trading companion designed to 
   provide traders, from novices to experts, with the tools and insights
   to make intelligent, rapid, and profitable trading decisions.

  Website - www.turbobot.tech
  Telegram - https://t.me/TurboBot_Official
  Twitter - https://twitter.com/Turbo_Bot_Tech
  Bot -     https://t.me/turbo_erc_bot
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

abstract contract Context {

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

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

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(0x000000000000000000000000000000000000dEaD));
        _owner = address(0x000000000000000000000000000000000000dEaD);
    }

    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 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 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 TurboBot is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    
    string private _name = "TurboBot";
    string private _symbol = "TURBO";
    uint8 private _decimals = 18;

    address payable public marketingWallet = payable(0x8D7c750215f99c3DD413A8D21A7A338692C81262);
    address payable public DeveloperWallet = payable(0x8CC408D7C1AFCb6f31D3198e7236f1B8753AED4b);
    address public liquidityReciever;
    
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public immutable zeroAddress = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    bool public tradingEnabled;

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;
    
    // mapping (address => bool) public blacklist;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 12;
    uint256 public _buyDeveloperFee = 3;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 20;
    uint256 public _sellDeveloperFee = 5;

    uint256 public feeUnits = 100;

    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;

    uint256 private _totalSupply = 1000000 * 10**_decimals;

    uint256 public minimumTokensBeforeSwap = _totalSupply.mul(1).div(100);   //0.001%

    uint256 public _maxTxAmount =  _totalSupply.mul(2).div(100);  //2%
    uint256 public _walletMax =   _totalSupply.mul(2).div(100);   //2%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;

    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    bool public checkWalletLimit = true;
    bool public EnableTransactionLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        
        _allowances[address(this)][address(uniswapV2Router)] = ~uint256(0);

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[marketingWallet] = true;
        isExcludedFromFee[DeveloperWallet] = true;
        isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[marketingWallet] = true;
        isWalletLimitExempt[DeveloperWallet] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[marketingWallet] = true;
        isTxLimitExempt[DeveloperWallet] = true;
        isTxLimitExempt[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);

        isMarketPair[address(uniswapPair)] = true;
        liquidityReciever = address(msg.sender);

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function setTradingEnabled(bool _enabled) external onlyOwner{
        tradingEnabled = _enabled;

    }

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

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

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

    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 approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    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 setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function enableTxLimit(bool _status) external onlyOwner {
        EnableTransactionLimit = _status;
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWallet = payable(newAddress);
    }

    function setLiquidityWalletAddress(address newAddress) external onlyOwner() {
        liquidityReciever = payable(newAddress);
    }

    function setDeveloperWalletAddress(address newAddress) external onlyOwner() {
        DeveloperWallet = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress)).sub(balanceOf(zeroAddress));
    }

    // function setBlacklist(address _adr, bool _status) external onlyOwner {
    //     blacklist[_adr] = _status;
    // }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isMarketPair[address(uniswapPair)] = true;
    }

    function setBuyTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _buyLiquidityFee = _Liquidity;
        _buyMarketingFee = _Marketing;
        _buyDeveloperFee = _Developer;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDeveloperFee);
        require(_totalTaxIfBuying <= (feeUnits/25), "Buy fees must be 25% or less");
    }

    function setSellTaxes(uint _Liquidity, uint _Marketing , uint _Developer) public onlyOwner {
        _sellLiquidityFee = _Liquidity;
        _sellMarketingFee = _Marketing;
        _sellDeveloperFee = _Developer;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDeveloperFee);
        require(_totalTaxIfSelling <= (feeUnits/25), "Sell fees must be 25% or less");
    }
    

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, 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 _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        // require(!blacklist[sender] && !blacklist[recipient], "Bot Enemy address Restricted!");
        //  if(!_whitelisted[from]) { require(tradingEnabled, "Trading is not enabled yet");}


        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {

            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && EnableTransactionLimit) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient]) {
                require(balanceOf(recipient).add(finalAmount) <= _walletMax,"Amount Exceed From Max Wallet Limit!!");
            }

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
        
    }

    function rescueStuckedToken(address _token, uint _amount) external onlyOwner {
        IERC20(_token).transfer(msg.sender,_amount);
    }

    function rescueFunds() external onlyOwner {
        (bool os,) = payable(msg.sender).call{value: address(this).balance}("");
        require(os);
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        uint256 totalShares = _totalTaxIfBuying.add(_totalTaxIfSelling);

        uint256 liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
        uint256 MarketingShare = _buyMarketingFee.add(_sellMarketingFee);
        // uint256 DeveloperShare = _buyDeveloperFee.add(_sellDeveloperFee);
        
        uint256 tokenForLp = tAmount.mul(liquidityShare).div(totalShares).div(2);
        uint256 tokenForSwap = tAmount.sub(tokenForLp);

        uint256 initialBalance =  address(this).balance;
        swapTokensForEth(tokenForSwap);
        uint256 recievedBalance =  address(this).balance.sub(initialBalance);

        uint256 totalETHFee = totalShares.sub(liquidityShare.div(2));

        uint256 amountETHLiquidity = recievedBalance.mul(liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHMarketing = recievedBalance.mul(MarketingShare).div(totalETHFee);
        uint256 amountETHDeveloper = recievedBalance.sub(amountETHLiquidity).sub(amountETHMarketing);

        if(amountETHMarketing > 0) {
            payable(marketingWallet).transfer(amountETHMarketing);
        }

        if(amountETHDeveloper > 0) {
            payable(DeveloperWallet).transfer(amountETHDeveloper);
        }         

        if(amountETHLiquidity > 0 && tokenForLp > 0) {
            addLiquidity(tokenForLp, amountETHLiquidity);
        }
    }
    
    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), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    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
            liquidityReciever,
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    /* AirDrop Function*/

    function airdrop(address[] calldata _address,uint[] calldata _tokens) external onlyOwner {
        address account = msg.sender;
        require(_address.length == _tokens.length,"Error: Mismatch Length");
        uint tokenCount;
        for(uint i = 0; i < _tokens.length; i++) {
            tokenCount += _tokens[i];
        }
        require(balanceOf(account) >= tokenCount,"Error: Insufficient Error!!");
        _balances[account] = _balances[account].sub(tokenCount); 
        for(uint j = 0; j < _address.length; j++) {
            _balances[_address[j]] = _balances[_address[j]].add(_tokens[j]);
            emit Transfer(account, _address[j], _tokens[j]);
        }

    }

    
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

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":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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"DeveloperWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EnableTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDeveloperFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDeveloperFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"airdrop","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":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeUnits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueStuckedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDeveloperWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setLiquidityWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Liquidity","type":"uint256"},{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_Developer","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600881526020017f547572626f426f74000000000000000000000000000000000000000000000000815250600190805190602001906200005192919062001048565b506040518060400160405280600581526020017f545552424f000000000000000000000000000000000000000000000000000000815250600290805190602001906200009f92919062001048565b506012600360006101000a81548160ff021916908360ff160217905550738d7c750215f99c3dd413a8d21a7a338692c81262600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738cc408d7c1afcb6f31d3198e7236f1b8753aed4b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b815250600073ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1660601b8152506000600d55600c600e556003600f556000601055601460115560056012556064601355600360009054906101000a900460ff16600a620002169190620013aa565b620f4240620002269190620014e7565b6016556200026060646200024c600160165462000e7660201b620033c91790919060201c565b62000efa60201b620034441790919060201c565b6017556200029a606462000286600260165462000e7660201b620033c91790919060201c565b62000efa60201b620034441790919060201c565b601855620002d46064620002c0600260165462000e7660201b620033c91790919060201c565b62000efa60201b620034441790919060201c565b6019556001601b60156101000a81548160ff0219169083151502179055506000601b60166101000a81548160ff0219169083151502179055506001601b60176101000a81548160ff0219169083151502179055506001601b60186101000a81548160ff0219169083151502179055503480156200035057600080fd5b5060006200036362000f4c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200046157600080fd5b505afa15801562000476573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049c91906200110f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004ff57600080fd5b505afa15801562000514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053a91906200110f565b6040518363ffffffff1660e01b815260040162000559929190620011ec565b602060405180830381600087803b1580156200057457600080fd5b505af115801562000589573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005af91906200110f565b601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600019600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160096000620006eb62000f5460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006200089e62000f5460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600062000acb62000f5460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000ca1600f5462000c8d600e54600d5462000f7d60201b6200348e1790919060201c565b62000f7d60201b6200348e1790919060201c565b60148190555062000ce060125462000ccc60115460105462000f7d60201b6200348e1790919060201c565b62000f7d60201b6200348e1790919060201c565b6015819055506001600a6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506016546006600062000db862000f4c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000e0662000f4c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60165460405162000e67919062001281565b60405180910390a3506200173c565b60008083141562000e8b576000905062000ef4565b6000828462000e9b9190620014e7565b905082848262000eac919062001317565b1462000eef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ee6906200125f565b60405180910390fd5b809150505b92915050565b600062000f4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000fe060201b60201c565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000f8e9190620012ba565b90508381101562000fd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fcd906200123d565b60405180910390fd5b8091505092915050565b600080831182906200102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001021919062001219565b60405180910390fd5b50600083856200103b919062001317565b9050809150509392505050565b8280546200105690620015c9565b90600052602060002090601f0160209004810192826200107a5760008555620010c6565b82601f106200109557805160ff1916838001178555620010c6565b82800160010185558215620010c6579182015b82811115620010c5578251825591602001919060010190620010a8565b5b509050620010d59190620010d9565b5090565b5b80821115620010f4576000816000905550600101620010da565b5090565b600081519050620011098162001722565b92915050565b6000602082840312156200112257600080fd5b60006200113284828501620010f8565b91505092915050565b620011468162001548565b82525050565b600062001159826200129e565b620011658185620012a9565b93506200117781856020860162001593565b62001182816200168c565b840191505092915050565b60006200119c601b83620012a9565b9150620011a982620016aa565b602082019050919050565b6000620011c3602183620012a9565b9150620011d082620016d3565b604082019050919050565b620011e6816200157c565b82525050565b60006040820190506200120360008301856200113b565b6200121260208301846200113b565b9392505050565b600060208201905081810360008301526200123581846200114c565b905092915050565b6000602082019050818103600083015262001258816200118d565b9050919050565b600060208201905081810360008301526200127a81620011b4565b9050919050565b6000602082019050620012986000830184620011db565b92915050565b600081519050919050565b600082825260208201905092915050565b6000620012c7826200157c565b9150620012d4836200157c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200130c576200130b620015ff565b5b828201905092915050565b600062001324826200157c565b915062001331836200157c565b9250826200134457620013436200162e565b5b828204905092915050565b6000808291508390505b6001851115620013a157808604811115620013795762001378620015ff565b5b6001851615620013895780820291505b808102905062001399856200169d565b945062001359565b94509492505050565b6000620013b7826200157c565b9150620013c48362001586565b9250620013f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620013fb565b905092915050565b6000826200140d5760019050620014e0565b816200141d5760009050620014e0565b8160018114620014365760028114620014415762001477565b6001915050620014e0565b60ff841115620014565762001455620015ff565b5b8360020a91508482111562001470576200146f620015ff565b5b50620014e0565b5060208310610133831016604e8410600b8410161715620014b15782820a905083811115620014ab57620014aa620015ff565b5b620014e0565b620014c084848460016200134f565b92509050818404811115620014da57620014d9620015ff565b5b81810290505b9392505050565b6000620014f4826200157c565b915062001501836200157c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200153d576200153c620015ff565b5b828202905092915050565b600062001555826200155c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015620015b357808201518184015260208101905062001596565b83811115620015c3576000848401525b50505050565b60006002820490506001821680620015e257607f821691505b60208210811415620015f957620015f86200165d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6200172d8162001548565b81146200173957600080fd5b50565b60805160601c60a05160601c615b6a62001776600039600081816110e2015261153501526000818161150901526115610152615b6a6000f3fe6080604052600436106103c75760003560e01c806388790a68116101f2578063da00097d1161010d578063f1d5f517116100a0578063f84ba65d1161006f578063f84ba65d14610e73578063f872858a14610e9c578063f8f6329014610ec7578063fb4b8e6c14610ef2576103ce565b8063f1d5f51714610dcd578063f2fde38b14610df6578063f455444614610e1f578063f680f79914610e48576103ce565b8063ec28438a116100dc578063ec28438a14610d27578063ee828db314610d50578063ef422a1814610d79578063f0cd1dac14610da2576103ce565b8063da00097d14610c7d578063dc44b6a014610ca8578063dd62ed3e14610cd3578063e6b2603b14610d10576103ce565b8063c2e5ec0411610185578063c860795211610154578063c860795214610bc1578063c867d60b14610bec578063c9c9afc514610c29578063d2d7ad8314610c52576103ce565b8063c2e5ec0414610b19578063c49b9a8014610b42578063c5d2418914610b6b578063c816841b14610b96576103ce565b806398e944c8116101c157806398e944c814610a4b578063a457c2d714610a76578063a5d69d1f14610ab3578063a9059cbb14610adc576103ce565b806388790a681461098d5780638b42507f146109b85780638da5cb5b146109f557806395d89b4114610a20576103ce565b80633ecad271116102e257806370a0823111610275578063807c2d9c11610244578063807c2d9c146108e357806382eefb431461090e578063844d591c146109395780638526148514610962576103ce565b806370a0823114610839578063715018a61461087657806375f0a8741461088d5780637d1db4a5146108b8576103ce565b80635194f9bf116102b15780635194f9bf1461076b5780635342acb4146107965780635881f3ef146107d35780636724348214610810576103ce565b80633ecad271146106af5780634a74bb02146106ec5780634ada218b146107175780634cb80fd514610742576103ce565b806323555d571161035a5780632b112e49116103295780632b112e49146105f3578063313ce5671461061e57806339509351146106495780633b97084a14610686576103ce565b806323555d571461053757806323b872dd146105625780632563ae831461059f57806327c8f835146105c8576103ce565b80631694505e116103965780631694505e1461048f57806318160ddd146104ba5780631870517a146104e55780632198cf6c1461050e576103ce565b806306fdde03146103d357806308733214146103fe5780630930907b14610427578063095ea7b314610452576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f1b565b6040516103f59190615131565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614c2b565b610fad565b005b34801561043357600080fd5b5061043c6110e0565b6040516104499190615012565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614aff565b611104565b60405161048691906150fb565b60405180910390f35b34801561049b57600080fd5b506104a4611122565b6040516104b19190615116565b60405180910390f35b3480156104c657600080fd5b506104cf611148565b6040516104dc9190615313565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614c2b565b611152565b005b34801561051a57600080fd5b5061053560048036038101906105309190614ac3565b611285565b005b34801561054357600080fd5b5061054c611375565b6040516105599190615313565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190614a74565b61137b565b60405161059691906150fb565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190614bb0565b611455565b005b3480156105d457600080fd5b506105dd611507565b6040516105ea9190615012565b60405180910390f35b3480156105ff57600080fd5b5061060861152b565b6040516106159190615313565b60405180910390f35b34801561062a57600080fd5b506106336115a9565b60405161064091906153b8565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190614aff565b6115c0565b60405161067d91906150fb565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190614c02565b611673565b005b3480156106bb57600080fd5b506106d660048036038101906106d191906149e6565b611712565b6040516106e391906150fb565b60405180910390f35b3480156106f857600080fd5b50610701611732565b60405161070e91906150fb565b60405180910390f35b34801561072357600080fd5b5061072c611745565b60405161073991906150fb565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906149e6565b611758565b005b34801561077757600080fd5b50610780611831565b60405161078d9190615313565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b891906149e6565b611837565b6040516107ca91906150fb565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906149e6565b611857565b6040516108079190615012565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190614b3b565b611d3b565b005b34801561084557600080fd5b50610860600480360381019061085b91906149e6565b6121fa565b60405161086d9190615313565b60405180910390f35b34801561088257600080fd5b5061088b612243565b005b34801561089957600080fd5b506108a2612398565b6040516108af919061502d565b60405180910390f35b3480156108c457600080fd5b506108cd6123be565b6040516108da9190615313565b60405180910390f35b3480156108ef57600080fd5b506108f86123c4565b6040516109059190615313565b60405180910390f35b34801561091a57600080fd5b506109236123ca565b6040516109309190615313565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614ac3565b6123d0565b005b34801561096e57600080fd5b506109776124c0565b60405161098491906150fb565b60405180910390f35b34801561099957600080fd5b506109a26124d3565b6040516109af9190615313565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da91906149e6565b6124d9565b6040516109ec91906150fb565b60405180910390f35b348015610a0157600080fd5b50610a0a6124f9565b604051610a179190615012565b60405180910390f35b348015610a2c57600080fd5b50610a35612522565b604051610a429190615131565b60405180910390f35b348015610a5757600080fd5b50610a606125b4565b604051610a6d9190615012565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614aff565b6125da565b604051610aaa91906150fb565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad59190614bb0565b6126a7565b005b348015610ae857600080fd5b50610b036004803603810190610afe9190614aff565b612759565b604051610b1091906150fb565b60405180910390f35b348015610b2557600080fd5b50610b406004803603810190610b3b9190614bb0565b612778565b005b348015610b4e57600080fd5b50610b696004803603810190610b649190614bb0565b61282a565b005b348015610b7757600080fd5b50610b80612913565b604051610b8d9190615313565b60405180910390f35b348015610ba257600080fd5b50610bab612919565b604051610bb89190615012565b60405180910390f35b348015610bcd57600080fd5b50610bd661293f565b604051610be39190615313565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906149e6565b612945565b604051610c2091906150fb565b60405180910390f35b348015610c3557600080fd5b50610c506004803603810190610c4b91906149e6565b612965565b005b348015610c5e57600080fd5b50610c67612a3e565b604051610c749190615313565b60405180910390f35b348015610c8957600080fd5b50610c92612a44565b604051610c9f91906150fb565b60405180910390f35b348015610cb457600080fd5b50610cbd612a57565b604051610cca9190615313565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190614a38565b612a5d565b604051610d079190615313565b60405180910390f35b348015610d1c57600080fd5b50610d25612ae4565b005b348015610d3357600080fd5b50610d4e6004803603810190610d499190614c02565b612bf2565b005b348015610d5c57600080fd5b50610d776004803603810190610d729190614bb0565b612c91565b005b348015610d8557600080fd5b50610da06004803603810190610d9b9190614ac3565b612d43565b005b348015610dae57600080fd5b50610db7612e33565b604051610dc49190615313565b60405180910390f35b348015610dd957600080fd5b50610df46004803603810190610def9190614c02565b612e39565b005b348015610e0257600080fd5b50610e1d6004803603810190610e1891906149e6565b612ed8565b005b348015610e2b57600080fd5b50610e466004803603810190610e419190614aff565b61309a565b005b348015610e5457600080fd5b50610e5d6131c1565b604051610e6a9190615313565b60405180910390f35b348015610e7f57600080fd5b50610e9a6004803603810190610e959190614ac3565b6131c7565b005b348015610ea857600080fd5b50610eb16132b7565b604051610ebe91906150fb565b60405180910390f35b348015610ed357600080fd5b50610edc6132ca565b604051610ee9919061502d565b60405180910390f35b348015610efe57600080fd5b50610f196004803603810190610f1491906149e6565b6132f0565b005b606060018054610f2a90615618565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5690615618565b8015610fa35780601f10610f7857610100808354040283529160200191610fa3565b820191906000526020600020905b815481529060010190602001808311610f8657829003601f168201915b5050505050905090565b610fb56134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990615293565b60405180910390fd5b82601081905550816011819055508060128190555061108260125461107460115460105461348e90919063ffffffff16565b61348e90919063ffffffff16565b60158190555060196013546110979190615489565b60155411156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d2906152b3565b60405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111186111116134ec565b84846134f4565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601654905090565b61115a6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90615293565b60405180910390fd5b82600d8190555081600e8190555080600f81905550611227600f54611219600e54600d5461348e90919063ffffffff16565b61348e90919063ffffffff16565b601481905550601960135461123c9190615489565b6014541115611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127790615153565b60405180910390fd5b505050565b61128d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190615293565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b60006113888484846136bf565b5061144a846113956134ec565b61144585604051806060016040528060288152602001615ae860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113fb6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b600190509392505050565b61145d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190615293565b60405180910390fd5b80601b60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006115a46115597f00000000000000000000000000000000000000000000000000000000000000006121fa565b6115966115857f00000000000000000000000000000000000000000000000000000000000000006121fa565b601654613d5690919063ffffffff16565b613d5690919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006116696115cd6134ec565b8461166485600760006115de6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6134f4565b6001905092915050565b61167b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90615293565b60405180910390fd5b8060178190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601b60159054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6117606134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490615293565b60405180910390fd5b80600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60096020528060005260406000206000915054906101000a900460ff1681565b60006118616134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590615293565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561193957600080fd5b505afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d357600080fd5b505afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b9190614a0f565b6040518363ffffffff1660e01b8152600401611a28929190615048565b60206040518083038186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614a0f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c39578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611af557600080fd5b505afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d9190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8f57600080fd5b505afa158015611ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc79190614a0f565b6040518363ffffffff1660e01b8152600401611be4929190615048565b602060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190614a0f565b91505b81601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b611d436134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790615293565b60405180910390fd5b6000339050828290508585905014611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490615273565b60405180910390fd5b600080600090505b84849050811015611e9057848482818110611e69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013582611e7b9190615433565b91508080611e889061564a565b915050611e25565b5080611e9b836121fa565b1015611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390615193565b60405180910390fd5b611f2e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b868690508110156121f15761205d858583818110611fbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600660008a8a86818110611fff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061201491906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6006600089898581811061209a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906120af91906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550868682818110612126577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061213b91906149e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8787858181106121c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040516121d69190615313565b60405180910390a380806121e99061564a565b915050611f74565b50505050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61224b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90615293565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60195481565b60155481565b6123d86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90615293565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60189054906101000a900460ff1681565b60105481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461253190615618565b80601f016020809104026020016040519081016040528092919081815260200182805461255d90615618565b80156125aa5780601f1061257f576101008083540402835291602001916125aa565b820191906000526020600020905b81548152906001019060200180831161258d57829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061269d6125e76134ec565b8461269885604051806060016040528060258152602001615b1060259139600760006126116134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b6001905092915050565b6126af6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615293565b60405180910390fd5b80601b60166101000a81548160ff02191690831515021790555050565b600061276d6127666134ec565b84846136bf565b506001905092915050565b6127806134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490615293565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b6128326134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690615293565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161290891906150fb565b60405180910390a150565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600b6020528060005260406000206000915054906101000a900460ff1681565b61296d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f190615293565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b601b60169054906101000a900460ff1681565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612aec6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090615293565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612b9f90614ffd565b60006040518083038185875af1925050503d8060008114612bdc576040519150601f19603f3d011682016040523d82523d6000602084013e612be1565b606091505b5050905080612bef57600080fd5b50565b612bfa6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e90615293565b60405180910390fd5b8060188190555050565b612c996134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d90615293565b60405180910390fd5b80601b60186101000a81548160ff02191690831515021790555050565b612d4b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf90615293565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b612e416134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec590615293565b60405180910390fd5b8060198190555050565b612ee06134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490615293565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd4906151b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6130a26134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312690615293565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161316a929190615071565b602060405180830381600087803b15801561318457600080fd5b505af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190614bd9565b505050565b60135481565b6131cf6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390615293565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60179054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6132f86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90615293565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156133dc576000905061343e565b600082846133ea91906154ba565b90508284826133f99190615489565b14613439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343090615253565b60405180910390fd5b809150505b92915050565b600061348683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613da0565b905092915050565b600080828461349d9190615433565b9050838110156134e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d9906151f3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b906152f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb906151d3565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516136b29190615313565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613727906152d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379790615173565b60405180910390fd5b601b60149054906101000a900460ff16156137c7576137c0848484613e03565b9050613ceb565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561386b5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138835750601b60189054906101000a900460ff165b156138ce576018548211156138cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c490615233565b60405180910390fd5b5b60006138d9306121fa565b9050600060175482101590508080156138ff5750601b60149054906101000a900460ff16155b80156139555750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561396d5750601b60159054906101000a900460ff165b1561399757601b60169054906101000a900460ff161561398d5760175491505b61399682613fd6565b5b613a20846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b065750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b1a57613b158787876142a1565b613b1c565b845b9050601b60179054906101000a900460ff168015613b845750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613be957601954613ba782613b99896121fa565b61348e90919063ffffffff16565b1115613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf90615213565b60405180910390fd5b5b613c3b81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cdb9190615313565b60405180910390a3600193505050505b9392505050565b6000838311158290613d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d319190615131565b60405180910390fd5b5060008385613d499190615514565b9050809150509392505050565b6000613d9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf2565b905092915050565b60008083118290613de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dde9190615131565b60405180910390fd5b5060008385613df69190615489565b9050809150509392505050565b6000613e8e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2382600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc39190615313565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff021916908315150217905550600061400a60155460145461348e90919063ffffffff16565b90506000614025601054600d5461348e90919063ffffffff16565b90506000614040601154600e5461348e90919063ffffffff16565b9050600061407c600261406e86614060878a6133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b905060006140938287613d5690919063ffffffff16565b905060004790506140a3826144c8565b60006140b88247613d5690919063ffffffff16565b905060006140e26140d360028961344490919063ffffffff16565b89613d5690919063ffffffff16565b9050600061411e6002614110846141028c886133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b90506000614147836141398a876133c990919063ffffffff16565b61344490919063ffffffff16565b90506000614170826141628588613d5690919063ffffffff16565b613d5690919063ffffffff16565b905060008211156141e557600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156141e3573d6000803e3d6000fd5b505b600081111561425857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614256573d6000803e3d6000fd5b505b6000831180156142685750600088115b156142785761427788846147c5565b5b50505050505050505050506000601b60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614329576143226064614314601454866133c990919063ffffffff16565b61344490919063ffffffff16565b90506143a7565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143a6576143a36064614395601554866133c990919063ffffffff16565b61344490919063ffffffff16565b90505b5b60008111156144ab5761440281600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144a29190615313565b60405180910390a35b6144be8184613d5690919063ffffffff16565b9150509392505050565b6000600267ffffffffffffffff81111561450b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156145395781602001602082028036833780820191505090505b5090503081600081518110614577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561461957600080fd5b505afa15801561462d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146519190614a0f565b8160018151811061468b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161475695949392919061535e565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516147b992919061532e565b60405180910390a15050565b6147f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161487b9695949392919061509a565b6060604051808303818588803b15801561489457600080fd5b505af11580156148a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148cd9190614c7a565b5050505050565b6000813590506148e381615aa2565b92915050565b6000815190506148f881615aa2565b92915050565b60008083601f84011261491057600080fd5b8235905067ffffffffffffffff81111561492957600080fd5b60208301915083602082028301111561494157600080fd5b9250929050565b60008083601f84011261495a57600080fd5b8235905067ffffffffffffffff81111561497357600080fd5b60208301915083602082028301111561498b57600080fd5b9250929050565b6000813590506149a181615ab9565b92915050565b6000815190506149b681615ab9565b92915050565b6000813590506149cb81615ad0565b92915050565b6000815190506149e081615ad0565b92915050565b6000602082840312156149f857600080fd5b6000614a06848285016148d4565b91505092915050565b600060208284031215614a2157600080fd5b6000614a2f848285016148e9565b91505092915050565b60008060408385031215614a4b57600080fd5b6000614a59858286016148d4565b9250506020614a6a858286016148d4565b9150509250929050565b600080600060608486031215614a8957600080fd5b6000614a97868287016148d4565b9350506020614aa8868287016148d4565b9250506040614ab9868287016149bc565b9150509250925092565b60008060408385031215614ad657600080fd5b6000614ae4858286016148d4565b9250506020614af585828601614992565b9150509250929050565b60008060408385031215614b1257600080fd5b6000614b20858286016148d4565b9250506020614b31858286016149bc565b9150509250929050565b60008060008060408587031215614b5157600080fd5b600085013567ffffffffffffffff811115614b6b57600080fd5b614b77878288016148fe565b9450945050602085013567ffffffffffffffff811115614b9657600080fd5b614ba287828801614948565b925092505092959194509250565b600060208284031215614bc257600080fd5b6000614bd084828501614992565b91505092915050565b600060208284031215614beb57600080fd5b6000614bf9848285016149a7565b91505092915050565b600060208284031215614c1457600080fd5b6000614c22848285016149bc565b91505092915050565b600080600060608486031215614c4057600080fd5b6000614c4e868287016149bc565b9350506020614c5f868287016149bc565b9250506040614c70868287016149bc565b9150509250925092565b600080600060608486031215614c8f57600080fd5b6000614c9d868287016149d1565b9350506020614cae868287016149d1565b9250506040614cbf868287016149d1565b9150509250925092565b6000614cd58383614cf0565b60208301905092915050565b614cea8161555a565b82525050565b614cf981615548565b82525050565b614d0881615548565b82525050565b6000614d19826153e3565b614d238185615406565b9350614d2e836153d3565b8060005b83811015614d5f578151614d468882614cc9565b9750614d51836153f9565b925050600181019050614d32565b5085935050505092915050565b614d758161556c565b82525050565b614d84816155af565b82525050565b614d93816155d3565b82525050565b6000614da4826153ee565b614dae8185615422565b9350614dbe8185602086016155e5565b614dc781615720565b840191505092915050565b6000614ddf601c83615422565b9150614dea82615731565b602082019050919050565b6000614e02602383615422565b9150614e0d8261575a565b604082019050919050565b6000614e25601b83615422565b9150614e30826157a9565b602082019050919050565b6000614e48602683615422565b9150614e53826157d2565b604082019050919050565b6000614e6b602283615422565b9150614e7682615821565b604082019050919050565b6000614e8e601b83615422565b9150614e9982615870565b602082019050919050565b6000614eb1602583615422565b9150614ebc82615899565b604082019050919050565b6000614ed4602883615422565b9150614edf826158e8565b604082019050919050565b6000614ef7602183615422565b9150614f0282615937565b604082019050919050565b6000614f1a601683615422565b9150614f2582615986565b602082019050919050565b6000614f3d602083615422565b9150614f48826159af565b602082019050919050565b6000614f60601d83615422565b9150614f6b826159d8565b602082019050919050565b6000614f83602583615422565b9150614f8e82615a01565b604082019050919050565b6000614fa6600083615417565b9150614fb182615a50565b600082019050919050565b6000614fc9602483615422565b9150614fd482615a53565b604082019050919050565b614fe881615598565b82525050565b614ff7816155a2565b82525050565b600061500882614f99565b9150819050919050565b60006020820190506150276000830184614cff565b92915050565b60006020820190506150426000830184614ce1565b92915050565b600060408201905061505d6000830185614cff565b61506a6020830184614cff565b9392505050565b60006040820190506150866000830185614cff565b6150936020830184614fdf565b9392505050565b600060c0820190506150af6000830189614cff565b6150bc6020830188614fdf565b6150c96040830187614d8a565b6150d66060830186614d8a565b6150e36080830185614cff565b6150f060a0830184614fdf565b979650505050505050565b60006020820190506151106000830184614d6c565b92915050565b600060208201905061512b6000830184614d7b565b92915050565b6000602082019050818103600083015261514b8184614d99565b905092915050565b6000602082019050818103600083015261516c81614dd2565b9050919050565b6000602082019050818103600083015261518c81614df5565b9050919050565b600060208201905081810360008301526151ac81614e18565b9050919050565b600060208201905081810360008301526151cc81614e3b565b9050919050565b600060208201905081810360008301526151ec81614e5e565b9050919050565b6000602082019050818103600083015261520c81614e81565b9050919050565b6000602082019050818103600083015261522c81614ea4565b9050919050565b6000602082019050818103600083015261524c81614ec7565b9050919050565b6000602082019050818103600083015261526c81614eea565b9050919050565b6000602082019050818103600083015261528c81614f0d565b9050919050565b600060208201905081810360008301526152ac81614f30565b9050919050565b600060208201905081810360008301526152cc81614f53565b9050919050565b600060208201905081810360008301526152ec81614f76565b9050919050565b6000602082019050818103600083015261530c81614fbc565b9050919050565b60006020820190506153286000830184614fdf565b92915050565b60006040820190506153436000830185614fdf565b81810360208301526153558184614d0e565b90509392505050565b600060a0820190506153736000830188614fdf565b6153806020830187614d8a565b81810360408301526153928186614d0e565b90506153a16060830185614cff565b6153ae6080830184614fdf565b9695505050505050565b60006020820190506153cd6000830184614fee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061543e82615598565b915061544983615598565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547e5761547d615693565b5b828201905092915050565b600061549482615598565b915061549f83615598565b9250826154af576154ae6156c2565b5b828204905092915050565b60006154c582615598565b91506154d083615598565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550957615508615693565b5b828202905092915050565b600061551f82615598565b915061552a83615598565b92508282101561553d5761553c615693565b5b828203905092915050565b600061555382615578565b9050919050565b600061556582615578565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006155ba826155c1565b9050919050565b60006155cc82615578565b9050919050565b60006155de82615598565b9050919050565b60005b838110156156035780820151818401526020810190506155e8565b83811115615612576000848401525b50505050565b6000600282049050600182168061563057607f821691505b60208210811415615644576156436156f1565b5b50919050565b600061565582615598565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561568857615687615693565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4275792066656573206d75737420626520323525206f72206c65737300000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a20496e73756666696369656e74204572726f7221210000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c6960008201527f6d69742121000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d69736d61746368204c656e67746800000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53656c6c2066656573206d75737420626520323525206f72206c657373000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615aab81615548565b8114615ab657600080fd5b50565b615ac28161556c565b8114615acd57600080fd5b50565b615ad981615598565b8114615ae457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c7483b995d704414669d758f79271ac6a7ea2c02c7da2b2b6fff62f49aa0e4f064736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c806388790a68116101f2578063da00097d1161010d578063f1d5f517116100a0578063f84ba65d1161006f578063f84ba65d14610e73578063f872858a14610e9c578063f8f6329014610ec7578063fb4b8e6c14610ef2576103ce565b8063f1d5f51714610dcd578063f2fde38b14610df6578063f455444614610e1f578063f680f79914610e48576103ce565b8063ec28438a116100dc578063ec28438a14610d27578063ee828db314610d50578063ef422a1814610d79578063f0cd1dac14610da2576103ce565b8063da00097d14610c7d578063dc44b6a014610ca8578063dd62ed3e14610cd3578063e6b2603b14610d10576103ce565b8063c2e5ec0411610185578063c860795211610154578063c860795214610bc1578063c867d60b14610bec578063c9c9afc514610c29578063d2d7ad8314610c52576103ce565b8063c2e5ec0414610b19578063c49b9a8014610b42578063c5d2418914610b6b578063c816841b14610b96576103ce565b806398e944c8116101c157806398e944c814610a4b578063a457c2d714610a76578063a5d69d1f14610ab3578063a9059cbb14610adc576103ce565b806388790a681461098d5780638b42507f146109b85780638da5cb5b146109f557806395d89b4114610a20576103ce565b80633ecad271116102e257806370a0823111610275578063807c2d9c11610244578063807c2d9c146108e357806382eefb431461090e578063844d591c146109395780638526148514610962576103ce565b806370a0823114610839578063715018a61461087657806375f0a8741461088d5780637d1db4a5146108b8576103ce565b80635194f9bf116102b15780635194f9bf1461076b5780635342acb4146107965780635881f3ef146107d35780636724348214610810576103ce565b80633ecad271146106af5780634a74bb02146106ec5780634ada218b146107175780634cb80fd514610742576103ce565b806323555d571161035a5780632b112e49116103295780632b112e49146105f3578063313ce5671461061e57806339509351146106495780633b97084a14610686576103ce565b806323555d571461053757806323b872dd146105625780632563ae831461059f57806327c8f835146105c8576103ce565b80631694505e116103965780631694505e1461048f57806318160ddd146104ba5780631870517a146104e55780632198cf6c1461050e576103ce565b806306fdde03146103d357806308733214146103fe5780630930907b14610427578063095ea7b314610452576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f1b565b6040516103f59190615131565b60405180910390f35b34801561040a57600080fd5b5061042560048036038101906104209190614c2b565b610fad565b005b34801561043357600080fd5b5061043c6110e0565b6040516104499190615012565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614aff565b611104565b60405161048691906150fb565b60405180910390f35b34801561049b57600080fd5b506104a4611122565b6040516104b19190615116565b60405180910390f35b3480156104c657600080fd5b506104cf611148565b6040516104dc9190615313565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614c2b565b611152565b005b34801561051a57600080fd5b5061053560048036038101906105309190614ac3565b611285565b005b34801561054357600080fd5b5061054c611375565b6040516105599190615313565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190614a74565b61137b565b60405161059691906150fb565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190614bb0565b611455565b005b3480156105d457600080fd5b506105dd611507565b6040516105ea9190615012565b60405180910390f35b3480156105ff57600080fd5b5061060861152b565b6040516106159190615313565b60405180910390f35b34801561062a57600080fd5b506106336115a9565b60405161064091906153b8565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190614aff565b6115c0565b60405161067d91906150fb565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190614c02565b611673565b005b3480156106bb57600080fd5b506106d660048036038101906106d191906149e6565b611712565b6040516106e391906150fb565b60405180910390f35b3480156106f857600080fd5b50610701611732565b60405161070e91906150fb565b60405180910390f35b34801561072357600080fd5b5061072c611745565b60405161073991906150fb565b60405180910390f35b34801561074e57600080fd5b50610769600480360381019061076491906149e6565b611758565b005b34801561077757600080fd5b50610780611831565b60405161078d9190615313565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b891906149e6565b611837565b6040516107ca91906150fb565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906149e6565b611857565b6040516108079190615012565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190614b3b565b611d3b565b005b34801561084557600080fd5b50610860600480360381019061085b91906149e6565b6121fa565b60405161086d9190615313565b60405180910390f35b34801561088257600080fd5b5061088b612243565b005b34801561089957600080fd5b506108a2612398565b6040516108af919061502d565b60405180910390f35b3480156108c457600080fd5b506108cd6123be565b6040516108da9190615313565b60405180910390f35b3480156108ef57600080fd5b506108f86123c4565b6040516109059190615313565b60405180910390f35b34801561091a57600080fd5b506109236123ca565b6040516109309190615313565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190614ac3565b6123d0565b005b34801561096e57600080fd5b506109776124c0565b60405161098491906150fb565b60405180910390f35b34801561099957600080fd5b506109a26124d3565b6040516109af9190615313565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da91906149e6565b6124d9565b6040516109ec91906150fb565b60405180910390f35b348015610a0157600080fd5b50610a0a6124f9565b604051610a179190615012565b60405180910390f35b348015610a2c57600080fd5b50610a35612522565b604051610a429190615131565b60405180910390f35b348015610a5757600080fd5b50610a606125b4565b604051610a6d9190615012565b60405180910390f35b348015610a8257600080fd5b50610a9d6004803603810190610a989190614aff565b6125da565b604051610aaa91906150fb565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad59190614bb0565b6126a7565b005b348015610ae857600080fd5b50610b036004803603810190610afe9190614aff565b612759565b604051610b1091906150fb565b60405180910390f35b348015610b2557600080fd5b50610b406004803603810190610b3b9190614bb0565b612778565b005b348015610b4e57600080fd5b50610b696004803603810190610b649190614bb0565b61282a565b005b348015610b7757600080fd5b50610b80612913565b604051610b8d9190615313565b60405180910390f35b348015610ba257600080fd5b50610bab612919565b604051610bb89190615012565b60405180910390f35b348015610bcd57600080fd5b50610bd661293f565b604051610be39190615313565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906149e6565b612945565b604051610c2091906150fb565b60405180910390f35b348015610c3557600080fd5b50610c506004803603810190610c4b91906149e6565b612965565b005b348015610c5e57600080fd5b50610c67612a3e565b604051610c749190615313565b60405180910390f35b348015610c8957600080fd5b50610c92612a44565b604051610c9f91906150fb565b60405180910390f35b348015610cb457600080fd5b50610cbd612a57565b604051610cca9190615313565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190614a38565b612a5d565b604051610d079190615313565b60405180910390f35b348015610d1c57600080fd5b50610d25612ae4565b005b348015610d3357600080fd5b50610d4e6004803603810190610d499190614c02565b612bf2565b005b348015610d5c57600080fd5b50610d776004803603810190610d729190614bb0565b612c91565b005b348015610d8557600080fd5b50610da06004803603810190610d9b9190614ac3565b612d43565b005b348015610dae57600080fd5b50610db7612e33565b604051610dc49190615313565b60405180910390f35b348015610dd957600080fd5b50610df46004803603810190610def9190614c02565b612e39565b005b348015610e0257600080fd5b50610e1d6004803603810190610e1891906149e6565b612ed8565b005b348015610e2b57600080fd5b50610e466004803603810190610e419190614aff565b61309a565b005b348015610e5457600080fd5b50610e5d6131c1565b604051610e6a9190615313565b60405180910390f35b348015610e7f57600080fd5b50610e9a6004803603810190610e959190614ac3565b6131c7565b005b348015610ea857600080fd5b50610eb16132b7565b604051610ebe91906150fb565b60405180910390f35b348015610ed357600080fd5b50610edc6132ca565b604051610ee9919061502d565b60405180910390f35b348015610efe57600080fd5b50610f196004803603810190610f1491906149e6565b6132f0565b005b606060018054610f2a90615618565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5690615618565b8015610fa35780601f10610f7857610100808354040283529160200191610fa3565b820191906000526020600020905b815481529060010190602001808311610f8657829003601f168201915b5050505050905090565b610fb56134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990615293565b60405180910390fd5b82601081905550816011819055508060128190555061108260125461107460115460105461348e90919063ffffffff16565b61348e90919063ffffffff16565b60158190555060196013546110979190615489565b60155411156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d2906152b3565b60405180910390fd5b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111186111116134ec565b84846134f4565b6001905092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601654905090565b61115a6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90615293565b60405180910390fd5b82600d8190555081600e8190555080600f81905550611227600f54611219600e54600d5461348e90919063ffffffff16565b61348e90919063ffffffff16565b601481905550601960135461123c9190615489565b6014541115611280576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127790615153565b60405180910390fd5b505050565b61128d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190615293565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b60006113888484846136bf565b5061144a846113956134ec565b61144585604051806060016040528060288152602001615ae860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113fb6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b600190509392505050565b61145d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190615293565b60405180910390fd5b80601b60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006115a46115597f00000000000000000000000000000000000000000000000000000000000000006121fa565b6115966115857f000000000000000000000000000000000000000000000000000000000000dead6121fa565b601654613d5690919063ffffffff16565b613d5690919063ffffffff16565b905090565b6000600360009054906101000a900460ff16905090565b60006116696115cd6134ec565b8461166485600760006115de6134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6134f4565b6001905092915050565b61167b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ff90615293565b60405180910390fd5b8060178190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601b60159054906101000a900460ff1681565b600860009054906101000a900460ff1681565b6117606134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490615293565b60405180910390fd5b80600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60096020528060005260406000206000915054906101000a900460ff1681565b60006118616134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590615293565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561193957600080fd5b505afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d357600080fd5b505afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b9190614a0f565b6040518363ffffffff1660e01b8152600401611a28929190615048565b60206040518083038186803b158015611a4057600080fd5b505afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190614a0f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c39578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611af557600080fd5b505afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d9190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8f57600080fd5b505afa158015611ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc79190614a0f565b6040518363ffffffff1660e01b8152600401611be4929190615048565b602060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190614a0f565b91505b81601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b611d436134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc790615293565b60405180910390fd5b6000339050828290508585905014611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490615273565b60405180910390fd5b600080600090505b84849050811015611e9057848482818110611e69577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013582611e7b9190615433565b91508080611e889061564a565b915050611e25565b5080611e9b836121fa565b1015611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390615193565b60405180910390fd5b611f2e81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d5690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b868690508110156121f15761205d858583818110611fbb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135600660008a8a86818110611fff577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061201491906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b6006600089898581811061209a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906120af91906149e6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550868682818110612126577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061213b91906149e6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8787858181106121c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201356040516121d69190615313565b60405180910390a380806121e99061564a565b915050611f74565b50505050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61224b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf90615293565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60195481565b60155481565b6123d86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90615293565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60189054906101000a900460ff1681565b60105481565b600c6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461253190615618565b80601f016020809104026020016040519081016040528092919081815260200182805461255d90615618565b80156125aa5780601f1061257f576101008083540402835291602001916125aa565b820191906000526020600020905b81548152906001019060200180831161258d57829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061269d6125e76134ec565b8461269885604051806060016040528060258152602001615b1060259139600760006126116134ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b6134f4565b6001905092915050565b6126af6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390615293565b60405180910390fd5b80601b60166101000a81548160ff02191690831515021790555050565b600061276d6127666134ec565b84846136bf565b506001905092915050565b6127806134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490615293565b60405180910390fd5b80600860006101000a81548160ff02191690831515021790555050565b6128326134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690615293565b60405180910390fd5b80601b60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161290891906150fb565b60405180910390a150565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600b6020528060005260406000206000915054906101000a900460ff1681565b61296d6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f190615293565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60175481565b601b60169054906101000a900460ff1681565b600d5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612aec6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090615293565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051612b9f90614ffd565b60006040518083038185875af1925050503d8060008114612bdc576040519150601f19603f3d011682016040523d82523d6000602084013e612be1565b606091505b5050905080612bef57600080fd5b50565b612bfa6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e90615293565b60405180910390fd5b8060188190555050565b612c996134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d90615293565b60405180910390fd5b80601b60186101000a81548160ff02191690831515021790555050565b612d4b6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf90615293565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b612e416134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec590615293565b60405180910390fd5b8060198190555050565b612ee06134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6490615293565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd4906151b3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6130a26134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312690615293565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161316a929190615071565b602060405180830381600087803b15801561318457600080fd5b505af1158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190614bd9565b505050565b60135481565b6131cf6134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390615293565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b60179054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6132f86134ec565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337c90615293565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808314156133dc576000905061343e565b600082846133ea91906154ba565b90508284826133f99190615489565b14613439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343090615253565b60405180910390fd5b809150505b92915050565b600061348683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613da0565b905092915050565b600080828461349d9190615433565b9050838110156134e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d9906151f3565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355b906152f3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135cb906151d3565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516136b29190615313565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613727906152d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156137a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379790615173565b60405180910390fd5b601b60149054906101000a900460ff16156137c7576137c0848484613e03565b9050613ceb565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561386b5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138835750601b60189054906101000a900460ff165b156138ce576018548211156138cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c490615233565b60405180910390fd5b5b60006138d9306121fa565b9050600060175482101590508080156138ff5750601b60149054906101000a900460ff16155b80156139555750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561396d5750601b60159054906101000a900460ff165b1561399757601b60169054906101000a900460ff161561398d5760175491505b61399682613fd6565b5b613a20846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613b065750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613b1a57613b158787876142a1565b613b1c565b845b9050601b60179054906101000a900460ff168015613b845750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613be957601954613ba782613b99896121fa565b61348e90919063ffffffff16565b1115613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf90615213565b60405180910390fd5b5b613c3b81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613cdb9190615313565b60405180910390a3600193505050505b9392505050565b6000838311158290613d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d319190615131565b60405180910390fd5b5060008385613d499190615514565b9050809150509392505050565b6000613d9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cf2565b905092915050565b60008083118290613de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dde9190615131565b60405180910390fd5b5060008385613df69190615489565b9050809150509392505050565b6000613e8e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cf29092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2382600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613fc39190615313565b60405180910390a3600190509392505050565b6001601b60146101000a81548160ff021916908315150217905550600061400a60155460145461348e90919063ffffffff16565b90506000614025601054600d5461348e90919063ffffffff16565b90506000614040601154600e5461348e90919063ffffffff16565b9050600061407c600261406e86614060878a6133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b905060006140938287613d5690919063ffffffff16565b905060004790506140a3826144c8565b60006140b88247613d5690919063ffffffff16565b905060006140e26140d360028961344490919063ffffffff16565b89613d5690919063ffffffff16565b9050600061411e6002614110846141028c886133c990919063ffffffff16565b61344490919063ffffffff16565b61344490919063ffffffff16565b90506000614147836141398a876133c990919063ffffffff16565b61344490919063ffffffff16565b90506000614170826141628588613d5690919063ffffffff16565b613d5690919063ffffffff16565b905060008211156141e557600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156141e3573d6000803e3d6000fd5b505b600081111561425857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614256573d6000803e3d6000fd5b505b6000831180156142685750600088115b156142785761427788846147c5565b5b50505050505050505050506000601b60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614329576143226064614314601454866133c990919063ffffffff16565b61344490919063ffffffff16565b90506143a7565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143a6576143a36064614395601554866133c990919063ffffffff16565b61344490919063ffffffff16565b90505b5b60008111156144ab5761440281600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461348e90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516144a29190615313565b60405180910390a35b6144be8184613d5690919063ffffffff16565b9150509392505050565b6000600267ffffffffffffffff81111561450b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156145395781602001602082028036833780820191505090505b5090503081600081518110614577577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561461957600080fd5b505afa15801561462d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146519190614a0f565b8160018151811061468b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161475695949392919061535e565b600060405180830381600087803b15801561477057600080fd5b505af1158015614784573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516147b992919061532e565b60405180910390a15050565b6147f230601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846134f4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161487b9695949392919061509a565b6060604051808303818588803b15801561489457600080fd5b505af11580156148a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148cd9190614c7a565b5050505050565b6000813590506148e381615aa2565b92915050565b6000815190506148f881615aa2565b92915050565b60008083601f84011261491057600080fd5b8235905067ffffffffffffffff81111561492957600080fd5b60208301915083602082028301111561494157600080fd5b9250929050565b60008083601f84011261495a57600080fd5b8235905067ffffffffffffffff81111561497357600080fd5b60208301915083602082028301111561498b57600080fd5b9250929050565b6000813590506149a181615ab9565b92915050565b6000815190506149b681615ab9565b92915050565b6000813590506149cb81615ad0565b92915050565b6000815190506149e081615ad0565b92915050565b6000602082840312156149f857600080fd5b6000614a06848285016148d4565b91505092915050565b600060208284031215614a2157600080fd5b6000614a2f848285016148e9565b91505092915050565b60008060408385031215614a4b57600080fd5b6000614a59858286016148d4565b9250506020614a6a858286016148d4565b9150509250929050565b600080600060608486031215614a8957600080fd5b6000614a97868287016148d4565b9350506020614aa8868287016148d4565b9250506040614ab9868287016149bc565b9150509250925092565b60008060408385031215614ad657600080fd5b6000614ae4858286016148d4565b9250506020614af585828601614992565b9150509250929050565b60008060408385031215614b1257600080fd5b6000614b20858286016148d4565b9250506020614b31858286016149bc565b9150509250929050565b60008060008060408587031215614b5157600080fd5b600085013567ffffffffffffffff811115614b6b57600080fd5b614b77878288016148fe565b9450945050602085013567ffffffffffffffff811115614b9657600080fd5b614ba287828801614948565b925092505092959194509250565b600060208284031215614bc257600080fd5b6000614bd084828501614992565b91505092915050565b600060208284031215614beb57600080fd5b6000614bf9848285016149a7565b91505092915050565b600060208284031215614c1457600080fd5b6000614c22848285016149bc565b91505092915050565b600080600060608486031215614c4057600080fd5b6000614c4e868287016149bc565b9350506020614c5f868287016149bc565b9250506040614c70868287016149bc565b9150509250925092565b600080600060608486031215614c8f57600080fd5b6000614c9d868287016149d1565b9350506020614cae868287016149d1565b9250506040614cbf868287016149d1565b9150509250925092565b6000614cd58383614cf0565b60208301905092915050565b614cea8161555a565b82525050565b614cf981615548565b82525050565b614d0881615548565b82525050565b6000614d19826153e3565b614d238185615406565b9350614d2e836153d3565b8060005b83811015614d5f578151614d468882614cc9565b9750614d51836153f9565b925050600181019050614d32565b5085935050505092915050565b614d758161556c565b82525050565b614d84816155af565b82525050565b614d93816155d3565b82525050565b6000614da4826153ee565b614dae8185615422565b9350614dbe8185602086016155e5565b614dc781615720565b840191505092915050565b6000614ddf601c83615422565b9150614dea82615731565b602082019050919050565b6000614e02602383615422565b9150614e0d8261575a565b604082019050919050565b6000614e25601b83615422565b9150614e30826157a9565b602082019050919050565b6000614e48602683615422565b9150614e53826157d2565b604082019050919050565b6000614e6b602283615422565b9150614e7682615821565b604082019050919050565b6000614e8e601b83615422565b9150614e9982615870565b602082019050919050565b6000614eb1602583615422565b9150614ebc82615899565b604082019050919050565b6000614ed4602883615422565b9150614edf826158e8565b604082019050919050565b6000614ef7602183615422565b9150614f0282615937565b604082019050919050565b6000614f1a601683615422565b9150614f2582615986565b602082019050919050565b6000614f3d602083615422565b9150614f48826159af565b602082019050919050565b6000614f60601d83615422565b9150614f6b826159d8565b602082019050919050565b6000614f83602583615422565b9150614f8e82615a01565b604082019050919050565b6000614fa6600083615417565b9150614fb182615a50565b600082019050919050565b6000614fc9602483615422565b9150614fd482615a53565b604082019050919050565b614fe881615598565b82525050565b614ff7816155a2565b82525050565b600061500882614f99565b9150819050919050565b60006020820190506150276000830184614cff565b92915050565b60006020820190506150426000830184614ce1565b92915050565b600060408201905061505d6000830185614cff565b61506a6020830184614cff565b9392505050565b60006040820190506150866000830185614cff565b6150936020830184614fdf565b9392505050565b600060c0820190506150af6000830189614cff565b6150bc6020830188614fdf565b6150c96040830187614d8a565b6150d66060830186614d8a565b6150e36080830185614cff565b6150f060a0830184614fdf565b979650505050505050565b60006020820190506151106000830184614d6c565b92915050565b600060208201905061512b6000830184614d7b565b92915050565b6000602082019050818103600083015261514b8184614d99565b905092915050565b6000602082019050818103600083015261516c81614dd2565b9050919050565b6000602082019050818103600083015261518c81614df5565b9050919050565b600060208201905081810360008301526151ac81614e18565b9050919050565b600060208201905081810360008301526151cc81614e3b565b9050919050565b600060208201905081810360008301526151ec81614e5e565b9050919050565b6000602082019050818103600083015261520c81614e81565b9050919050565b6000602082019050818103600083015261522c81614ea4565b9050919050565b6000602082019050818103600083015261524c81614ec7565b9050919050565b6000602082019050818103600083015261526c81614eea565b9050919050565b6000602082019050818103600083015261528c81614f0d565b9050919050565b600060208201905081810360008301526152ac81614f30565b9050919050565b600060208201905081810360008301526152cc81614f53565b9050919050565b600060208201905081810360008301526152ec81614f76565b9050919050565b6000602082019050818103600083015261530c81614fbc565b9050919050565b60006020820190506153286000830184614fdf565b92915050565b60006040820190506153436000830185614fdf565b81810360208301526153558184614d0e565b90509392505050565b600060a0820190506153736000830188614fdf565b6153806020830187614d8a565b81810360408301526153928186614d0e565b90506153a16060830185614cff565b6153ae6080830184614fdf565b9695505050505050565b60006020820190506153cd6000830184614fee565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061543e82615598565b915061544983615598565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561547e5761547d615693565b5b828201905092915050565b600061549482615598565b915061549f83615598565b9250826154af576154ae6156c2565b5b828204905092915050565b60006154c582615598565b91506154d083615598565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561550957615508615693565b5b828202905092915050565b600061551f82615598565b915061552a83615598565b92508282101561553d5761553c615693565b5b828203905092915050565b600061555382615578565b9050919050565b600061556582615578565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006155ba826155c1565b9050919050565b60006155cc82615578565b9050919050565b60006155de82615598565b9050919050565b60005b838110156156035780820151818401526020810190506155e8565b83811115615612576000848401525b50505050565b6000600282049050600182168061563057607f821691505b60208210811415615644576156436156f1565b5b50919050565b600061565582615598565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561568857615687615693565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4275792066656573206d75737420626520323525206f72206c65737300000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a20496e73756666696369656e74204572726f7221210000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f416d6f756e74204578636565642046726f6d204d61782057616c6c6574204c6960008201527f6d69742121000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d69736d61746368204c656e67746800000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53656c6c2066656573206d75737420626520323525206f72206c657373000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b615aab81615548565b8114615ab657600080fd5b50565b615ac28161556c565b8114615acd57600080fd5b50565b615ad981615598565b8114615ae457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c7483b995d704414669d758f79271ac6a7ea2c02c7da2b2b6fff62f49aa0e4f064736f6c63430008040033

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.