ETH Price: $2,360.77 (+0.87%)

Token

BuckshotRoulette (BSHOT)
 

Overview

Max Total Supply

10,000,000 BSHOT

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.00000000000389973 BSHOT

Value
$0.00
0x2b43cAf9B5abe03C92dC398b4317C886fe9E86fD
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BSHOT

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : bshot.sol
/**

//telegram: https://t.me/BShot
//Twitter: https://twitter.com/Bshot_Roulette
//Website: https://BshotRoulette.com

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.21;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
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 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 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 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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    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) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    function _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);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 {}
    
}
 
library SafeMath {

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

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

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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
       
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


 
contract BSHOT is ERC20, Ownable {

    string _name = unicode"BuckshotRoulette";
    string _symbol = unicode"BSHOT";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    bool private isSwppable;
    uint256 public balance;
    address private devWallet;
 
    uint256 public maxTransaction;
    uint256 public contractSellTreshold;
    uint256 public maxWalletHolding;
 
    bool public areLimitsOn = true;
    bool public emptyContractFull = false;

    uint256 public totalBuyTax;
    uint256 public devBuyTax;
    uint256 public liqBuyTax;
 
    uint256 public totalSellTax;
    uint256 public devSellTax;
    uint256 public liqSellTax;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
   
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
       
 
        uint256 _devBuyTax = 4;
        uint256 _liqBuyTax = 1;
 
        uint256 _devSellTax = 4;
        uint256 _liqSellTax = 1;
        
        uint256 totalSupply = 10000000 * 1e18;
 
        maxTransaction = totalSupply * 20 / 1000; // 2%
        maxWalletHolding = totalSupply * 20 / 1000; // 2% 
        contractSellTreshold = totalSupply * 1 / 1000; // 0.05%
 
        devBuyTax = _devBuyTax;
        liqBuyTax = _liqBuyTax;
        totalBuyTax = devBuyTax + liqBuyTax;
 
        devSellTax = _devSellTax;
        liqSellTax = _liqSellTax;
        totalSellTax = devSellTax + liqSellTax;
        devWallet = address(msg.sender);
       
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(devWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

       
        _mint(address(this), totalSupply * 95 / 100);
        _mint(address(this), totalSupply * 5 / 100);
        
        
    }
 
    receive() external payable {
 
    }
 

    function goLive() external onlyOwner{



        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 92 / 100;
        

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

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


    

    function removeStuckETH() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        require(ethBalance > 0, "ETH balance must be greater than 0");
        (bool success,) = address(devWallet).call{value: ethBalance}("");
        require(success, "Failed to clear ETH balance");
    }

    function removeStuckTokenBalance() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Token balance must be greater than 0");
        _transfer(address(this), devWallet, tokenBalance);
    }

    function vanishLimits() external onlyOwner {
        areLimitsOn = false;
    }
 
    function EnableEmptyContract(bool enabled) external onlyOwner{
        emptyContractFull = enabled;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

  
    function editTax(
        uint256 _devBuy,
        uint256 _devSell,
        uint256 _liqBuy,
        uint256 _liqSell
    ) external onlyOwner {
        devBuyTax = _devBuy;
        liqBuyTax = _liqBuy;
        totalBuyTax = devBuyTax + liqBuyTax;
        devSellTax = _devSell;
        liqSellTax = _liqSell;
        totalSellTax = devSellTax + liqSellTax;
        require(totalBuyTax <= 99, "MAX 99% tax allowed");
        require(totalSellTax <= 99, "MAX 99% tax allowed");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateDevWallet(address newDevWallet) external onlyOwner{
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    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");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(areLimitsOn){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwppable
            ){
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletHolding, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= contractSellTreshold;
 
        if( 
            canSwap &&
            !isSwppable &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwppable = true;
 
            swapBack();
 
            isSwppable = false;
        }
 
        bool takeFee = !isSwppable;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
                tokensForLiquidity += fees * liqSellTax / totalSellTax;
                tokensForDev += fees * devSellTax / totalSellTax;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
                fees = amount.mul(totalBuyTax).div(100);
                tokensForLiquidity += fees * liqBuyTax / totalBuyTax;
                tokensForDev += fees * devBuyTax / totalBuyTax;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(emptyContractFull == false){
            if(contractBalance > contractSellTreshold * 20){
                contractBalance = contractSellTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(devWallet).call{value: address(this).balance}("");
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"EnableEmptyContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"}],"name":"editTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emptyContractFull","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vanishLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280601081526020017f4275636b73686f74526f756c6574746500000000000000000000000000000000815250600690816200004a919062000c20565b506040518060400160405280600581526020017f4253484f540000000000000000000000000000000000000000000000000000008152506007908162000091919062000c20565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff021916908315150217905550348015620000d2575f80fd5b5060068054620000e29062000a20565b80601f0160208091040260200160405190810160405280929190818152602001828054620001109062000a20565b80156200015f5780601f1062000135576101008083540402835291602001916200015f565b820191905f5260205f20905b8154815290600101906020018083116200014157829003601f168201915b505050505060078054620001739062000a20565b80601f0160208091040260200160405190810160405280929190818152602001828054620001a19062000a20565b8015620001f05780601f10620001c657610100808354040283529160200191620001f0565b820191905f5260205f20905b815481529060010190602001808311620001d257829003601f168201915b5050505050816003908162000206919062000c20565b50806004908162000218919062000c20565b5050505f6200022c6200054760201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f600490505f600190505f600490505f600190505f6a084595161401484a00000090506103e8601482620002fe919062000d31565b6200030a919062000da8565b600c819055506103e860148262000322919062000d31565b6200032e919062000da8565b600e819055506103e860018262000346919062000d31565b62000352919062000da8565b600d81905550846011819055508360128190555060125460115462000378919062000ddf565b60108190555082601481905550816015819055506015546014546200039e919062000ddf565b60138190555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000406620003f86200054e60201b60201c565b60016200057660201b60201c565b620004193060016200057660201b60201c565b6200042e61dead60016200057660201b60201c565b62000462600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200057660201b60201c565b62000484620004766200054e60201b60201c565b6001620006bf60201b60201c565b62000497306001620006bf60201b60201c565b620004ac61dead6001620006bf60201b60201c565b620004e0600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006bf60201b60201c565b6200050e306064605f84620004f6919062000d31565b62000502919062000da8565b620007b860201b60201c565b6200053c30606460058462000524919062000d31565b62000530919062000da8565b620007b860201b60201c565b505050505062000fd6565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005866200054760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000617576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060e9062000e77565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006b3919062000eb3565b60405180910390a25050565b620006cf6200054760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000760576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007579062000e77565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008209062000f1c565b60405180910390fd5b6200083c5f83836200095560201b60201c565b62000853816002546200095a60201b90919060201c565b600281905550620008aa815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546200095a60201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000949919062000f4d565b60405180910390a35050565b505050565b5f8082846200096a919062000ddf565b905083811015620009b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a99062000fb6565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000a3857607f821691505b60208210810362000a4e5762000a4d620009f3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ab27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a75565b62000abe868362000a75565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000b0862000b0262000afc8462000ad6565b62000adf565b62000ad6565b9050919050565b5f819050919050565b62000b238362000ae8565b62000b3b62000b328262000b0f565b84845462000a81565b825550505050565b5f90565b62000b5162000b43565b62000b5e81848462000b18565b505050565b5b8181101562000b855762000b795f8262000b47565b60018101905062000b64565b5050565b601f82111562000bd45762000b9e8162000a54565b62000ba98462000a66565b8101602085101562000bb9578190505b62000bd162000bc88562000a66565b83018262000b63565b50505b505050565b5f82821c905092915050565b5f62000bf65f198460080262000bd9565b1980831691505092915050565b5f62000c10838362000be5565b9150826002028217905092915050565b62000c2b82620009bc565b67ffffffffffffffff81111562000c475762000c46620009c6565b5b62000c53825462000a20565b62000c6082828562000b89565b5f60209050601f83116001811462000c96575f841562000c81578287015190505b62000c8d858262000c03565b86555062000cfc565b601f19841662000ca68662000a54565b5f5b8281101562000ccf5784890151825560018201915060208501945060208101905062000ca8565b8683101562000cef578489015162000ceb601f89168262000be5565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d3d8262000ad6565b915062000d4a8362000ad6565b925082820262000d5a8162000ad6565b9150828204841483151762000d745762000d7362000d04565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000db48262000ad6565b915062000dc18362000ad6565b92508262000dd45762000dd362000d7b565b5b828204905092915050565b5f62000deb8262000ad6565b915062000df88362000ad6565b925082820190508082111562000e135762000e1262000d04565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000e5f60208362000e19565b915062000e6c8262000e29565b602082019050919050565b5f6020820190508181035f83015262000e908162000e51565b9050919050565b5f8115159050919050565b62000ead8162000e97565b82525050565b5f60208201905062000ec85f83018462000ea2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000f04601f8362000e19565b915062000f118262000ece565b602082019050919050565b5f6020820190508181035f83015262000f358162000ef6565b9050919050565b62000f478162000ad6565b82525050565b5f60208201905062000f625f83018462000f3c565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62000f9e601b8362000e19565b915062000fab8262000f68565b602082019050919050565b5f6020820190508181035f83015262000fcf8162000f90565b9050919050565b6147688062000fe45f395ff3fe60806040526004361061025f575f3560e01c806370a0823111610143578063a9059cbb116100b5578063c3f70b5211610079578063c3f70b52146108c4578063dd62ed3e146108ee578063df6f93be1461092a578063e11d22cf14610954578063f1cd531a1461096a578063f2fde38b1461099257610266565b8063a9059cbb146107d0578063b62496f51461080c578063b69ef8a814610848578063be85750414610872578063c02466681461089c57610266565b8063945674fe11610107578063945674fe146106d857806395d89b41146107025780639a7a23d61461072c5780639ee2e924146107545780639fccce321461076a578063a457c2d71461079457610266565b806370a082311461060c578063715018a6146106485780637571336a1461065e578063863cf2cc146106865780638da5cb5b146106ae57610266565b806322eb6631116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b806322eb66311461041c57806323b872dd146104465780632c28f57914610482578063313ce5671461049857806339509351146104c257610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613692565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613743565b610a4a565b6040516102c7919061379b565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061379b565b60405180910390f35b348015610305575f80fd5b5061030e610a79565b005b34801561031b575f80fd5b50610336600480360381019061033191906137b4565b610c22565b604051610343919061379b565b60405180910390f35b348015610357575f80fd5b50610360610c3f565b60405161036d919061383a565b60405180910390f35b348015610381575f80fd5b5061038a610c64565b6040516103979190613862565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c191906137b4565b610c6d565b005b3480156103d3575f80fd5b506103dc610dc1565b6040516103e99190613862565b60405180910390f35b3480156103fd575f80fd5b50610406610dc7565b6040516104139190613862565b60405180910390f35b348015610427575f80fd5b50610430610dcd565b60405161043d9190613862565b60405180910390f35b348015610451575f80fd5b5061046c6004803603810190610467919061387b565b610dd3565b604051610479919061379b565b60405180910390f35b34801561048d575f80fd5b50610496610ea7565b005b3480156104a3575f80fd5b506104ac6112ad565b6040516104b991906138e6565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e39190613743565b6112b5565b6040516104f5919061379b565b60405180910390f35b348015610509575f80fd5b50610512611363565b60405161051f9190613862565b60405180910390f35b348015610533575f80fd5b5061053c611369565b6040516105499190613862565b60405180910390f35b34801561055d575f80fd5b5061056661136f565b604051610573919061390e565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d91906137b4565b611394565b6040516105af919061379b565b60405180910390f35b3480156105c3575f80fd5b506105cc6113e6565b6040516105d99190613862565b60405180910390f35b3480156105ed575f80fd5b506105f66113ec565b6040516106039190613862565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d91906137b4565b6113f2565b60405161063f9190613862565b60405180910390f35b348015610653575f80fd5b5061065c611437565b005b348015610669575f80fd5b50610684600480360381019061067f9190613951565b61158a565b005b348015610691575f80fd5b506106ac60048036038101906106a7919061398f565b611678565b005b3480156106b9575f80fd5b506106c261172b565b6040516106cf919061390e565b60405180910390f35b3480156106e3575f80fd5b506106ec611753565b6040516106f9919061379b565b60405180910390f35b34801561070d575f80fd5b50610716611766565b6040516107239190613692565b60405180910390f35b348015610737575f80fd5b50610752600480360381019061074d9190613951565b6117f6565b005b34801561075f575f80fd5b50610768611929565b005b348015610775575f80fd5b5061077e611a3c565b60405161078b9190613862565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b59190613743565b611a42565b6040516107c7919061379b565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f19190613743565b611b0a565b604051610803919061379b565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d91906137b4565b611b27565b60405161083f919061379b565b60405180910390f35b348015610853575f80fd5b5061085c611b44565b6040516108699190613862565b60405180910390f35b34801561087d575f80fd5b50610886611b4a565b6040516108939190613862565b60405180910390f35b3480156108a7575f80fd5b506108c260048036038101906108bd9190613951565b611b50565b005b3480156108cf575f80fd5b506108d8611c8c565b6040516108e59190613862565b60405180910390f35b3480156108f9575f80fd5b50610914600480360381019061090f91906139ba565b611c92565b6040516109219190613862565b60405180910390f35b348015610935575f80fd5b5061093e611d14565b60405161094b9190613862565b60405180910390f35b34801561095f575f80fd5b50610968611d1a565b005b348015610975575f80fd5b50610990600480360381019061098b91906139f8565b611dcb565b005b34801561099d575f80fd5b506109b860048036038101906109b391906137b4565b611f3b565b005b6060600380546109c990613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613a89565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a5661208f565b8484612096565b6001905092915050565b600f5f9054906101000a900460ff1681565b610a8161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690613b03565b60405180910390fd5b5f4790505f8111610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90613b91565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b9b90613bdc565b5f6040518083038185875af1925050503d805f8114610bd5576040519150601f19603f3d011682016040523d82523d5f602084013e610bda565b606091505b5050905080610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613c3a565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610c7561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613b03565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610ddf848484612259565b610e9c84610deb61208f565b610e97856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e4e61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b600190509392505050565b610eaf61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3490613b03565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610f6081600161158a565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100d9190613c6c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110969190613c6c565b6040518363ffffffff1660e01b81526004016110b3929190613c97565b6020604051808303815f875af11580156110cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f39190613c6c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061115e60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161158a565b61118a60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612be0565b5f4790505f6064605c61119c306113f2565b6111a69190613ceb565b6111b09190613d59565b90506111de3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161126496959493929190613dc2565b60606040518083038185885af1158015611280573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112a59190613e35565b505050505050565b5f6012905090565b5f6113596112c161208f565b846113548560015f6112d161208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b612096565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61143f61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490613b03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61159261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613b03565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61168061208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613b03565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461177590613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546117a190613a89565b80156117ec5780601f106117c3576101008083540402835291602001916117ec565b820191905f5260205f20905b8154815290600101906020018083116117cf57829003601f168201915b5050505050905090565b6117fe61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613b03565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613ef5565b60405180910390fd5b6119258282612be0565b5050565b61193161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690613b03565b60405180910390fd5b5f6119c9306113f2565b90505f8111611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613f83565b60405180910390fd5b611a3930600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612259565b50565b60175481565b5f611b00611a4e61208f565b84611afb8560405180606001604052806025815260200161470e6025913960015f611a7761208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b6001905092915050565b5f611b1d611b1661208f565b8484612259565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611b5861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613b03565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c80919061379b565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611d2261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790613b03565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611dd361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890613b03565b60405180910390fd5b8360118190555081601281905550601254601154611e7f9190613fa1565b6010819055508260148190555080601581905550601554601454611ea39190613fa1565b60138190555060636010541115611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee69061401e565b60405180910390fd5b60636013541115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c9061401e565b60405180910390fd5b50505050565b611f4361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613b03565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c9190613862565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614256565b60405180910390fd5b5f810361234c5761234783835f612cdb565b612b79565b600f5f9054906101000a900460ff16156127415761236861172b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123d657506123a661172b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561240e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612448575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600960149054906101000a900460ff16155b1561274057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125035750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125aa57600c5481111561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906142e4565b60405180910390fd5b600e54612559836113f2565b826125649190613fa1565b11156125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061434c565b60405180910390fd5b61273f565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126475750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561269657600c54811115612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906143da565b60405180910390fd5b61273e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661273d57600e546126f0836113f2565b826126fb9190613fa1565b111561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127339061434c565b60405180910390fd5b5b5b5b5b5b5f61274b306113f2565b90505f600d5482101590508080156127705750600960149054906101000a900460ff16155b80156127c35750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612816575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612869575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ac576001600960146101000a81548160ff021916908315150217905550612891612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061295b575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612964575f90505b5f8115612b6957601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c257505f601354115b15612a5a576129ef60646129e16013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612a029190613ceb565b612a0c9190613d59565b60165f828254612a1c9190613fa1565b9250508190555060135460145482612a349190613ceb565b612a3e9190613d59565b60175f828254612a4e9190613fa1565b92505081905550612b46565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ab157505f601054115b15612b4557612ade6064612ad06010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612af19190613ceb565b612afb9190613d59565b60165f828254612b0b9190613fa1565b9250508190555060105460115482612b239190613ceb565b612b2d9190613d59565b60175f828254612b3d9190613fa1565b925050819055505b5b5f811115612b5a57612b59873083612cdb565b5b8085612b6691906143f8565b94505b612b74878787612cdb565b505050505b505050565b5f838311158290612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc9190613692565b60405180910390fd5b505f8385612bd391906143f8565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612c8c9190613fa1565b905083811015612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614475565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613862565b60405180910390a3505050565b5f612f6e306113f2565b90505f601754601654612f819190613fa1565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe5576014600d54612fc79190613ceb565b831115612fe0576014600d54612fdd9190613ceb565b92505b612ff1565b612fee306113f2565b92505b5f600283601654866130039190613ceb565b61300d9190613d59565b6130179190613d59565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613bdc565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613ceb565b90508284826131b69190613d59565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7e565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613c6c565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613dc2565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613e35565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e49190613692565b60405180910390fd5b505f83856135fb9190613d59565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561363f578082015181840152602081019050613624565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61366482613608565b61366e8185613612565b935061367e818560208601613622565b6136878161364a565b840191505092915050565b5f6020820190508181035f8301526136aa818461365a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136df826136b6565b9050919050565b6136ef816136d5565b81146136f9575f80fd5b50565b5f8135905061370a816136e6565b92915050565b5f819050919050565b61372281613710565b811461372c575f80fd5b50565b5f8135905061373d81613719565b92915050565b5f8060408385031215613759576137586136b2565b5b5f613766858286016136fc565b92505060206137778582860161372f565b9150509250929050565b5f8115159050919050565b61379581613781565b82525050565b5f6020820190506137ae5f83018461378c565b92915050565b5f602082840312156137c9576137c86136b2565b5b5f6137d6848285016136fc565b91505092915050565b5f819050919050565b5f6138026137fd6137f8846136b6565b6137df565b6136b6565b9050919050565b5f613813826137e8565b9050919050565b5f61382482613809565b9050919050565b6138348161381a565b82525050565b5f60208201905061384d5f83018461382b565b92915050565b61385c81613710565b82525050565b5f6020820190506138755f830184613853565b92915050565b5f805f60608486031215613892576138916136b2565b5b5f61389f868287016136fc565b93505060206138b0868287016136fc565b92505060406138c18682870161372f565b9150509250925092565b5f60ff82169050919050565b6138e0816138cb565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b613908816136d5565b82525050565b5f6020820190506139215f8301846138ff565b92915050565b61393081613781565b811461393a575f80fd5b50565b5f8135905061394b81613927565b92915050565b5f8060408385031215613967576139666136b2565b5b5f613974858286016136fc565b92505060206139858582860161393d565b9150509250929050565b5f602082840312156139a4576139a36136b2565b5b5f6139b18482850161393d565b91505092915050565b5f80604083850312156139d0576139cf6136b2565b5b5f6139dd858286016136fc565b92505060206139ee858286016136fc565b9150509250929050565b5f805f8060808587031215613a1057613a0f6136b2565b5b5f613a1d8782880161372f565b9450506020613a2e8782880161372f565b9350506040613a3f8782880161372f565b9250506060613a508782880161372f565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613aa057607f821691505b602082108103613ab357613ab2613a5c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aed602083613612565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b7b602283613612565b9150613b8682613b21565b604082019050919050565b5f6020820190508181035f830152613ba881613b6f565b9050919050565b5f81905092915050565b50565b5f613bc75f83613baf565b9150613bd282613bb9565b5f82019050919050565b5f613be682613bbc565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c24601b83613612565b9150613c2f82613bf0565b602082019050919050565b5f6020820190508181035f830152613c5181613c18565b9050919050565b5f81519050613c66816136e6565b92915050565b5f60208284031215613c8157613c806136b2565b5b5f613c8e84828501613c58565b91505092915050565b5f604082019050613caa5f8301856138ff565b613cb760208301846138ff565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cf582613710565b9150613d0083613710565b9250828202613d0e81613710565b91508282048414831517613d2557613d24613cbe565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d6382613710565b9150613d6e83613710565b925082613d7e57613d7d613d2c565b5b828204905092915050565b5f819050919050565b5f613dac613da7613da284613d89565b6137df565b613710565b9050919050565b613dbc81613d92565b82525050565b5f60c082019050613dd55f8301896138ff565b613de26020830188613853565b613def6040830187613db3565b613dfc6060830186613db3565b613e0960808301856138ff565b613e1660a0830184613853565b979650505050505050565b5f81519050613e2f81613719565b92915050565b5f805f60608486031215613e4c57613e4b6136b2565b5b5f613e5986828701613e21565b9350506020613e6a86828701613e21565b9250506040613e7b86828701613e21565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613edf603983613612565b9150613eea82613e85565b604082019050919050565b5f6020820190508181035f830152613f0c81613ed3565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f6d602483613612565b9150613f7882613f13565b604082019050919050565b5f6020820190508181035f830152613f9a81613f61565b9050919050565b5f613fab82613710565b9150613fb683613710565b9250828201905080821115613fce57613fcd613cbe565b5b92915050565b7f4d4158203939252074617820616c6c6f776564000000000000000000000000005f82015250565b5f614008601383613612565b915061401382613fd4565b602082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614096602483613612565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614124602283613612565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b2602583613612565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614240602383613612565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce603583613612565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614336601383613612565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c4603683613612565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f61440282613710565b915061440d83613710565b925082820390508181111561442557614424613cbe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b83613612565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f830186613853565b6144b36020830185613853565b6144c06040830184613853565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614522602183613612565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e2816136d5565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f830188613853565b6146876020830187613db3565b8181036040830152614699818661460b565b90506146a860608301856138ff565b6146b56080830184613853565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204752e9419eaf93c5badc722288ca4b0b3ba6b251797479a13dde09ded883c83164736f6c63430008150033

Deployed Bytecode

0x60806040526004361061025f575f3560e01c806370a0823111610143578063a9059cbb116100b5578063c3f70b5211610079578063c3f70b52146108c4578063dd62ed3e146108ee578063df6f93be1461092a578063e11d22cf14610954578063f1cd531a1461096a578063f2fde38b1461099257610266565b8063a9059cbb146107d0578063b62496f51461080c578063b69ef8a814610848578063be85750414610872578063c02466681461089c57610266565b8063945674fe11610107578063945674fe146106d857806395d89b41146107025780639a7a23d61461072c5780639ee2e924146107545780639fccce321461076a578063a457c2d71461079457610266565b806370a082311461060c578063715018a6146106485780637571336a1461065e578063863cf2cc146106865780638da5cb5b146106ae57610266565b806322eb6631116101dc57806346469afb116101a057806346469afb146104fe57806348d791551461052857806349bd5a5e146105525780634fbee1931461057c5780635de0f2a0146105b85780636c7e15c9146105e257610266565b806322eb66311461041c57806323b872dd146104465780632c28f57914610482578063313ce5671461049857806339509351146104c257610266565b80631694505e116102235780631694505e1461034c57806318160ddd146103765780631816467f146103a05780631a8145bb146103c85780631bff7898146103f257610266565b806306fdde031461026a578063095ea7b3146102945780630e947809146102d05780630f299cf1146102fa57806310d5de531461031057610266565b3661026657005b5f80fd5b348015610275575f80fd5b5061027e6109ba565b60405161028b9190613692565b60405180910390f35b34801561029f575f80fd5b506102ba60048036038101906102b59190613743565b610a4a565b6040516102c7919061379b565b60405180910390f35b3480156102db575f80fd5b506102e4610a67565b6040516102f1919061379b565b60405180910390f35b348015610305575f80fd5b5061030e610a79565b005b34801561031b575f80fd5b50610336600480360381019061033191906137b4565b610c22565b604051610343919061379b565b60405180910390f35b348015610357575f80fd5b50610360610c3f565b60405161036d919061383a565b60405180910390f35b348015610381575f80fd5b5061038a610c64565b6040516103979190613862565b60405180910390f35b3480156103ab575f80fd5b506103c660048036038101906103c191906137b4565b610c6d565b005b3480156103d3575f80fd5b506103dc610dc1565b6040516103e99190613862565b60405180910390f35b3480156103fd575f80fd5b50610406610dc7565b6040516104139190613862565b60405180910390f35b348015610427575f80fd5b50610430610dcd565b60405161043d9190613862565b60405180910390f35b348015610451575f80fd5b5061046c6004803603810190610467919061387b565b610dd3565b604051610479919061379b565b60405180910390f35b34801561048d575f80fd5b50610496610ea7565b005b3480156104a3575f80fd5b506104ac6112ad565b6040516104b991906138e6565b60405180910390f35b3480156104cd575f80fd5b506104e860048036038101906104e39190613743565b6112b5565b6040516104f5919061379b565b60405180910390f35b348015610509575f80fd5b50610512611363565b60405161051f9190613862565b60405180910390f35b348015610533575f80fd5b5061053c611369565b6040516105499190613862565b60405180910390f35b34801561055d575f80fd5b5061056661136f565b604051610573919061390e565b60405180910390f35b348015610587575f80fd5b506105a2600480360381019061059d91906137b4565b611394565b6040516105af919061379b565b60405180910390f35b3480156105c3575f80fd5b506105cc6113e6565b6040516105d99190613862565b60405180910390f35b3480156105ed575f80fd5b506105f66113ec565b6040516106039190613862565b60405180910390f35b348015610617575f80fd5b50610632600480360381019061062d91906137b4565b6113f2565b60405161063f9190613862565b60405180910390f35b348015610653575f80fd5b5061065c611437565b005b348015610669575f80fd5b50610684600480360381019061067f9190613951565b61158a565b005b348015610691575f80fd5b506106ac60048036038101906106a7919061398f565b611678565b005b3480156106b9575f80fd5b506106c261172b565b6040516106cf919061390e565b60405180910390f35b3480156106e3575f80fd5b506106ec611753565b6040516106f9919061379b565b60405180910390f35b34801561070d575f80fd5b50610716611766565b6040516107239190613692565b60405180910390f35b348015610737575f80fd5b50610752600480360381019061074d9190613951565b6117f6565b005b34801561075f575f80fd5b50610768611929565b005b348015610775575f80fd5b5061077e611a3c565b60405161078b9190613862565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b59190613743565b611a42565b6040516107c7919061379b565b60405180910390f35b3480156107db575f80fd5b506107f660048036038101906107f19190613743565b611b0a565b604051610803919061379b565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d91906137b4565b611b27565b60405161083f919061379b565b60405180910390f35b348015610853575f80fd5b5061085c611b44565b6040516108699190613862565b60405180910390f35b34801561087d575f80fd5b50610886611b4a565b6040516108939190613862565b60405180910390f35b3480156108a7575f80fd5b506108c260048036038101906108bd9190613951565b611b50565b005b3480156108cf575f80fd5b506108d8611c8c565b6040516108e59190613862565b60405180910390f35b3480156108f9575f80fd5b50610914600480360381019061090f91906139ba565b611c92565b6040516109219190613862565b60405180910390f35b348015610935575f80fd5b5061093e611d14565b60405161094b9190613862565b60405180910390f35b34801561095f575f80fd5b50610968611d1a565b005b348015610975575f80fd5b50610990600480360381019061098b91906139f8565b611dcb565b005b34801561099d575f80fd5b506109b860048036038101906109b391906137b4565b611f3b565b005b6060600380546109c990613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546109f590613a89565b8015610a405780601f10610a1757610100808354040283529160200191610a40565b820191905f5260205f20905b815481529060010190602001808311610a2357829003601f168201915b5050505050905090565b5f610a5d610a5661208f565b8484612096565b6001905092915050565b600f5f9054906101000a900460ff1681565b610a8161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690613b03565b60405180910390fd5b5f4790505f8111610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c90613b91565b60405180910390fd5b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610b9b90613bdc565b5f6040518083038185875af1925050503d805f8114610bd5576040519150601f19603f3d011682016040523d82523d5f602084013e610bda565b606091505b5050905080610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1590613c3a565b60405180910390fd5b5050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b610c7561208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90613b03565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60135481565b60145481565b5f610ddf848484612259565b610e9c84610deb61208f565b610e97856040518060600160405280602881526020016146e66028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e4e61208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b600190509392505050565b610eaf61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3490613b03565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050610f6081600161158a565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100d9190613c6c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110969190613c6c565b6040518363ffffffff1660e01b81526004016110b3929190613c97565b6020604051808303815f875af11580156110cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f39190613c6c565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061115e60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161158a565b61118a60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612be0565b5f4790505f6064605c61119c306113f2565b6111a69190613ceb565b6111b09190613d59565b90506111de3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161126496959493929190613dc2565b60606040518083038185885af1158015611280573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112a59190613e35565b505050505050565b5f6012905090565b5f6113596112c161208f565b846113548560015f6112d161208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b612096565b6001905092915050565b60105481565b600e5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61143f61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490613b03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61159261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161790613b03565b60405180910390fd5b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61168061208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590613b03565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60019054906101000a900460ff1681565b60606004805461177590613a89565b80601f01602080910402602001604051908101604052809291908181526020018280546117a190613a89565b80156117ec5780601f106117c3576101008083540402835291602001916117ec565b820191905f5260205f20905b8154815290600101906020018083116117cf57829003601f168201915b5050505050905090565b6117fe61208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188390613b03565b60405180910390fd5b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613ef5565b60405180910390fd5b6119258282612be0565b5050565b61193161208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690613b03565b60405180910390fd5b5f6119c9306113f2565b90505f8111611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490613f83565b60405180910390fd5b611a3930600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612259565b50565b60175481565b5f611b00611a4e61208f565b84611afb8560405180606001604052806025815260200161470e6025913960015f611a7761208f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b612096565b6001905092915050565b5f611b1d611b1661208f565b8484612259565b6001905092915050565b601b602052805f5260405f205f915054906101000a900460ff1681565b600a5481565b60155481565b611b5861208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613b03565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c80919061379b565b60405180910390a25050565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60125481565b611d2261208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790613b03565b60405180910390fd5b5f600f5f6101000a81548160ff021916908315150217905550565b611dd361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890613b03565b60405180910390fd5b8360118190555081601281905550601254601154611e7f9190613fa1565b6010819055508260148190555080601581905550601554601454611ea39190613fa1565b60138190555060636010541115611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee69061401e565b60405180910390fd5b60636013541115611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c9061401e565b60405180910390fd5b50505050565b611f4361208f565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc890613b03565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb906140ac565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121699061413a565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224c9190613862565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614256565b60405180910390fd5b5f810361234c5761234783835f612cdb565b612b79565b600f5f9054906101000a900460ff16156127415761236861172b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123d657506123a661172b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561240e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612448575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124615750600960149054906101000a900460ff16155b1561274057601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125035750601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125aa57600c5481111561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906142e4565b60405180910390fd5b600e54612559836113f2565b826125649190613fa1565b11156125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061434c565b60405180910390fd5b61273f565b601b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156126475750601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561269657600c54811115612691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612688906143da565b60405180910390fd5b61273e565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661273d57600e546126f0836113f2565b826126fb9190613fa1565b111561273c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127339061434c565b60405180910390fd5b5b5b5b5b5b5f61274b306113f2565b90505f600d5482101590508080156127705750600960149054906101000a900460ff16155b80156127c35750601b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612816575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612869575060195f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128ac576001600960146101000a81548160ff021916908315150217905550612891612f64565b5f600960146101000a81548160ff0219169083151502179055505b5f600960149054906101000a900460ff1615905060195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061295b575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612964575f90505b5f8115612b6957601b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129c257505f601354115b15612a5a576129ef60646129e16013548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060135460155482612a029190613ceb565b612a0c9190613d59565b60165f828254612a1c9190613fa1565b9250508190555060135460145482612a349190613ceb565b612a3e9190613d59565b60175f828254612a4e9190613fa1565b92505081905550612b46565b601b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ab157505f601054115b15612b4557612ade6064612ad06010548861318a90919063ffffffff16565b61320190919063ffffffff16565b905060105460125482612af19190613ceb565b612afb9190613d59565b60165f828254612b0b9190613fa1565b9250508190555060105460115482612b239190613ceb565b612b2d9190613d59565b60175f828254612b3d9190613fa1565b925050819055505b5b5f811115612b5a57612b59873083612cdb565b5b8085612b6691906143f8565b94505b612b74878787612cdb565b505050505b505050565b5f838311158290612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc9190613692565b60405180910390fd5b505f8385612bd391906143f8565b9050809150509392505050565b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f808284612c8c9190613fa1565b905083811015612cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc890614475565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d40906141c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90614256565b60405180910390fd5b612dc283838361324a565b612e2b816040518060600160405280602681526020016146c0602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b7e9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612eba815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612c7e90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f579190613862565b60405180910390a3505050565b5f612f6e306113f2565b90505f601754601654612f819190613fa1565b90505f80831480612f9157505f82145b15612f9e57505050613188565b5f1515600f60019054906101000a900460ff16151503612fe5576014600d54612fc79190613ceb565b831115612fe0576014600d54612fdd9190613ceb565b92505b612ff1565b612fee306113f2565b92505b5f600283601654866130039190613ceb565b61300d9190613d59565b6130179190613d59565b90505f61302d828661324f90919063ffffffff16565b90505f47905061303c82613298565b5f613050824761324f90919063ffffffff16565b90505f61307a8761306c6017548561318a90919063ffffffff16565b61320190919063ffffffff16565b90505f818361308991906143f8565b90505f6016819055505f6017819055505f861180156130a757505f81115b156130f4576130b686826134ce565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516130eb93929190614493565b60405180910390a15b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161313990613bdc565b5f6040518083038185875af1925050503d805f8114613173576040519150601f19603f3d011682016040523d82523d5f602084013e613178565b606091505b5050809750505050505050505050505b565b5f80830361319a575f90506131fb565b5f82846131a79190613ceb565b90508284826131b69190613d59565b146131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90614538565b60405180910390fd5b809150505b92915050565b5f61324283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135a7565b905092915050565b505050565b5f61329083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7e565b905092915050565b5f600267ffffffffffffffff8111156132b4576132b3614556565b5b6040519080825280602002602001820160405280156132e25781602001602082028036833780820191505090505b50905030815f815181106132f9576132f8614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c19190613c6c565b816001815181106133d5576133d4614583565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061343b3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161349d959493929190614667565b5f604051808303815f87803b1580156134b4575f80fd5b505af11580156134c6573d5f803e3d5ffd5b505050505050565b6134fa3060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612096565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b815260040161355f96959493929190613dc2565b60606040518083038185885af115801561357b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135a09190613e35565b5050505050565b5f80831182906135ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e49190613692565b60405180910390fd5b505f83856135fb9190613d59565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561363f578082015181840152602081019050613624565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61366482613608565b61366e8185613612565b935061367e818560208601613622565b6136878161364a565b840191505092915050565b5f6020820190508181035f8301526136aa818461365a565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136df826136b6565b9050919050565b6136ef816136d5565b81146136f9575f80fd5b50565b5f8135905061370a816136e6565b92915050565b5f819050919050565b61372281613710565b811461372c575f80fd5b50565b5f8135905061373d81613719565b92915050565b5f8060408385031215613759576137586136b2565b5b5f613766858286016136fc565b92505060206137778582860161372f565b9150509250929050565b5f8115159050919050565b61379581613781565b82525050565b5f6020820190506137ae5f83018461378c565b92915050565b5f602082840312156137c9576137c86136b2565b5b5f6137d6848285016136fc565b91505092915050565b5f819050919050565b5f6138026137fd6137f8846136b6565b6137df565b6136b6565b9050919050565b5f613813826137e8565b9050919050565b5f61382482613809565b9050919050565b6138348161381a565b82525050565b5f60208201905061384d5f83018461382b565b92915050565b61385c81613710565b82525050565b5f6020820190506138755f830184613853565b92915050565b5f805f60608486031215613892576138916136b2565b5b5f61389f868287016136fc565b93505060206138b0868287016136fc565b92505060406138c18682870161372f565b9150509250925092565b5f60ff82169050919050565b6138e0816138cb565b82525050565b5f6020820190506138f95f8301846138d7565b92915050565b613908816136d5565b82525050565b5f6020820190506139215f8301846138ff565b92915050565b61393081613781565b811461393a575f80fd5b50565b5f8135905061394b81613927565b92915050565b5f8060408385031215613967576139666136b2565b5b5f613974858286016136fc565b92505060206139858582860161393d565b9150509250929050565b5f602082840312156139a4576139a36136b2565b5b5f6139b18482850161393d565b91505092915050565b5f80604083850312156139d0576139cf6136b2565b5b5f6139dd858286016136fc565b92505060206139ee858286016136fc565b9150509250929050565b5f805f8060808587031215613a1057613a0f6136b2565b5b5f613a1d8782880161372f565b9450506020613a2e8782880161372f565b9350506040613a3f8782880161372f565b9250506060613a508782880161372f565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613aa057607f821691505b602082108103613ab357613ab2613a5c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613aed602083613612565b9150613af882613ab9565b602082019050919050565b5f6020820190508181035f830152613b1a81613ae1565b9050919050565b7f4554482062616c616e6365206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b7b602283613612565b9150613b8682613b21565b604082019050919050565b5f6020820190508181035f830152613ba881613b6f565b9050919050565b5f81905092915050565b50565b5f613bc75f83613baf565b9150613bd282613bb9565b5f82019050919050565b5f613be682613bbc565b9150819050919050565b7f4661696c656420746f20636c656172204554482062616c616e636500000000005f82015250565b5f613c24601b83613612565b9150613c2f82613bf0565b602082019050919050565b5f6020820190508181035f830152613c5181613c18565b9050919050565b5f81519050613c66816136e6565b92915050565b5f60208284031215613c8157613c806136b2565b5b5f613c8e84828501613c58565b91505092915050565b5f604082019050613caa5f8301856138ff565b613cb760208301846138ff565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cf582613710565b9150613d0083613710565b9250828202613d0e81613710565b91508282048414831517613d2557613d24613cbe565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613d6382613710565b9150613d6e83613710565b925082613d7e57613d7d613d2c565b5b828204905092915050565b5f819050919050565b5f613dac613da7613da284613d89565b6137df565b613710565b9050919050565b613dbc81613d92565b82525050565b5f60c082019050613dd55f8301896138ff565b613de26020830188613853565b613def6040830187613db3565b613dfc6060830186613db3565b613e0960808301856138ff565b613e1660a0830184613853565b979650505050505050565b5f81519050613e2f81613719565b92915050565b5f805f60608486031215613e4c57613e4b6136b2565b5b5f613e5986828701613e21565b9350506020613e6a86828701613e21565b9250506040613e7b86828701613e21565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613edf603983613612565b9150613eea82613e85565b604082019050919050565b5f6020820190508181035f830152613f0c81613ed3565b9050919050565b7f546f6b656e2062616c616e6365206d75737420626520677265617465722074685f8201527f616e203000000000000000000000000000000000000000000000000000000000602082015250565b5f613f6d602483613612565b9150613f7882613f13565b604082019050919050565b5f6020820190508181035f830152613f9a81613f61565b9050919050565b5f613fab82613710565b9150613fb683613710565b9250828201905080821115613fce57613fcd613cbe565b5b92915050565b7f4d4158203939252074617820616c6c6f776564000000000000000000000000005f82015250565b5f614008601383613612565b915061401382613fd4565b602082019050919050565b5f6020820190508181035f83015261403581613ffc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614096602483613612565b91506140a18261403c565b604082019050919050565b5f6020820190508181035f8301526140c38161408a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614124602283613612565b915061412f826140ca565b604082019050919050565b5f6020820190508181035f83015261415181614118565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6141b2602583613612565b91506141bd82614158565b604082019050919050565b5f6020820190508181035f8301526141df816141a6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614240602383613612565b915061424b826141e6565b604082019050919050565b5f6020820190508181035f83015261426d81614234565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6142ce603583613612565b91506142d982614274565b604082019050919050565b5f6020820190508181035f8301526142fb816142c2565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614336601383613612565b915061434182614302565b602082019050919050565b5f6020820190508181035f8301526143638161432a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6143c4603683613612565b91506143cf8261436a565b604082019050919050565b5f6020820190508181035f8301526143f1816143b8565b9050919050565b5f61440282613710565b915061440d83613710565b925082820390508181111561442557614424613cbe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61445f601b83613612565b915061446a8261442b565b602082019050919050565b5f6020820190508181035f83015261448c81614453565b9050919050565b5f6060820190506144a65f830186613853565b6144b36020830185613853565b6144c06040830184613853565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614522602183613612565b915061452d826144c8565b604082019050919050565b5f6020820190508181035f83015261454f81614516565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6145e2816136d5565b82525050565b5f6145f383836145d9565b60208301905092915050565b5f602082019050919050565b5f614615826145b0565b61461f81856145ba565b935061462a836145ca565b805f5b8381101561465a57815161464188826145e8565b975061464c836145ff565b92505060018101905061462d565b5085935050505092915050565b5f60a08201905061467a5f830188613853565b6146876020830187613db3565b8181036040830152614699818661460b565b90506146a860608301856138ff565b6146b56080830184613853565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204752e9419eaf93c5badc722288ca4b0b3ba6b251797479a13dde09ded883c83164736f6c63430008150033

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.