ETH Price: $2,673.51 (+0.18%)

Token

Teh Whitepaper (WP)
 

Overview

Max Total Supply

7,777,777,777,777 WP

Holders

211

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
ezmoon.eth
Balance
0.222577769754275148 WP

Value
$0.00
0xe0860303008ee52eb7fb47ac155a10edf625efae
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
TehWhitepaper

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : TehWhitepaper.sol
/**
 *Submitted for verification at Etherscan.io on 2023-06-14
*/

/**

Teh Whitepaper - $WP

https://www.tehwhitepaper.vip/
https://medium.com/@0xmitsubishiresearch/i-am-mitsubishi-82c17b55f4bc

*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.17;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract TehWhitepaper is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public isBot;

    uint256 public  liquidityFeeOnBuy;
    uint256 public  liquidityFeeOnSell;

    uint256 public  marketingFeeOnBuy;
    uint256 public  marketingFeeOnSell;

    uint256 private _totalFeesOnBuy;
    uint256 private _totalFeesOnSell;

    // addresses
    address public developmentWallet;
    address public marketingWallet;

    uint256 public  swapTokensAtAmount;
    bool private swapping;

    bool public swapEnabled;

    uint256 public launchTime;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MarketingWalletChanged(address marketingWallet);
    event UpdateBuyFees(uint256 liquidityFeeOnBuy, uint256 marketingFeeOnBuy);
    event UpdateSellFees(uint256 liquidityFeeOnSell, uint256 marketingFeeOnSell);
    event UpdateAllFees(uint256 _liquidityFeeOnBuy, uint256 _liquidityFeeOnSell, uint256 _marketingFeeOnBuy, uint256 _marketingFeeOnSell);
    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 bnbReceived,uint256 tokensIntoLiqudity);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);

    constructor () ERC20("Teh Whitepaper", "WP") 
    {   
        address router;

        if (block.chainid == 31337 || block.chainid == 1337) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Local Hardhat 
        } else if (block.chainid == 1 || block.chainid == 5) {
            router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH Uniswap Mainnet % Testnet
        } else {
            revert("Invalid Chain");
        }

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        liquidityFeeOnBuy  = 0;
        liquidityFeeOnSell = 0;

        marketingFeeOnBuy  = 2500; // 25%
        marketingFeeOnSell = 2500; // 25%

        _totalFeesOnBuy    = liquidityFeeOnBuy  + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        marketingWallet = 0x7C20ff8670cC65E048368Ad38345bE68C1ab2e5F;
        developmentWallet = 0x7C20ff8670cC65E048368Ad38345bE68C1ab2e5F;

        maxTransactionLimitEnabled = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxTxLimit[marketingWallet] = true;

        maxWalletLimitEnabled = true;

        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromFees[address(this)] = true;

        uint256 _totalSupply =  7_777_777_777_777 * (10 ** decimals());
        _mint(msg.sender, _totalSupply);

        swapTokensAtAmount = totalSupply() * 2 / 10000; // 0.02% of totalSupply
	
        maxTransactionAmountBuy     = totalSupply() * 15 / 1000; // 1.5% maxBuy
        maxTransactionAmountSell    = totalSupply() * 15 / 1000; // 1.5% maxSell
        maxWalletAmount             = totalSupply() * 30 / 1000; // 3% max wallet holding

        tradingEnabled = false;
        swapEnabled = false;
    }

    receive() external payable {

  	}
    function setisBot(address _address, bool _enabled) external onlyOwner {isBot[_address] = _enabled;}

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        if (token == address(0x0)) {
            payable(msg.sender).sendValue(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function updateAllFees(uint256 _liquidityFeeOnBuy, uint256 _liquidityFeeOnSell, uint256 _marketingFeeOnBuy, uint256 _marketingFeeOnSell) external onlyOwner {
        liquidityFeeOnBuy = _liquidityFeeOnBuy;
        liquidityFeeOnSell = _liquidityFeeOnSell;
        marketingFeeOnBuy = _marketingFeeOnBuy;
        marketingFeeOnSell = _marketingFeeOnSell;

        _totalFeesOnBuy   = liquidityFeeOnBuy + marketingFeeOnBuy;
        _totalFeesOnSell   = liquidityFeeOnSell + marketingFeeOnSell;

        require(_totalFeesOnBuy + _totalFeesOnSell <= 18000, "Total Fees cannot exceed the maximum");

        emit UpdateAllFees(liquidityFeeOnBuy, liquidityFeeOnSell, marketingFeeOnBuy, marketingFeeOnSell);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner{
        require(_marketingWallet != marketingWallet,"Marketing wallet is already that address");
        require(_marketingWallet != address(0),"Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;

        emit MarketingWalletChanged(marketingWallet);
    }

    bool public tradingEnabled;

    function enableTrading() external onlyOwner{
        require(!tradingEnabled, "Trading already enabled.");
        tradingEnabled = true;
        swapEnabled = true;
        launchTime = block.timestamp;
    }

    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!");
       
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                !_isExcludedFromMaxTxLimit[from] && 
                !_isExcludedFromMaxTxLimit[to]
            ) {
                if (from == uniswapV2Pair) {
                    require(
                        amount <= maxTransactionAmountBuy,  
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                } else {
                    require(
                        amount <= maxTransactionAmountSell, 
                        "AntiWhale: Transfer amount exceeds the maxTransactionAmount"
                    );
                }
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;


        // when buy
        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair &&
            _totalFeesOnBuy + _totalFeesOnSell > 0 &&
            swapEnabled
        ) {
            swapping = true;

            uint256 totalFee = _totalFeesOnBuy + _totalFeesOnSell;
            uint256 liquidityShare = liquidityFeeOnBuy + liquidityFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

            if (liquidityShare > 0) {
                uint256 liquidityBuyTaxTokens = contractTokenBalance * liquidityFeeOnBuy / totalFee;
                uint256 liquiditySellTaxTokens = contractTokenBalance * liquidityFeeOnSell / totalFee;
                swapAndLiquify(liquidityBuyTaxTokens);
                sendToDead(liquiditySellTaxTokens);
            }
            
            if (marketingShare > 0) {
                uint256 teamTokens = contractTokenBalance * 80 / 100; // 80% of marketing share
                uint256 deadTokens = contractTokenBalance * 10 / 100; // 10% of marketing share
                uint256 lpTokens = contractTokenBalance * 10 / 100; // 10% of marketing share 
                swapAndSendMarketing(teamTokens);
                sendToDead(deadTokens);
                swapAndLiquify(lpTokens);
            }          

            swapping = false;
        }
        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;
        } else if (from == uniswapV2Pair) {
            _totalFees = _totalFeesOnBuy;
        } else if (to == uniswapV2Pair) {
            _totalFees = _totalFeesOnSell;
        } else {
            _totalFees = 0;
        }
        
        if (isBot[from]) {
            _totalFees = 10000;
        } 
        if (isBot[to]) {
            _totalFees = 10000;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 10_000;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) 
        {
            if (!_isExcludedFromMaxWalletLimit[from] && 
                !_isExcludedFromMaxWalletLimit[to] &&
                to != uniswapV2Pair
            ) {
                uint256 balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }
        
        super._transfer(from, to, amount);
    }

    function setSwapEnabled(bool _enabled) external onlyOwner{
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;

        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            path,
            address(this),
            block.timestamp);
        
        uint256 newBalance = address(this).balance - initialBalance;

        uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0xdead),
            block.timestamp
        );

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapAndSendMarketing(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

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

        payable(marketingWallet).sendValue(newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function sendToDead (uint256 tokenAmount) private {
        address burnAddress = 0x000000000000000000000000000000000000dEaD;
        emit Transfer(address(this), burnAddress, tokenAmount);
    }

    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled;
    uint256 public maxWalletAmount;

    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxWalletLimitAmountChanged(uint256 maxWalletAmount);

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(enable != maxWalletLimitEnabled,"Max wallet limit is already set to that state");
        maxWalletLimitEnabled = enable;

        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(_maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, "Max wallet percentage cannot be lower than 1%");
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());

        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function excludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxWalletLimit[account] != exclude,"Account is already set to that state");
        _isExcludedFromMaxWalletLimit[account] = exclude;

        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled;
    uint256 public  maxTransactionAmountBuy;
    uint256 public  maxTransactionAmountSell;

    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransactionAmountBuy, uint256 maxTransactionAmountSell);

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner {
        require(enable != maxTransactionLimitEnabled, "Max transaction limit is already set to that state");
        maxTransactionLimitEnabled = enable;

        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmounts(uint256 _maxTransactionAmountBuy, uint256 _maxTransactionAmountSell) external onlyOwner {
        require(
            _maxTransactionAmountBuy  >= (totalSupply() / (10 ** decimals())) / 1_000 && 
            _maxTransactionAmountSell >= (totalSupply() / (10 ** decimals())) / 1_000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmountBuy  = _maxTransactionAmountBuy  * (10 ** decimals());
        maxTransactionAmountSell = _maxTransactionAmountSell * (10 ** decimals());

        emit MaxTransactionLimitAmountChanged(maxTransactionAmountBuy, maxTransactionAmountSell);
    }

    function excludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require( _isExcludedFromMaxTxLimit[account] != exclude, "Account is already set to that state");
        require(account != address(this), "Can't set this address.");

        _isExcludedFromMaxTxLimit[account] = exclude;

        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

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

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxTransactionAmountSell","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"UpdateAllFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"walletToWalletTransferFee","type":"uint256"}],"name":"UpdateWalletToWalletTransferFee","type":"event"},{"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":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmountBuy","type":"uint256"},{"internalType":"uint256","name":"_maxTransactionAmountSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"}],"name":"updateAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600e81526020017f54656820576869746570617065720000000000000000000000000000000000008152506040518060400160405280600281526020017f575000000000000000000000000000000000000000000000000000000000000081525081600390816200008f919062001118565b508060049081620000a1919062001118565b5050506000620000b662000b0660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000617a6946148062000169575061053946145b156200018c57737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fd565b60014614806200019c5750600546145b15620001bf57737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fc565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f39062001260565b60405180910390fd5b5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002769190620012ec565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003049190620012ec565b6040518363ffffffff1660e01b8152600401620003239291906200132f565b6020604051808303816000875af115801562000343573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003699190620012ec565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b0e60201b60201c565b6000600a819055506000600b819055506109c4600c819055506109c4600d81905550600c54600a546200047691906200138b565b600e81905550600d54600b546200048e91906200138b565b600f81905550737c20ff8670cc65e048368ad38345be68c1ab2e5f601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737c20ff8670cc65e048368ad38345be68c1ab2e5f601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a60006101000a81548160ff0219169083151502179055506001601960006200056f62000cdf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016019600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760006101000a81548160ff0219169083151502179055506001601660006200071d62000cdf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620008b062000cdf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000620009c562000d0960201b60201c565b600a620009d3919062001527565b650712e7ae7c71620009e6919062001578565b9050620009fa338262000d1260201b60201c565b612710600262000a0f62000e8a60201b60201c565b62000a1b919062001578565b62000a279190620015f2565b6012819055506103e8600f62000a4262000e8a60201b60201c565b62000a4e919062001578565b62000a5a9190620015f2565b601b819055506103e8600f62000a7562000e8a60201b60201c565b62000a81919062001578565b62000a8d9190620015f2565b601c819055506103e8601e62000aa862000e8a60201b60201c565b62000ab4919062001578565b62000ac09190620015f2565b6018819055506000601560006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff02191690831515021790555050505050620017fa565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7790620016a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be99062001738565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000cd291906200176b565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d7b90620017d8565b60405180910390fd5b62000d986000838362000e9460201b60201c565b806002600082825462000dac91906200138b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000e0391906200138b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e6a91906200176b565b60405180910390a362000e866000838362000e9960201b60201c565b5050565b6000600254905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f2057607f821691505b60208210810362000f365762000f3562000ed8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000fa07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f61565b62000fac868362000f61565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ff962000ff362000fed8462000fc4565b62000fce565b62000fc4565b9050919050565b6000819050919050565b620010158362000fd8565b6200102d620010248262001000565b84845462000f6e565b825550505050565b600090565b6200104462001035565b620010518184846200100a565b505050565b5b8181101562001079576200106d6000826200103a565b60018101905062001057565b5050565b601f821115620010c857620010928162000f3c565b6200109d8462000f51565b81016020851015620010ad578190505b620010c5620010bc8562000f51565b83018262001056565b50505b505050565b600082821c905092915050565b6000620010ed60001984600802620010cd565b1980831691505092915050565b6000620011088383620010da565b9150826002028217905092915050565b620011238262000e9e565b67ffffffffffffffff8111156200113f576200113e62000ea9565b5b6200114b825462000f07565b620011588282856200107d565b600060209050601f8311600181146200119057600084156200117b578287015190505b620011878582620010fa565b865550620011f7565b601f198416620011a08662000f3c565b60005b82811015620011ca57848901518255600182019150602085019450602081019050620011a3565b86831015620011ea5784890151620011e6601f891682620010da565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f496e76616c696420436861696e00000000000000000000000000000000000000600082015250565b600062001248600d83620011ff565b9150620012558262001210565b602082019050919050565b600060208201905081810360008301526200127b8162001239565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012b48262001287565b9050919050565b620012c681620012a7565b8114620012d257600080fd5b50565b600081519050620012e681620012bb565b92915050565b60006020828403121562001305576200130462001282565b5b60006200131584828501620012d5565b91505092915050565b6200132981620012a7565b82525050565b60006040820190506200134660008301856200131e565b6200135560208301846200131e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620013988262000fc4565b9150620013a58362000fc4565b9250828201905080821115620013c057620013bf6200135c565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156200142557808604811115620013fd57620013fc6200135c565b5b60018516156200140d5780820291505b80810290506200141d85620013c6565b9450620013dd565b94509492505050565b60008262001440576001905062001513565b8162001450576000905062001513565b81600181146200146957600281146200147457620014aa565b600191505062001513565b60ff8411156200148957620014886200135c565b5b8360020a915084821115620014a357620014a26200135c565b5b5062001513565b5060208310610133831016604e8410600b8410161715620014e45782820a905083811115620014de57620014dd6200135c565b5b62001513565b620014f38484846001620013d3565b925090508184048111156200150d576200150c6200135c565b5b81810290505b9392505050565b600060ff82169050919050565b6000620015348262000fc4565b915062001541836200151a565b9250620015707fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200142e565b905092915050565b6000620015858262000fc4565b9150620015928362000fc4565b9250828202620015a28162000fc4565b91508282048414831517620015bc57620015bb6200135c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620015ff8262000fc4565b91506200160c8362000fc4565b9250826200161f576200161e620015c3565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001688602483620011ff565b915062001695826200162a565b604082019050919050565b60006020820190508181036000830152620016bb8162001679565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001720602283620011ff565b91506200172d82620016c2565b604082019050919050565b60006020820190508181036000830152620017538162001711565b9050919050565b620017658162000fc4565b82525050565b60006020820190506200178260008301846200175a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620017c0601f83620011ff565b9150620017cd8262001788565b602082019050919050565b60006020820190508181036000830152620017f381620017b1565b9050919050565b615d22806200180a6000396000f3fe6080604052600436106102b25760003560e01c8063715018a611610175578063aa4bde28116100dc578063d2fcc00111610095578063e01af92c1161006f578063e01af92c14610ad5578063e2f4560514610afe578063f2fde38b14610b29578063f9d0831a14610b52576102b9565b8063d2fcc00114610a44578063dc4c7dbc14610a6d578063dd62ed3e14610a98576102b9565b8063aa4bde281461094a578063afa4f3b214610975578063b6f7f6811461099e578063bb85c6d1146109c7578063c0246668146109f0578063c04a541414610a19576102b9565b80638c41180e1161012e5780638c41180e146108145780638da5cb5b1461083d57806395d89b4114610868578063a457c2d714610893578063a8a69b9d146108d0578063a9059cbb1461090d576102b9565b8063715018a61461073c57806375f0a87414610753578063790ca4131461077e5780637b3c83b1146107a9578063880bcbc1146107d45780638a8c523c146107fd576102b9565b80632d88cc08116102195780634fbee193116101d25780634fbee1931461061857806356a6cabf1461065557806359136fa51461067e5780635fc2e596146106a95780636ddd1713146106d457806370a08231146106ff576102b9565b80632d88cc08146104f4578063313ce5671461051d57806339509351146105485780633bbac5791461058557806349bd5a5e146105c25780634ada218b146105ed576102b9565b806321a9d82a1161026b57806321a9d82a146103e457806323b872dd1461040f57806327a14fc21461044c5780632a6c7dba146104755780632ba86bf21461049e5780632ce86fbf146104c9576102b9565b80630105d0fd146102be57806306fdde03146102e9578063095ea7b3146103145780631694505e1461035157806318160ddd1461037c57806318d9ceae146103a7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7b565b6040516102e09190614214565b60405180910390f35b3480156102f557600080fd5b506102fe610b81565b60405161030b91906142bf565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190614370565b610c13565b60405161034891906143cb565b60405180910390f35b34801561035d57600080fd5b50610366610c31565b6040516103739190614445565b60405180910390f35b34801561038857600080fd5b50610391610c57565b60405161039e9190614214565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190614460565b610c61565b6040516103db91906143cb565b60405180910390f35b3480156103f057600080fd5b506103f9610cb7565b60405161040691906143cb565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061448d565b610cca565b60405161044391906143cb565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906144e0565b610de9565b005b34801561048157600080fd5b5061049c60048036038101906104979190614539565b610f55565b005b3480156104aa57600080fd5b506104b36110a4565b6040516104c091906143cb565b60405180910390f35b3480156104d557600080fd5b506104de6110b7565b6040516104eb9190614214565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190614566565b6110bd565b005b34801561052957600080fd5b5061053261123b565b60405161053f91906145e9565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190614370565b611244565b60405161057c91906143cb565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190614460565b6112f0565b6040516105b991906143cb565b60405180910390f35b3480156105ce57600080fd5b506105d7611310565b6040516105e49190614613565b60405180910390f35b3480156105f957600080fd5b50610602611336565b60405161060f91906143cb565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190614460565b611349565b60405161064c91906143cb565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614539565b61139f565b005b34801561068a57600080fd5b506106936114ee565b6040516106a09190614214565b60405180910390f35b3480156106b557600080fd5b506106be6114f4565b6040516106cb9190614214565b60405180910390f35b3480156106e057600080fd5b506106e96114fa565b6040516106f691906143cb565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614460565b61150d565b6040516107339190614214565b60405180910390f35b34801561074857600080fd5b50610751611555565b005b34801561075f57600080fd5b506107686116ad565b6040516107759190614613565b60405180910390f35b34801561078a57600080fd5b506107936116d3565b6040516107a09190614214565b60405180910390f35b3480156107b557600080fd5b506107be6116d9565b6040516107cb9190614214565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061462e565b6116df565b005b34801561080957600080fd5b5061081261191f565b005b34801561082057600080fd5b5061083b6004803603810190610836919061462e565b611a45565b005b34801561084957600080fd5b50610852611b37565b60405161085f9190614613565b60405180910390f35b34801561087457600080fd5b5061087d611b61565b60405161088a91906142bf565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190614370565b611bf3565b6040516108c791906143cb565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190614460565b611cde565b60405161090491906143cb565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614370565b611d34565b60405161094191906143cb565b60405180910390f35b34801561095657600080fd5b5061095f611d52565b60405161096c9190614214565b60405180910390f35b34801561098157600080fd5b5061099c600480360381019061099791906144e0565b611d58565b005b3480156109aa57600080fd5b506109c560048036038101906109c0919061466e565b611e89565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190614460565b61205e565b005b3480156109fc57600080fd5b50610a176004803603810190610a12919061462e565b612291565b005b348015610a2557600080fd5b50610a2e612463565b604051610a3b9190614613565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a66919061462e565b612489565b005b348015610a7957600080fd5b50610a8261265b565b604051610a8f9190614214565b60405180910390f35b348015610aa457600080fd5b50610abf6004803603810190610aba91906146ae565b612661565b604051610acc9190614214565b60405180910390f35b348015610ae157600080fd5b50610afc6004803603810190610af79190614539565b6126e8565b005b348015610b0a57600080fd5b50610b136127f1565b604051610b209190614214565b60405180910390f35b348015610b3557600080fd5b50610b506004803603810190610b4b9190614460565b6127f7565b005b348015610b5e57600080fd5b50610b796004803603810190610b749190614460565b6129bd565b005b601b5481565b606060038054610b909061471d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc9061471d565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c20612c2d565b8484612c35565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601760009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d16612c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dd25782811015610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906147c0565b60405180910390fd5b610dd185610dc9612c2d565b858403612c35565b5b610ddd858585612dfe565b60019150509392505050565b610df1612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e779061482c565b60405180910390fd5b6064610e8a61123b565b600a610e9691906149ae565b610e9e610c57565b610ea89190614a28565b610eb29190614a28565b811015610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90614acb565b60405180910390fd5b610efc61123b565b600a610f0891906149ae565b81610f139190614aeb565b6018819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601854604051610f4a9190614214565b60405180910390a150565b610f5d612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe39061482c565b60405180910390fd5b601760009054906101000a900460ff16151581151503611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614b9f565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601760009054906101000a900460ff1660405161109991906143cb565b60405180910390a150565b601a60009054906101000a900460ff1681565b600b5481565b6110c5612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b9061482c565b60405180910390fd5b83600a8190555082600b8190555081600c8190555080600d81905550600c54600a546111809190614bbf565b600e81905550600d54600b546111969190614bbf565b600f81905550614650600f54600e546111af9190614bbf565b11156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790614c65565b60405180910390fd5b7f829b8b9e6e2d0b0ebceef83298f970c163f4d0d4689fa3a6856d8efb98272eed600a54600b54600c54600d5460405161122d9493929190614c85565b60405180910390a150505050565b60006012905090565b60006112e6611251612c2d565b84846001600061125f612c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112e19190614bbf565b612c35565b6001905092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113a7612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061482c565b60405180910390fd5b601a60009054906101000a900460ff1615158115150361148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614d3c565b60405180910390fd5b80601a60006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601a60009054906101000a900460ff166040516114e391906143cb565b60405180910390a150565b601c5481565b600c5481565b601360019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61155d612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e39061482c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b600a5481565b6116e7612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d9061482c565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90614dce565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90614e3a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c108260405161191391906143cb565b60405180910390a25050565b611927612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad9061482c565b60405180910390fd5b601560009054906101000a900460ff1615611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90614ea6565b60405180910390fd5b6001601560006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff02191690831515021790555042601481905550565b611a4d612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad39061482c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b709061471d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9c9061471d565b8015611be95780601f10611bbe57610100808354040283529160200191611be9565b820191906000526020600020905b815481529060010190602001808311611bcc57829003601f168201915b5050505050905090565b60008060016000611c02612c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690614f38565b60405180910390fd5b611cd3611cca612c2d565b85858403612c35565b600191505092915050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611d48611d41612c2d565b8484612dfe565b6001905092915050565b60185481565b611d60612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061482c565b60405180910390fd5b620f4240611dfb610c57565b611e059190614a28565b8111611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90614fca565b60405180910390fd5b806012819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601254604051611e7e9190614214565b60405180910390a150565b611e91612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f179061482c565b60405180910390fd5b6103e8611f2b61123b565b600a611f3791906149ae565b611f3f610c57565b611f499190614a28565b611f539190614a28565b8210158015611f9457506103e8611f6861123b565b600a611f7491906149ae565b611f7c610c57565b611f869190614a28565b611f909190614a28565b8110155b611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061505c565b60405180910390fd5b611fdb61123b565b600a611fe791906149ae565b82611ff29190614aeb565b601b8190555061200061123b565b600a61200c91906149ae565b816120179190614aeb565b601c819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601b54601c5460405161205292919061507c565b60405180910390a15050565b612066612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec9061482c565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90615117565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb906151a9565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516122869190614613565b60405180910390a150565b612299612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f9061482c565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b19061523b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161245791906143cb565b60405180910390a25050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612491612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125179061482c565b60405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614dce565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161264f91906143cb565b60405180910390a25050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126f0612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127769061482c565b60405180910390fd5b801515601360019054906101000a900460ff161515036127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb906152cd565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b60125481565b6127ff612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461288e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128859061482c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f49061535f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129c5612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b9061482c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906153f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b2557612b1f473373ffffffffffffffffffffffffffffffffffffffff1661385b90919063ffffffff16565b50612c2a565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b659190614613565b602060405180830381865afa158015612b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba69190615426565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612be3929190615453565b6020604051808303816000875af1158015612c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c269190615491565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9b90615530565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a906155c2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612df19190614214565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6490615654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed3906156e6565b60405180910390fd5b601560009054906101000a900460ff1680612f405750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f945750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90615752565b60405180910390fd5b60008103612fec57612fe783836000613916565b613856565b601a60009054906101000a900460ff161561324257600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806130aa5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156131005750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131565750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131fa57601b548111156131f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ec906157e4565b60405180910390fd5b613240565b601c5481111561323f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613236906157e4565b60405180910390fd5b5b5b5b600061324d3061150d565b9050600060125482101590508080156132735750601360009054906101000a900460ff16155b80156132cc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156132e757506000600f54600e546132e59190614bbf565b115b80156132ff5750601360019054906101000a900460ff165b15613451576001601360006101000a81548160ff0219169083151502179055506000600f54600e546133319190614bbf565b90506000600b54600a546133459190614bbf565b90506000600d54600c546133599190614bbf565b905060008211156133b357600083600a54876133759190614aeb565b61337f9190614a28565b9050600084600b54886133929190614aeb565b61339c9190614a28565b90506133a782613b95565b6133b081613ecf565b50505b600081111561343257600060646050876133cd9190614aeb565b6133d79190614a28565b905060006064600a886133ea9190614aeb565b6133f49190614a28565b905060006064600a896134079190614aeb565b6134119190614a28565b905061341c83613f3f565b61342582613ecf565b61342e81613b95565b5050505b6000601360006101000a81548160ff0219169083151502179055505050505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134f45750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061350b5750601360009054906101000a900460ff165b1561351957600090506135de565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361357857600e5490506135dd565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036135d757600f5490506135dc565b600090505b5b5b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136365761271090505b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561368e5761271090505b60008111156136cf57600061271082866136a89190614aeb565b6136b29190614a28565b905080856136c09190615804565b94506136cd873083613916565b505b601760009054906101000a900460ff161561384757601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137885750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137e25750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156138465760006137f28661150d565b905060185485826138039190614bbf565b1115613844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383b906158aa565b60405180910390fd5b505b5b613852868686613916565b5050505b505050565b6000814710156138a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389790615916565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff16836040516138c690615967565b60006040518083038185875af1925050503d8060008114613903576040519150601f19603f3d011682016040523d82523d6000602084013e613908565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397c90615654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139eb906156e6565b60405180910390fd5b6139ff8383836141f1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7c906159ee565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b189190614bbf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b7c9190614214565b60405180910390a3613b8f8484846141f6565b50505050565b6000600282613ba49190614a28565b905060008183613bb49190615804565b905060004790506000600267ffffffffffffffff811115613bd857613bd7615a0e565b5b604051908082528060200260200182016040528015613c065781602001602082028036833780820191505090505b5090503081600081518110613c1e57613c1d615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce99190615a81565b81600181518110613cfd57613cfc615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401613d9b959493929190615ba7565b600060405180830381600087803b158015613db557600080fd5b505af1158015613dc9573d6000803e3d6000fd5b5050505060008247613ddb9190615804565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061dead426040518863ffffffff1660e01b8152600401613e4696959493929190615c01565b60606040518083038185885af1158015613e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e899190615c62565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051613ebf93929190615cb5565b60405180910390a1505050505050565b600061dead90508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f339190614214565b60405180910390a35050565b60004790506000600267ffffffffffffffff811115613f6157613f60615a0e565b5b604051908082528060200260200182016040528015613f8f5781602001602082028036833780820191505090505b5090503081600081518110613fa757613fa6615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561404e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140729190615a81565b8160018151811061408657614085615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401614124959493929190615ba7565b600060405180830381600087803b15801561413e57600080fd5b505af1158015614152573d6000803e3d6000fd5b50505050600082476141649190615804565b90506141b181601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661385b90919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299984826040516141e392919061507c565b60405180910390a150505050565b505050565b505050565b6000819050919050565b61420e816141fb565b82525050565b60006020820190506142296000830184614205565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561426957808201518184015260208101905061424e565b60008484015250505050565b6000601f19601f8301169050919050565b60006142918261422f565b61429b818561423a565b93506142ab81856020860161424b565b6142b481614275565b840191505092915050565b600060208201905081810360008301526142d98184614286565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614311826142e6565b9050919050565b61432181614306565b811461432c57600080fd5b50565b60008135905061433e81614318565b92915050565b61434d816141fb565b811461435857600080fd5b50565b60008135905061436a81614344565b92915050565b60008060408385031215614387576143866142e1565b5b60006143958582860161432f565b92505060206143a68582860161435b565b9150509250929050565b60008115159050919050565b6143c5816143b0565b82525050565b60006020820190506143e060008301846143bc565b92915050565b6000819050919050565b600061440b614406614401846142e6565b6143e6565b6142e6565b9050919050565b600061441d826143f0565b9050919050565b600061442f82614412565b9050919050565b61443f81614424565b82525050565b600060208201905061445a6000830184614436565b92915050565b600060208284031215614476576144756142e1565b5b60006144848482850161432f565b91505092915050565b6000806000606084860312156144a6576144a56142e1565b5b60006144b48682870161432f565b93505060206144c58682870161432f565b92505060406144d68682870161435b565b9150509250925092565b6000602082840312156144f6576144f56142e1565b5b60006145048482850161435b565b91505092915050565b614516816143b0565b811461452157600080fd5b50565b6000813590506145338161450d565b92915050565b60006020828403121561454f5761454e6142e1565b5b600061455d84828501614524565b91505092915050565b600080600080608085870312156145805761457f6142e1565b5b600061458e8782880161435b565b945050602061459f8782880161435b565b93505060406145b08782880161435b565b92505060606145c18782880161435b565b91505092959194509250565b600060ff82169050919050565b6145e3816145cd565b82525050565b60006020820190506145fe60008301846145da565b92915050565b61460d81614306565b82525050565b60006020820190506146286000830184614604565b92915050565b60008060408385031215614645576146446142e1565b5b60006146538582860161432f565b925050602061466485828601614524565b9150509250929050565b60008060408385031215614685576146846142e1565b5b60006146938582860161435b565b92505060206146a48582860161435b565b9150509250929050565b600080604083850312156146c5576146c46142e1565b5b60006146d38582860161432f565b92505060206146e48582860161432f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061473557607f821691505b602082108103614748576147476146ee565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006147aa60288361423a565b91506147b58261474e565b604082019050919050565b600060208201905081810360008301526147d98161479d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061481660208361423a565b9150614821826147e0565b602082019050919050565b6000602082019050818103600083015261484581614809565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156148d2578086048111156148ae576148ad61484c565b5b60018516156148bd5780820291505b80810290506148cb8561487b565b9450614892565b94509492505050565b6000826148eb57600190506149a7565b816148f957600090506149a7565b816001811461490f576002811461491957614948565b60019150506149a7565b60ff84111561492b5761492a61484c565b5b8360020a9150848211156149425761494161484c565b5b506149a7565b5060208310610133831016604e8410600b841016171561497d5782820a9050838111156149785761497761484c565b5b6149a7565b61498a8484846001614888565b925090508184048111156149a1576149a061484c565b5b81810290505b9392505050565b60006149b9826141fb565b91506149c4836145cd565b92506149f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846148db565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a33826141fb565b9150614a3e836141fb565b925082614a4e57614a4d6149f9565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614ab5602d8361423a565b9150614ac082614a59565b604082019050919050565b60006020820190508181036000830152614ae481614aa8565b9050919050565b6000614af6826141fb565b9150614b01836141fb565b9250828202614b0f816141fb565b91508282048414831517614b2657614b2561484c565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b6000614b89602d8361423a565b9150614b9482614b2d565b604082019050919050565b60006020820190508181036000830152614bb881614b7c565b9050919050565b6000614bca826141fb565b9150614bd5836141fb565b9250828201905080821115614bed57614bec61484c565b5b92915050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614c4f60248361423a565b9150614c5a82614bf3565b604082019050919050565b60006020820190508181036000830152614c7e81614c42565b9050919050565b6000608082019050614c9a6000830187614205565b614ca76020830186614205565b614cb46040830185614205565b614cc16060830184614205565b95945050505050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b6000614d2660328361423a565b9150614d3182614cca565b604082019050919050565b60006020820190508181036000830152614d5581614d19565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b6000614db860248361423a565b9150614dc382614d5c565b604082019050919050565b60006020820190508181036000830152614de781614dab565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b6000614e2460178361423a565b9150614e2f82614dee565b602082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000614e9060188361423a565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f2260258361423a565b9150614f2d82614ec6565b604082019050919050565b60006020820190508181036000830152614f5181614f15565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000614fb4603f8361423a565b9150614fbf82614f58565b604082019050919050565b60006020820190508181036000830152614fe381614fa7565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000615046603f8361423a565b915061505182614fea565b604082019050919050565b6000602082019050818103600083015261507581615039565b9050919050565b60006040820190506150916000830185614205565b61509e6020830184614205565b9392505050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b600061510160288361423a565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000615193602b8361423a565b915061519e82615137565b604082019050919050565b600060208201905081810360008301526151c281615186565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000615225602a8361423a565b9150615230826151c9565b604082019050919050565b6000602082019050818103600083015261525481615218565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006152b760228361423a565b91506152c28261525b565b604082019050919050565b600060208201905081810360008301526152e6816152aa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061534960268361423a565b9150615354826152ed565b604082019050919050565b600060208201905081810360008301526153788161533c565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b60006153db60378361423a565b91506153e68261537f565b604082019050919050565b6000602082019050818103600083015261540a816153ce565b9050919050565b60008151905061542081614344565b92915050565b60006020828403121561543c5761543b6142e1565b5b600061544a84828501615411565b91505092915050565b60006040820190506154686000830185614604565b6154756020830184614205565b9392505050565b60008151905061548b8161450d565b92915050565b6000602082840312156154a7576154a66142e1565b5b60006154b58482850161547c565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061551a60248361423a565b9150615525826154be565b604082019050919050565b600060208201905081810360008301526155498161550d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155ac60228361423a565b91506155b782615550565b604082019050919050565b600060208201905081810360008301526155db8161559f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061563e60258361423a565b9150615649826155e2565b604082019050919050565b6000602082019050818103600083015261566d81615631565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156d060238361423a565b91506156db82615674565b604082019050919050565b600060208201905081810360008301526156ff816156c3565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b600061573c60188361423a565b915061574782615706565b602082019050919050565b6000602082019050818103600083015261576b8161572f565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b60006157ce603b8361423a565b91506157d982615772565b604082019050919050565b600060208201905081810360008301526157fd816157c1565b9050919050565b600061580f826141fb565b915061581a836141fb565b92508282039050818111156158325761583161484c565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b600061589460308361423a565b915061589f82615838565b604082019050919050565b600060208201905081810360008301526158c381615887565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000615900601d8361423a565b915061590b826158ca565b602082019050919050565b6000602082019050818103600083015261592f816158f3565b9050919050565b600081905092915050565b50565b6000615951600083615936565b915061595c82615941565b600082019050919050565b600061597282615944565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159d860268361423a565b91506159e38261597c565b604082019050919050565b60006020820190508181036000830152615a07816159cb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a7b81614318565b92915050565b600060208284031215615a9757615a966142e1565b5b6000615aa584828501615a6c565b91505092915050565b6000819050919050565b6000615ad3615ace615ac984615aae565b6143e6565b6141fb565b9050919050565b615ae381615ab8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b1e81614306565b82525050565b6000615b308383615b15565b60208301905092915050565b6000602082019050919050565b6000615b5482615ae9565b615b5e8185615af4565b9350615b6983615b05565b8060005b83811015615b9a578151615b818882615b24565b9750615b8c83615b3c565b925050600181019050615b6d565b5085935050505092915050565b600060a082019050615bbc6000830188614205565b615bc96020830187615ada565b8181036040830152615bdb8186615b49565b9050615bea6060830185614604565b615bf76080830184614205565b9695505050505050565b600060c082019050615c166000830189614604565b615c236020830188614205565b615c306040830187615ada565b615c3d6060830186615ada565b615c4a6080830185614604565b615c5760a0830184614205565b979650505050505050565b600080600060608486031215615c7b57615c7a6142e1565b5b6000615c8986828701615411565b9350506020615c9a86828701615411565b9250506040615cab86828701615411565b9150509250925092565b6000606082019050615cca6000830186614205565b615cd76020830185614205565b615ce46040830184614205565b94935050505056fea2646970667358221220921239b1adb2a111f99ed59a55ffa9083f756b6df5cbae9688397a3c813077a664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063715018a611610175578063aa4bde28116100dc578063d2fcc00111610095578063e01af92c1161006f578063e01af92c14610ad5578063e2f4560514610afe578063f2fde38b14610b29578063f9d0831a14610b52576102b9565b8063d2fcc00114610a44578063dc4c7dbc14610a6d578063dd62ed3e14610a98576102b9565b8063aa4bde281461094a578063afa4f3b214610975578063b6f7f6811461099e578063bb85c6d1146109c7578063c0246668146109f0578063c04a541414610a19576102b9565b80638c41180e1161012e5780638c41180e146108145780638da5cb5b1461083d57806395d89b4114610868578063a457c2d714610893578063a8a69b9d146108d0578063a9059cbb1461090d576102b9565b8063715018a61461073c57806375f0a87414610753578063790ca4131461077e5780637b3c83b1146107a9578063880bcbc1146107d45780638a8c523c146107fd576102b9565b80632d88cc08116102195780634fbee193116101d25780634fbee1931461061857806356a6cabf1461065557806359136fa51461067e5780635fc2e596146106a95780636ddd1713146106d457806370a08231146106ff576102b9565b80632d88cc08146104f4578063313ce5671461051d57806339509351146105485780633bbac5791461058557806349bd5a5e146105c25780634ada218b146105ed576102b9565b806321a9d82a1161026b57806321a9d82a146103e457806323b872dd1461040f57806327a14fc21461044c5780632a6c7dba146104755780632ba86bf21461049e5780632ce86fbf146104c9576102b9565b80630105d0fd146102be57806306fdde03146102e9578063095ea7b3146103145780631694505e1461035157806318160ddd1461037c57806318d9ceae146103a7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7b565b6040516102e09190614214565b60405180910390f35b3480156102f557600080fd5b506102fe610b81565b60405161030b91906142bf565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190614370565b610c13565b60405161034891906143cb565b60405180910390f35b34801561035d57600080fd5b50610366610c31565b6040516103739190614445565b60405180910390f35b34801561038857600080fd5b50610391610c57565b60405161039e9190614214565b60405180910390f35b3480156103b357600080fd5b506103ce60048036038101906103c99190614460565b610c61565b6040516103db91906143cb565b60405180910390f35b3480156103f057600080fd5b506103f9610cb7565b60405161040691906143cb565b60405180910390f35b34801561041b57600080fd5b506104366004803603810190610431919061448d565b610cca565b60405161044391906143cb565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906144e0565b610de9565b005b34801561048157600080fd5b5061049c60048036038101906104979190614539565b610f55565b005b3480156104aa57600080fd5b506104b36110a4565b6040516104c091906143cb565b60405180910390f35b3480156104d557600080fd5b506104de6110b7565b6040516104eb9190614214565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190614566565b6110bd565b005b34801561052957600080fd5b5061053261123b565b60405161053f91906145e9565b60405180910390f35b34801561055457600080fd5b5061056f600480360381019061056a9190614370565b611244565b60405161057c91906143cb565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190614460565b6112f0565b6040516105b991906143cb565b60405180910390f35b3480156105ce57600080fd5b506105d7611310565b6040516105e49190614613565b60405180910390f35b3480156105f957600080fd5b50610602611336565b60405161060f91906143cb565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190614460565b611349565b60405161064c91906143cb565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614539565b61139f565b005b34801561068a57600080fd5b506106936114ee565b6040516106a09190614214565b60405180910390f35b3480156106b557600080fd5b506106be6114f4565b6040516106cb9190614214565b60405180910390f35b3480156106e057600080fd5b506106e96114fa565b6040516106f691906143cb565b60405180910390f35b34801561070b57600080fd5b5061072660048036038101906107219190614460565b61150d565b6040516107339190614214565b60405180910390f35b34801561074857600080fd5b50610751611555565b005b34801561075f57600080fd5b506107686116ad565b6040516107759190614613565b60405180910390f35b34801561078a57600080fd5b506107936116d3565b6040516107a09190614214565b60405180910390f35b3480156107b557600080fd5b506107be6116d9565b6040516107cb9190614214565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061462e565b6116df565b005b34801561080957600080fd5b5061081261191f565b005b34801561082057600080fd5b5061083b6004803603810190610836919061462e565b611a45565b005b34801561084957600080fd5b50610852611b37565b60405161085f9190614613565b60405180910390f35b34801561087457600080fd5b5061087d611b61565b60405161088a91906142bf565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190614370565b611bf3565b6040516108c791906143cb565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190614460565b611cde565b60405161090491906143cb565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190614370565b611d34565b60405161094191906143cb565b60405180910390f35b34801561095657600080fd5b5061095f611d52565b60405161096c9190614214565b60405180910390f35b34801561098157600080fd5b5061099c600480360381019061099791906144e0565b611d58565b005b3480156109aa57600080fd5b506109c560048036038101906109c0919061466e565b611e89565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190614460565b61205e565b005b3480156109fc57600080fd5b50610a176004803603810190610a12919061462e565b612291565b005b348015610a2557600080fd5b50610a2e612463565b604051610a3b9190614613565b60405180910390f35b348015610a5057600080fd5b50610a6b6004803603810190610a66919061462e565b612489565b005b348015610a7957600080fd5b50610a8261265b565b604051610a8f9190614214565b60405180910390f35b348015610aa457600080fd5b50610abf6004803603810190610aba91906146ae565b612661565b604051610acc9190614214565b60405180910390f35b348015610ae157600080fd5b50610afc6004803603810190610af79190614539565b6126e8565b005b348015610b0a57600080fd5b50610b136127f1565b604051610b209190614214565b60405180910390f35b348015610b3557600080fd5b50610b506004803603810190610b4b9190614460565b6127f7565b005b348015610b5e57600080fd5b50610b796004803603810190610b749190614460565b6129bd565b005b601b5481565b606060038054610b909061471d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc9061471d565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c20612c2d565b8484612c35565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601760009054906101000a900460ff1681565b600080600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d16612c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610dd25782811015610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db4906147c0565b60405180910390fd5b610dd185610dc9612c2d565b858403612c35565b5b610ddd858585612dfe565b60019150509392505050565b610df1612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e779061482c565b60405180910390fd5b6064610e8a61123b565b600a610e9691906149ae565b610e9e610c57565b610ea89190614a28565b610eb29190614a28565b811015610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90614acb565b60405180910390fd5b610efc61123b565b600a610f0891906149ae565b81610f139190614aeb565b6018819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb5942601854604051610f4a9190614214565b60405180910390a150565b610f5d612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe39061482c565b60405180910390fd5b601760009054906101000a900460ff16151581151503611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890614b9f565b60405180910390fd5b80601760006101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1601760009054906101000a900460ff1660405161109991906143cb565b60405180910390a150565b601a60009054906101000a900460ff1681565b600b5481565b6110c5612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114b9061482c565b60405180910390fd5b83600a8190555082600b8190555081600c8190555080600d81905550600c54600a546111809190614bbf565b600e81905550600d54600b546111969190614bbf565b600f81905550614650600f54600e546111af9190614bbf565b11156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790614c65565b60405180910390fd5b7f829b8b9e6e2d0b0ebceef83298f970c163f4d0d4689fa3a6856d8efb98272eed600a54600b54600c54600d5460405161122d9493929190614c85565b60405180910390a150505050565b60006012905090565b60006112e6611251612c2d565b84846001600061125f612c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112e19190614bbf565b612c35565b6001905092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113a7612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d9061482c565b60405180910390fd5b601a60009054906101000a900460ff1615158115150361148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614d3c565b60405180910390fd5b80601a60006101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf601a60009054906101000a900460ff166040516114e391906143cb565b60405180910390a150565b601c5481565b600c5481565b601360019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61155d612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e39061482c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b600a5481565b6116e7612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d9061482c565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90614dce565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90614e3a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c108260405161191391906143cb565b60405180910390a25050565b611927612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad9061482c565b60405180910390fd5b601560009054906101000a900460ff1615611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90614ea6565b60405180910390fd5b6001601560006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff02191690831515021790555042601481905550565b611a4d612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad39061482c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b709061471d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9c9061471d565b8015611be95780601f10611bbe57610100808354040283529160200191611be9565b820191906000526020600020905b815481529060010190602001808311611bcc57829003601f168201915b5050505050905090565b60008060016000611c02612c2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690614f38565b60405180910390fd5b611cd3611cca612c2d565b85858403612c35565b600191505092915050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611d48611d41612c2d565b8484612dfe565b6001905092915050565b60185481565b611d60612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de69061482c565b60405180910390fd5b620f4240611dfb610c57565b611e059190614a28565b8111611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90614fca565b60405180910390fd5b806012819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145601254604051611e7e9190614214565b60405180910390a150565b611e91612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f179061482c565b60405180910390fd5b6103e8611f2b61123b565b600a611f3791906149ae565b611f3f610c57565b611f499190614a28565b611f539190614a28565b8210158015611f9457506103e8611f6861123b565b600a611f7491906149ae565b611f7c610c57565b611f869190614a28565b611f909190614a28565b8110155b611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061505c565b60405180910390fd5b611fdb61123b565b600a611fe791906149ae565b82611ff29190614aeb565b601b8190555061200061123b565b600a61200c91906149ae565b816120179190614aeb565b601c819055507f8c8cbc911b80df94332ececb8eb0945274d76fa965600a0f01f42af3f8afb131601b54601c5460405161205292919061507c565b60405180910390a15050565b612066612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ec9061482c565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90615117565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb906151a9565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516122869190614613565b60405180910390a150565b612299612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f9061482c565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036123ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b19061523b565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161245791906143cb565b60405180910390a25050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612491612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125179061482c565b60405180910390fd5b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614dce565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c8260405161264f91906143cb565b60405180910390a25050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126f0612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127769061482c565b60405180910390fd5b801515601360019054906101000a900460ff161515036127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb906152cd565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b60125481565b6127ff612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461288e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128859061482c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f49061535f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6129c5612c2d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b9061482c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906153f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b2557612b1f473373ffffffffffffffffffffffffffffffffffffffff1661385b90919063ffffffff16565b50612c2a565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b659190614613565b602060405180830381865afa158015612b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba69190615426565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612be3929190615453565b6020604051808303816000875af1158015612c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c269190615491565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9b90615530565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0a906155c2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612df19190614214565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6490615654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed3906156e6565b60405180910390fd5b601560009054906101000a900460ff1680612f405750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f945750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca90615752565b60405180910390fd5b60008103612fec57612fe783836000613916565b613856565b601a60009054906101000a900460ff161561324257600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806130aa5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156131005750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131565750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324157600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131fa57601b548111156131f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ec906157e4565b60405180910390fd5b613240565b601c5481111561323f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613236906157e4565b60405180910390fd5b5b5b5b600061324d3061150d565b9050600060125482101590508080156132735750601360009054906101000a900460ff16155b80156132cc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156132e757506000600f54600e546132e59190614bbf565b115b80156132ff5750601360019054906101000a900460ff165b15613451576001601360006101000a81548160ff0219169083151502179055506000600f54600e546133319190614bbf565b90506000600b54600a546133459190614bbf565b90506000600d54600c546133599190614bbf565b905060008211156133b357600083600a54876133759190614aeb565b61337f9190614a28565b9050600084600b54886133929190614aeb565b61339c9190614a28565b90506133a782613b95565b6133b081613ecf565b50505b600081111561343257600060646050876133cd9190614aeb565b6133d79190614a28565b905060006064600a886133ea9190614aeb565b6133f49190614a28565b905060006064600a896134079190614aeb565b6134119190614a28565b905061341c83613f3f565b61342582613ecf565b61342e81613b95565b5050505b6000601360006101000a81548160ff0219169083151502179055505050505b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134f45750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061350b5750601360009054906101000a900460ff165b1561351957600090506135de565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361357857600e5490506135dd565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036135d757600f5490506135dc565b600090505b5b5b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136365761271090505b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561368e5761271090505b60008111156136cf57600061271082866136a89190614aeb565b6136b29190614a28565b905080856136c09190615804565b94506136cd873083613916565b505b601760009054906101000a900460ff161561384757601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137885750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137e25750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156138465760006137f28661150d565b905060185485826138039190614bbf565b1115613844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383b906158aa565b60405180910390fd5b505b5b613852868686613916565b5050505b505050565b6000814710156138a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389790615916565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff16836040516138c690615967565b60006040518083038185875af1925050503d8060008114613903576040519150601f19603f3d011682016040523d82523d6000602084013e613908565b606091505b505090508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397c90615654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036139f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139eb906156e6565b60405180910390fd5b6139ff8383836141f1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7c906159ee565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b189190614bbf565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b7c9190614214565b60405180910390a3613b8f8484846141f6565b50505050565b6000600282613ba49190614a28565b905060008183613bb49190615804565b905060004790506000600267ffffffffffffffff811115613bd857613bd7615a0e565b5b604051908082528060200260200182016040528015613c065781602001602082028036833780820191505090505b5090503081600081518110613c1e57613c1d615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce99190615a81565b81600181518110613cfd57613cfc615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401613d9b959493929190615ba7565b600060405180830381600087803b158015613db557600080fd5b505af1158015613dc9573d6000803e3d6000fd5b5050505060008247613ddb9190615804565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308760008061dead426040518863ffffffff1660e01b8152600401613e4696959493929190615c01565b60606040518083038185885af1158015613e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e899190615c62565b5050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858286604051613ebf93929190615cb5565b60405180910390a1505050505050565b600061dead90508073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f339190614214565b60405180910390a35050565b60004790506000600267ffffffffffffffff811115613f6157613f60615a0e565b5b604051908082528060200260200182016040528015613f8f5781602001602082028036833780820191505090505b5090503081600081518110613fa757613fa6615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561404e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140729190615a81565b8160018151811061408657614085615a3d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401614124959493929190615ba7565b600060405180830381600087803b15801561413e57600080fd5b505af1158015614152573d6000803e3d6000fd5b50505050600082476141649190615804565b90506141b181601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661385b90919063ffffffff16565b507f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e6299984826040516141e392919061507c565b60405180910390a150505050565b505050565b505050565b6000819050919050565b61420e816141fb565b82525050565b60006020820190506142296000830184614205565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561426957808201518184015260208101905061424e565b60008484015250505050565b6000601f19601f8301169050919050565b60006142918261422f565b61429b818561423a565b93506142ab81856020860161424b565b6142b481614275565b840191505092915050565b600060208201905081810360008301526142d98184614286565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614311826142e6565b9050919050565b61432181614306565b811461432c57600080fd5b50565b60008135905061433e81614318565b92915050565b61434d816141fb565b811461435857600080fd5b50565b60008135905061436a81614344565b92915050565b60008060408385031215614387576143866142e1565b5b60006143958582860161432f565b92505060206143a68582860161435b565b9150509250929050565b60008115159050919050565b6143c5816143b0565b82525050565b60006020820190506143e060008301846143bc565b92915050565b6000819050919050565b600061440b614406614401846142e6565b6143e6565b6142e6565b9050919050565b600061441d826143f0565b9050919050565b600061442f82614412565b9050919050565b61443f81614424565b82525050565b600060208201905061445a6000830184614436565b92915050565b600060208284031215614476576144756142e1565b5b60006144848482850161432f565b91505092915050565b6000806000606084860312156144a6576144a56142e1565b5b60006144b48682870161432f565b93505060206144c58682870161432f565b92505060406144d68682870161435b565b9150509250925092565b6000602082840312156144f6576144f56142e1565b5b60006145048482850161435b565b91505092915050565b614516816143b0565b811461452157600080fd5b50565b6000813590506145338161450d565b92915050565b60006020828403121561454f5761454e6142e1565b5b600061455d84828501614524565b91505092915050565b600080600080608085870312156145805761457f6142e1565b5b600061458e8782880161435b565b945050602061459f8782880161435b565b93505060406145b08782880161435b565b92505060606145c18782880161435b565b91505092959194509250565b600060ff82169050919050565b6145e3816145cd565b82525050565b60006020820190506145fe60008301846145da565b92915050565b61460d81614306565b82525050565b60006020820190506146286000830184614604565b92915050565b60008060408385031215614645576146446142e1565b5b60006146538582860161432f565b925050602061466485828601614524565b9150509250929050565b60008060408385031215614685576146846142e1565b5b60006146938582860161435b565b92505060206146a48582860161435b565b9150509250929050565b600080604083850312156146c5576146c46142e1565b5b60006146d38582860161432f565b92505060206146e48582860161432f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061473557607f821691505b602082108103614748576147476146ee565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006147aa60288361423a565b91506147b58261474e565b604082019050919050565b600060208201905081810360008301526147d98161479d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061481660208361423a565b9150614821826147e0565b602082019050919050565b6000602082019050818103600083015261484581614809565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156148d2578086048111156148ae576148ad61484c565b5b60018516156148bd5780820291505b80810290506148cb8561487b565b9450614892565b94509492505050565b6000826148eb57600190506149a7565b816148f957600090506149a7565b816001811461490f576002811461491957614948565b60019150506149a7565b60ff84111561492b5761492a61484c565b5b8360020a9150848211156149425761494161484c565b5b506149a7565b5060208310610133831016604e8410600b841016171561497d5782820a9050838111156149785761497761484c565b5b6149a7565b61498a8484846001614888565b925090508184048111156149a1576149a061484c565b5b81810290505b9392505050565b60006149b9826141fb565b91506149c4836145cd565b92506149f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846148db565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a33826141fb565b9150614a3e836141fb565b925082614a4e57614a4d6149f9565b5b828204905092915050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f742062652060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614ab5602d8361423a565b9150614ac082614a59565b604082019050919050565b60006020820190508181036000830152614ae481614aa8565b9050919050565b6000614af6826141fb565b9150614b01836141fb565b9250828202614b0f816141fb565b91508282048414831517614b2657614b2561484c565b5b5092915050565b7f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060008201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b6000614b89602d8361423a565b9150614b9482614b2d565b604082019050919050565b60006020820190508181036000830152614bb881614b7c565b9050919050565b6000614bca826141fb565b9150614bd5836141fb565b9250828201905080821115614bed57614bec61484c565b5b92915050565b7f546f74616c20466565732063616e6e6f742065786365656420746865206d617860008201527f696d756d00000000000000000000000000000000000000000000000000000000602082015250565b6000614c4f60248361423a565b9150614c5a82614bf3565b604082019050919050565b60006020820190508181036000830152614c7e81614c42565b9050919050565b6000608082019050614c9a6000830187614205565b614ca76020830186614205565b614cb46040830185614205565b614cc16060830184614205565b95945050505050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c726561647960008201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b6000614d2660328361423a565b9150614d3182614cca565b604082019050919050565b60006020820190508181036000830152614d5581614d19565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686174207360008201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b6000614db860248361423a565b9150614dc382614d5c565b604082019050919050565b60006020820190508181036000830152614de781614dab565b9050919050565b7f43616e277420736574207468697320616464726573732e000000000000000000600082015250565b6000614e2460178361423a565b9150614e2f82614dee565b602082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f54726164696e6720616c726561647920656e61626c65642e0000000000000000600082015250565b6000614e9060188361423a565b9150614e9b82614e5a565b602082019050919050565b60006020820190508181036000830152614ebf81614e83565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f2260258361423a565b9150614f2d82614ec6565b604082019050919050565b60006020820190508181036000830152614f5181614f15565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460008201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b6000614fb4603f8361423a565b9150614fbf82614f58565b604082019050919050565b60006020820190508181036000830152614fe381614fa7565b9050919050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f742062652060008201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b6000615046603f8361423a565b915061505182614fea565b604082019050919050565b6000602082019050818103600083015261507581615039565b9050919050565b60006040820190506150916000830185614205565b61509e6020830184614205565b9392505050565b7f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b600061510160288361423a565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000615193602b8361423a565b915061519e82615137565b604082019050919050565b600060208201905081810360008301526151c281615186565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000615225602a8361423a565b9150615230826151c9565b604082019050919050565b6000602082019050818103600083015261525481615218565b9050919050565b7f73776170456e61626c656420616c72656164792061742074686973207374617460008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006152b760228361423a565b91506152c28261525b565b604082019050919050565b600060208201905081810360008301526152e6816152aa565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061534960268361423a565b9150615354826152ed565b604082019050919050565b600060208201905081810360008301526153788161533c565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d20636f6e7472616374277320626160008201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b60006153db60378361423a565b91506153e68261537f565b604082019050919050565b6000602082019050818103600083015261540a816153ce565b9050919050565b60008151905061542081614344565b92915050565b60006020828403121561543c5761543b6142e1565b5b600061544a84828501615411565b91505092915050565b60006040820190506154686000830185614604565b6154756020830184614205565b9392505050565b60008151905061548b8161450d565b92915050565b6000602082840312156154a7576154a66142e1565b5b60006154b58482850161547c565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061551a60248361423a565b9150615525826154be565b604082019050919050565b600060208201905081810360008301526155498161550d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155ac60228361423a565b91506155b782615550565b604082019050919050565b600060208201905081810360008301526155db8161559f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061563e60258361423a565b9150615649826155e2565b604082019050919050565b6000602082019050818103600083015261566d81615631565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006156d060238361423a565b91506156db82615674565b604082019050919050565b600060208201905081810360008301526156ff816156c3565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b600061573c60188361423a565b915061574782615706565b602082019050919050565b6000602082019050818103600083015261576b8161572f565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b60006157ce603b8361423a565b91506157d982615772565b604082019050919050565b600060208201905081810360008301526157fd816157c1565b9050919050565b600061580f826141fb565b915061581a836141fb565b92508282039050818111156158325761583161484c565b5b92915050565b7f4d617857616c6c65743a20526563697069656e7420657863656564732074686560008201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b600061589460308361423a565b915061589f82615838565b604082019050919050565b600060208201905081810360008301526158c381615887565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000615900601d8361423a565b915061590b826158ca565b602082019050919050565b6000602082019050818103600083015261592f816158f3565b9050919050565b600081905092915050565b50565b6000615951600083615936565b915061595c82615941565b600082019050919050565b600061597282615944565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159d860268361423a565b91506159e38261597c565b604082019050919050565b60006020820190508181036000830152615a07816159cb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a7b81614318565b92915050565b600060208284031215615a9757615a966142e1565b5b6000615aa584828501615a6c565b91505092915050565b6000819050919050565b6000615ad3615ace615ac984615aae565b6143e6565b6141fb565b9050919050565b615ae381615ab8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b1e81614306565b82525050565b6000615b308383615b15565b60208301905092915050565b6000602082019050919050565b6000615b5482615ae9565b615b5e8185615af4565b9350615b6983615b05565b8060005b83811015615b9a578151615b818882615b24565b9750615b8c83615b3c565b925050600181019050615b6d565b5085935050505092915050565b600060a082019050615bbc6000830188614205565b615bc96020830187615ada565b8181036040830152615bdb8186615b49565b9050615bea6060830185614604565b615bf76080830184614205565b9695505050505050565b600060c082019050615c166000830189614604565b615c236020830188614205565b615c306040830187615ada565b615c3d6060830186615ada565b615c4a6080830185614604565b615c5760a0830184614205565b979650505050505050565b600080600060608486031215615c7b57615c7a6142e1565b5b6000615c8986828701615411565b9350506020615c9a86828701615411565b9250506040615cab86828701615411565b9150509250925092565b6000606082019050615cca6000830186614205565b615cd76020830185614205565b615ce46040830184614205565b94935050505056fea2646970667358221220921239b1adb2a111f99ed59a55ffa9083f756b6df5cbae9688397a3c813077a664736f6c63430008110033

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.