ETH Price: $3,386.63 (+4.69%)
Gas: 3 Gwei

Token

KingShit (KING)
 

Overview

Max Total Supply

21,000,000 KING

Holders

190

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
30,574.634735971432593142 KING

Value
$0.00
0xd8e2479f6c880172da844b34d18626b77b5e46d8
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:
King

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : King.sol
// SPDX-License-Identifier: MIT

/*

                               Æ
                             _╠▀█_
                              ▌▓▓█M             ,
                      _      ╓▐▓▓▓M_   _,_     ╒▌ ,.
                     _╠╕_╓╓; ╬╫▓▓▌▓▌  ▐0▓█▓,_µ@█▓▓▌
                     │╣█░╣▓▓▓▒▀▓▓▓▓█#▄▒▓▓█Ñ█▓▓███▀`
                      `╙█▓▀▓█╬▓▓▓██╬╩╫╬▓▓▓███████
                        ╟╣██╬╬▓╟▓▓╬▀██▓╟▓▓███████          ╓▄▄▄_
                      ╓▄▓▓▓█╟Ñ▒▓███░ÑÉ@╣█████████       ▄▓▀`  ,╟█▄
                    ,█" ,██▓▓▓▓╫╣▓▓▓▓▓▓▓▓▓▓▓▓██████▓▄ ┌█^'Å▓▓▓╬╬╬█▌
                    █─ ▓▓╩▓╬╬╬▓▓▓▓▓╫╫▓╬▓▓▓▓▓▓██████████M @▒╬╬▓█▓╬██
                    █▄╖▓▓█▓▓▓▓▓██▓╬╬╬╬╬▓▀╝╬╬╬████████▀╙╫╬╬╬╬▓█████▌
                    █▓▓▒,╠╟╬▓█╬╬╬╬╣█▓▓▓▓▓▓█▀▀███▀╚╣╬╬╣╬╬╬╬╬██████▀
                     █"▀██▌"█╬╬╬╬╬╬█  ████▌ _█▌,,╓φ╬╬╩"╨╬╬╫█████Ñ
      ╓▓▀▀▀▌_  _  ,▓▀█▄▄██▌╗▓╬╬╣▓▓╬╝╠▓╬╬╬╬▓█╬╬╬╬╣╬╬╬φφφφ▓▓██████
     ▓▌     █▀"╙╙██   ╙▓╣██████████φφφ╬╬╬╬╬╬╬╬▓╬╣╬█╬╬╬╬╬█████╬██_  ▄▓▀▀▀▀█▄
     █          ╓▓▌▄▓▓╣╫╬╬╬███████▓╬╬▓╬╬▓╬▒╬▓╬▓█████╝╣╬▓█████████▓█▀     '█▌
   ▄▀╙         _█▓▒▓╬╬▓╬╬████▓███████▓██▓███▓█████╬@@▓▓█▀▀▀██▀            ▀█_
  █"          ▓▀  ╙█████████████████████████████▀ ╙╝╣█"    `▀         _▄▓▓▓/▀▌
 ▐█          █▓@@Æ▓▓▓██▓╬██╬╬╬▓▓╬╬╬╬╬╬█▀▀▀▀▀██▓φφφ@╣█¬               ▓▓▀` `╫▓█▌
 ▐█╖,,,╖╓╓▄▄▓██▓╬╬▓╫╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣█Ñ       ╙█╬▓█▀▀▀▀▓▄,        __▄▓╣▓▓▓▓▓▓╣█▌
  ▀█▓▓▓▓╬█▀     ▀█╬╬╬╬╬╬╬╬╬╬╬╬╝╙╣╬╬█▌         ╫█"       ▀█▓▓╬╬╣╣╬╬╬╬╣╬╬╬╬╣╬▓██
   └╙▀▀"█"       ╙▀▀` ╙█▓╬╬╬╬╬╬▓▓█▓▀⌐                ╓m∞ '''╙█████████████▀▀"
     ▓▀▀▀              ⁿ▀▀█▓╬╬╬█▀                  ¢▌"   ,▓▓▓╖╟█   ¬    ─¬
    █                 ╓▓╝W╖╟█▓██_  ╔▄   ╓╗▄___,,,,╣▓▄╗φφφ▓╬▌╗╣╬█L
   ╟▌                ▓▄,╓╓▄▓██████╬╬╣▓▓▓▓╣▓╣╣▓╣▓▓╣╣╣╣╣▓▓╬╬╬╬╬╬██
   ╙█▓▓▄φΦ▓╗φφφ@▓╬▓╣╣▓╣▓▓╣╬▓██    ▀█▓╬╬╬╣▓╬╣╣╣╬╬╬╬╬▓╣╣▓╬▓████▀"
     "╙"█╬▓▓╬▓▓╬╣▓▓╣▓▓▓╬██▀▀▌ `    '▀███████████▀███████▀" ¬
        ╙██████▀████████▀▄╬  ⁿ          ╓═▄Aª▄       ─-
          ───¬    ── ¬  ╫             ╓¬¼,,▄φ╢▌
                        ╚▓╣▓φ▓▓φ▓▓▓▓▓▓▓▓▓╬▓▓▓▀
                         ╙╙╚▀▓▓▓▀▀▓▀▀▀▓▓▓▀


$KING

*/

pragma solidity ^0.8.9;


interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

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 ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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


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

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

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

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

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


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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
    }

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

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


    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }


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

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


abstract contract Pausable is Context {

    event Paused(address account);

    event Unpaused(address account);

    bool private _paused;


    constructor() {
        _paused = false;
    }


    function paused() public view virtual returns (bool) {
        return _paused;
    }


    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }


    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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 King is ERC20, Ownable, Pausable {

    uint256 private initialSupply;
    uint256 private initialTeamSupply;
    uint256 private denominator = 100; // for percents
    uint256 private swapThreshold = 0.000005 ether;

    uint256 private devTaxBuy;
    uint256 private liquidityTaxBuy;

    uint256 private devTaxSell;
    uint256 private liquidityTaxSell;
    uint256 public maxWallet;

    mapping(address => bool) public blacklist; // make private
    mapping(address => bool) public excludeList; // make private

    mapping(string => uint256) public buyTaxes; // make private
    mapping(string => uint256) public sellTaxes; // make private
    mapping(string => address) public taxWallets; // make private

    uint256 public devTokens;
    uint256 public liquidityTokens;

    // delete these:
    uint256 public currentLiqEthValue;
    uint256 public currentToSell;
    uint256 public currentEthGained;
    uint256 public currentRemainingTokens;

    uint256 public currentBalanceOfTo;
    uint256 public currentAmount;
    uint256 public currentBalancePlusAmount;
    uint256 public currentMaxWallet;


    bool public taxStatus = true;
    bool public autoLiqStatus = true;

    IUniswapV2Router02 private uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    IUniswapV2Pair private uniswapV2Pair;

    constructor() ERC20("KingShit", "KING") payable
    {
        initialSupply = 21000000 * 10 ** decimals();
        // 21 million
        initialTeamSupply = initialSupply * 5 / 100;
        // 5% of total supply (1,050,000)
        maxWallet = initialSupply * 25 / 1000;
        // 2.5% of total supply (525,000)
        _setOwner(msg.sender);
        uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
        taxWallets["liquidity"] = address(0);
        setBuyTax(0, 4);
        setSellTax(0, 30);
        setTaxWallets(0xBE749Af426F7498F897D665C68dab540cc337044);
        // owner wallet excluded from tax and cap
        exclude(msg.sender);
        exclude(address(this));
        // dex tax wallet excluded from tax and cap
        exclude(0xBE749Af426F7498F897D665C68dab540cc337044);

        _mint(0xBE749Af426F7498F897D665C68dab540cc337044, initialTeamSupply);
        _mint(msg.sender, initialSupply - initialTeamSupply);
    }

    function handleTax(address from, address to, uint256 amount) private returns (uint256) {

        if (!isExcluded(from) && !isExcluded(to)) {
            uint256 tax;
            if (from == address(uniswapV2Pair)) {
                tax += amount * buyTaxes["dev"] / denominator;
                tax += amount * buyTaxes["liquidity"] / denominator;

                devTokens += amount * buyTaxes["dev"] / denominator;
                liquidityTokens += amount * buyTaxes["liquidity"] / denominator;

                if (tax > 0) {
                    _transfer(from, address(this), tax);
                    // moved tax to this contract
                }
            } else if (to == address(uniswapV2Pair)) {

                tax += amount * sellTaxes["dev"] / denominator;
                tax += amount * sellTaxes["liquidity"] / denominator;

                devTokens += amount * sellTaxes["dev"] / denominator;
                liquidityTokens += amount * sellTaxes["liquidity"] / denominator;

                if (tax > 0) {
                    _transfer(from, address(this), tax);
                }

                uint256 taxSum = devTokens + liquidityTokens;
                if (taxSum == 0) return amount;

                if(autoLiqStatus) _do_swap_and_liq_provide();

            }

            amount -= tax;

            currentBalanceOfTo = balanceOf(to);
            currentAmount = amount;
            currentBalancePlusAmount = currentBalanceOfTo + currentAmount;
            currentMaxWallet = maxWallet;

            if (to != address(uniswapV2Pair)) {
                require(balanceOf(to) + amount <= maxWallet, "maxWallet limit exceeded");
            }

        }

        return amount;
    }

    function _do_swap_and_liq_provide() public {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();

        uint256 ethValue = uniswapV2Router02.getAmountsOut(devTokens + liquidityTokens, sellPath)[1];
        // delete
        //currentLiqForEthValue = devTokens + liquidityTokens;
        currentLiqEthValue = ethValue;

        if (ethValue >= swapThreshold) {
            uint256 startBalance = address(this).balance;

            uint256 toSell = devTokens + liquidityTokens / 2;

            // delete
            currentToSell = toSell;

            _approve(address(this), address(uniswapV2Router02), toSell);

            uniswapV2Router02.swapExactTokensForETH(
                toSell,
                0,
                sellPath,
                address(this),
                block.timestamp
            );

            uint256 ethGained = address(this).balance - startBalance;

            // delete
            currentEthGained = ethGained;

            uint256 liquidityToken = liquidityTokens / 2;
            uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10 ** 18) / (devTokens + liquidityTokens))) / 10 ** 18;

            uint256 devETH = (ethGained * ((devTokens * 10 ** 18) / (devTokens + liquidityTokens))) / 10 ** 18;

            _approve(address(this), address(uniswapV2Router02), liquidityToken);

            uniswapV2Router02.addLiquidityETH{value : liquidityETH}(
                address(this),
                liquidityToken,
                0,
                0,
                taxWallets["liquidity"],
                block.timestamp
            );

            uint256 remainingTokens = (devTokens + liquidityTokens) - (toSell + liquidityToken);

            // delete
            currentRemainingTokens = remainingTokens;

            if (remainingTokens > 0) {
                _transfer(address(this), taxWallets["dev"], remainingTokens);
            }


            (bool success,) = taxWallets["dev"].call{value : devETH}("");
            require(success, "transfer to  dev wallet failed");

            if (ethGained - (devETH + liquidityETH) > 0) {
                (bool success1,) = taxWallets["dev"].call{value : ethGained - (devETH + liquidityETH)}("");
                require(success1, "transfer to  dev wallet failed");
            }

            devTokens = 0;
            liquidityTokens = 0;

        }

    }


    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {
        require(!paused(), "ERC20: token transfer while paused");
        require(!isBlacklisted(msg.sender), "ERC20: sender blacklisted");
        require(!isBlacklisted(recipient), "ERC20: recipient blacklisted");
        require(!isBlacklisted(tx.origin), "ERC20: sender blacklisted");

        if (taxStatus) {
            amount = handleTax(sender, recipient, amount);
        }

        super._transfer(sender, recipient, amount);
    }

    /**
     * @dev Triggers the tax handling functionality
     */
    function triggerTax() public onlyOwner {
        handleTax(address(0), address(uniswapV2Pair), 0);
    }

    /**
     * @dev Pauses transfers on the token.
     */
    function pause() public onlyOwner {
        require(!paused(), "ERC20: Contract is already paused");
        _pause();
    }

    /**
     * @dev Unpauses transfers on the token.
     */
    function unpause() public onlyOwner {
        require(paused(), "ERC20: Contract is not paused");
        _unpause();
    }

    /**
    * @dev set max wallet limit per address.
     */

    function setMaxWallet(uint256 amount) external onlyOwner {
        require(amount > 10000, "NO rug pull");
        maxWallet = amount * 10 ** 18;
    }

    /**
     * @dev Burns tokens from caller address.
     */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }

    /**
     * @dev Blacklists the specified account (Disables transfers to and from the account).
     */
    function enableBlacklist(address account) public onlyOwner {
        require(!blacklist[account], "ERC20: Account is already blacklisted");
        blacklist[account] = true;
    }

    /**
     * @dev Remove the specified account from the blacklist.
     */
    function disableBlacklist(address account) public onlyOwner {
        require(blacklist[account], "ERC20: Account is not blacklisted");
        blacklist[account] = false;
    }

    /**
     * @dev Excludes the specified account from tax.
     */
    function exclude(address account) public onlyOwner {
        require(!isExcluded(account), "ERC20: Account is already excluded");
        excludeList[account] = true;
    }

    /**
     * @dev Re-enables tax on the specified account.
     */
    function removeExclude(address account) public onlyOwner {
        require(isExcluded(account), "ERC20: Account is not excluded");
        excludeList[account] = false;
    }

    /**
     * @dev Sets tax for buys.
     */
    function setBuyTax(uint256 dev, uint256 liquidity) public onlyOwner {
        buyTaxes["dev"] = dev;
        buyTaxes["liquidity"] = liquidity;

    }

    /**
     * @dev Sets tax for sells.
     */
    function setSellTax(uint256 dev, uint256 liquidity) public onlyOwner {

        sellTaxes["dev"] = dev;
        sellTaxes["liquidity"] = liquidity;

    }

    /**
     * @dev Sets wallets for taxes.
     */
    function setTaxWallets(address dev) public onlyOwner {
        taxWallets["dev"] = dev;

    }

    function claimStuckTokens(address _token) external onlyOwner {

        if (_token == address(0x0)) {
            payable(owner()).transfer(address(this).balance);
            return;
        }
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }

    /**
     * @dev Enables tax globally.
     */
    function enableTax() public onlyOwner {
        require(!taxStatus, "ERC20: Tax is already enabled");
        taxStatus = true;
    }

    /**
     * @dev Disables tax globally.
     */
    function disableTax() public onlyOwner {
        require(taxStatus, "ERC20: Tax is already disabled");
        taxStatus = false;
    }

    /**
     * @dev Returns true if the account is blacklisted, and false otherwise.
     */
    function isBlacklisted(address account) public view returns (bool) {
        return blacklist[account];
    }

    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }

    /**
     * @dev Enables auto liquidity add.
     */
    function enableAutoLiq() public onlyOwner {
        autoLiqStatus = true;
    }

    /**
     * @dev Disables auto liquidity add.
     */
    function disableAutoLiq() public onlyOwner {
        autoLiqStatus = false;
    }

    receive() external payable {}
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_do_swap_and_liq_provide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiqStatus","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":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBalanceOfTo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentBalancePlusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentEthGained","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentLiqEthValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRemainingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentToSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAutoLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAutoLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dev","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"taxWallets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052606460085565048c273950006009556001601e60006101000a81548160ff0219169083151502179055506001601e60016101000a81548160ff0219169083151502179055506040518060400160405280600881526020017f4b696e67536869740000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b494e47000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cd92919062000c62565b508060049080519060200190620000e692919062000c62565b5050506000600560146101000a81548160ff02191690831515021790555062000114620005a960201b60201c565b600a62000122919062000eac565b6301406f4062000133919062000efd565b600681905550606460056006546200014c919062000efd565b62000158919062000f8d565b6007819055506103e8601960065462000172919062000efd565b6200017e919062000f8d565b600e819055506200019533620005b260201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d601e60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025357600080fd5b505afa15801562000268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028e91906200102f565b601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037657600080fd5b505afa1580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b191906200102f565b6040518363ffffffff1660e01b8152600401620003d092919062001072565b602060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042691906200102f565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060136040516200047890620010fa565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004d8600060046200067860201b60201c565b620004ec6000601e6200075160201b60201c565b6200051173be749af426f7498f897d665c68dab540cc3370446200082a60201b60201c565b62000522336200091960201b60201c565b62000533306200091960201b60201c565b6200055873be749af426f7498f897d665c68dab540cc3370446200091960201b60201c565b6200058073be749af426f7498f897d665c68dab540cc33704460075462000a5760201b60201c565b620005a33360075460065462000597919062001111565b62000a5760201b60201c565b62001430565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200068862000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ae62000bd860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000707576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fe90620011ad565b60405180910390fd5b81601160405162000718906200121f565b9081526020016040518091039020819055508060116040516200073b90620010fa565b9081526020016040518091039020819055505050565b6200076162000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200078762000bd860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d790620011ad565b60405180910390fd5b816012604051620007f1906200121f565b9081526020016040518091039020819055508060126040516200081490620010fa565b9081526020016040518091039020819055505050565b6200083a62000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200086062000bd860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b090620011ad565b60405180910390fd5b806013604051620008ca906200121f565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200092962000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200094f62000bd860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099f90620011ad565b60405180910390fd5b620009b98162000c0260201b60201c565b15620009fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f390620012ac565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac1906200131e565b60405180910390fd5b62000ade6000838362000c5860201b60201c565b806002600082825462000af2919062001340565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b49919062001340565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bb09190620013ae565b60405180910390a362000bcc6000838362000c5d60201b60201c565b5050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b505050565b505050565b82805462000c7090620013fa565b90600052602060002090601f01602090048101928262000c94576000855562000ce0565b82601f1062000caf57805160ff191683800117855562000ce0565b8280016001018555821562000ce0579182015b8281111562000cdf57825182559160200191906001019062000cc2565b5b50905062000cef919062000cf3565b5090565b5b8082111562000d0e57600081600090555060010162000cf4565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000da05780860481111562000d785762000d7762000d12565b5b600185161562000d885780820291505b808102905062000d988562000d41565b945062000d58565b94509492505050565b60008262000dbb576001905062000e8e565b8162000dcb576000905062000e8e565b816001811462000de4576002811462000def5762000e25565b600191505062000e8e565b60ff84111562000e045762000e0362000d12565b5b8360020a91508482111562000e1e5762000e1d62000d12565b5b5062000e8e565b5060208310610133831016604e8410600b841016171562000e5f5782820a90508381111562000e595762000e5862000d12565b5b62000e8e565b62000e6e848484600162000d4e565b9250905081840481111562000e885762000e8762000d12565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000eb98262000e95565b915062000ec68362000e9f565b925062000ef57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000da9565b905092915050565b600062000f0a8262000e95565b915062000f178362000e95565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f535762000f5262000d12565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f9a8262000e95565b915062000fa78362000e95565b92508262000fba5762000fb962000f5e565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ff78262000fca565b9050919050565b620010098162000fea565b81146200101557600080fd5b50565b600081519050620010298162000ffe565b92915050565b60006020828403121562001048576200104762000fc5565b5b6000620010588482850162001018565b91505092915050565b6200106c8162000fea565b82525050565b600060408201905062001089600083018562001061565b62001098602083018462001061565b9392505050565b600081905092915050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b6000620010e26009836200109f565b9150620010ef82620010aa565b600982019050919050565b60006200110782620010d3565b9150819050919050565b60006200111e8262000e95565b91506200112b8362000e95565b92508282101562001141576200114062000d12565b5b828203905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011956020836200114c565b9150620011a2826200115d565b602082019050919050565b60006020820190508181036000830152620011c88162001186565b9050919050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b6000620012076003836200109f565b91506200121482620011cf565b600382019050919050565b60006200122c82620011f8565b9150819050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000620012946022836200114c565b9150620012a18262001236565b604082019050919050565b60006020820190508181036000830152620012c78162001285565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001306601f836200114c565b91506200131382620012ce565b602082019050919050565b600060208201905081810360008301526200133981620012f7565b9050919050565b60006200134d8262000e95565b91506200135a8362000e95565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001392576200139162000d12565b5b828201905092915050565b620013a88162000e95565b82525050565b6000602082019050620013c560008301846200139d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200141357607f821691505b602082108114156200142a5762001429620013cb565b5b50919050565b6155b380620014406000396000f3fe60806040526004361061031e5760003560e01c8063715018a6116101ab578063ced695a4116100f7578063f2fde38b11610095578063f9d0831a1161006f578063f9d0831a14610b75578063f9f92be414610b9e578063fd46752a14610bdb578063fe575a8714610c0657610325565b8063f2fde38b14610af6578063f441b1c814610b1f578063f8b45b0514610b4a57610325565b8063dc2c5f8a116100d1578063dc2c5f8a14610a38578063dd62ed3e14610a63578063e1370dd314610aa0578063ebcec6a214610acb57610325565b8063ced695a4146109cf578063cfefd79e146109e6578063d01dc84b14610a0f57610325565b806395d89b4111610164578063a9059cbb1161013e578063a9059cbb146108ef578063ab47919a1461092c578063abe4f11d14610969578063cba0e9961461099257610325565b806395d89b41146108705780639692c4f91461089b578063a457c2d7146108b257610325565b8063715018a6146107c0578063717a8651146107d75780637898d9b9146108005780638456cb591461081757806387d881821461082e5780638da5cb5b1461084557610325565b8063395093511161026a57806353eb3bcf116102235780635cabe5df116101fd5780635cabe5df146107045780635d0044ca1461072f5780635d9833ec1461075857806370a082311461078357610325565b806353eb3bcf1461069757806355648209146106ae5780635c975abb146106d957610325565b806339509351146105895780633f4ba83a146105c657806342966c68146105dd5780634b8ce602146106065780634febf53d14610631578063506e50ec1461065a57610325565b80631c9f0d2e116102d7578063247b912d116102b1578063247b912d146104e15780632c32abc21461050a5780633112739414610521578063313ce5671461055e57610325565b80631c9f0d2e1461044e57806323a38a381461047957806323b872dd146104a457610325565b806305a1f36d1461032a57806306fdde0314610353578063095ea7b31461037e578063099aca7d146103bb57806316483a92146103f857806318160ddd1461042357610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613bac565b610c43565b005b34801561035f57600080fd5b50610368610d05565b6040516103759190613c85565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613d05565b610d97565b6040516103b29190613d60565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd9190613eb0565b610db5565b6040516103ef9190613f08565b60405180910390f35b34801561040457600080fd5b5061040d610de3565b60405161041a9190613f08565b60405180910390f35b34801561042f57600080fd5b50610438610de9565b6040516104459190613f08565b60405180910390f35b34801561045a57600080fd5b50610463610df3565b6040516104709190613f08565b60405180910390f35b34801561048557600080fd5b5061048e610df9565b60405161049b9190613d60565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613f23565b610e0c565b6040516104d89190613d60565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613bac565b610f04565b005b34801561051657600080fd5b5061051f610fc6565b005b34801561052d57600080fd5b5061054860048036038101906105439190613f76565b611074565b6040516105559190613d60565b60405180910390f35b34801561056a57600080fd5b50610573611094565b6040516105809190613fbf565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613d05565b61109d565b6040516105bd9190613d60565b60405180910390f35b3480156105d257600080fd5b506105db611149565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190613fda565b611216565b005b34801561061257600080fd5b5061061b61129f565b6040516106289190613f08565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613f76565b6112a5565b005b34801561066657600080fd5b50610681600480360381019061067c9190613eb0565b6113c5565b60405161068e9190613f08565b60405180910390f35b3480156106a357600080fd5b506106ac6113f3565b005b3480156106ba57600080fd5b506106c36114dc565b6040516106d09190613f08565b60405180910390f35b3480156106e557600080fd5b506106ee6114e2565b6040516106fb9190613d60565b60405180910390f35b34801561071057600080fd5b506107196114f9565b6040516107269190613f08565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190613fda565b6114ff565b005b34801561076457600080fd5b5061076d6115dc565b60405161077a9190613f08565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a59190613f76565b6115e2565b6040516107b79190613f08565b60405180910390f35b3480156107cc57600080fd5b506107d561162a565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613f76565b6116b2565b005b34801561080c57600080fd5b50610815611816565b005b34801561082357600080fd5b5061082c6118af565b005b34801561083a57600080fd5b5061084361197d565b005b34801561085157600080fd5b5061085a6121b2565b6040516108679190614016565b60405180910390f35b34801561087c57600080fd5b506108856121dc565b6040516108929190613c85565b60405180910390f35b3480156108a757600080fd5b506108b061226e565b005b3480156108be57600080fd5b506108d960048036038101906108d49190613d05565b612307565b6040516108e69190613d60565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613d05565b6123f2565b6040516109239190613d60565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613eb0565b612410565b6040516109609190614016565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613f76565b612459565b005b34801561099e57600080fd5b506109b960048036038101906109b49190613f76565b612578565b6040516109c69190613d60565b60405180910390f35b3480156109db57600080fd5b506109e46125ce565b005b3480156109f257600080fd5b50610a0d6004803603810190610a089190613f76565b6126b6565b005b348015610a1b57600080fd5b50610a366004803603810190610a319190613f76565b612819565b005b348015610a4457600080fd5b50610a4d6128f3565b604051610a5a9190613f08565b60405180910390f35b348015610a6f57600080fd5b50610a8a6004803603810190610a859190614031565b6128f9565b604051610a979190613f08565b60405180910390f35b348015610aac57600080fd5b50610ab5612980565b604051610ac29190613f08565b60405180910390f35b348015610ad757600080fd5b50610ae0612986565b604051610aed9190613f08565b60405180910390f35b348015610b0257600080fd5b50610b1d6004803603810190610b189190613f76565b61298c565b005b348015610b2b57600080fd5b50610b34612a84565b604051610b419190613f08565b60405180910390f35b348015610b5657600080fd5b50610b5f612a8a565b604051610b6c9190613f08565b60405180910390f35b348015610b8157600080fd5b50610b9c6004803603810190610b979190613f76565b612a90565b005b348015610baa57600080fd5b50610bc56004803603810190610bc09190613f76565b612cc1565b604051610bd29190613d60565b60405180910390f35b348015610be757600080fd5b50610bf0612ce1565b604051610bfd9190613d60565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c289190613f76565b612cf4565b604051610c3a9190613d60565b60405180910390f35b610c4b612d4a565b73ffffffffffffffffffffffffffffffffffffffff16610c696121b2565b73ffffffffffffffffffffffffffffffffffffffff1614610cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb6906140bd565b60405180910390fd5b816011604051610cce90614134565b908152602001604051809103902081905550806011604051610cef90614195565b9081526020016040518091039020819055505050565b606060038054610d14906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d40906141d9565b8015610d8d5780601f10610d6257610100808354040283529160200191610d8d565b820191906000526020600020905b815481529060010190602001808311610d7057829003601f168201915b5050505050905090565b6000610dab610da4612d4a565b8484612d52565b6001905092915050565b6011818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b60175481565b6000600254905090565b60185481565b601e60009054906101000a900460ff1681565b6000610e19848484612f1d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e64612d4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061427d565b60405180910390fd5b610ef885610ef0612d4a565b858403612d52565b60019150509392505050565b610f0c612d4a565b73ffffffffffffffffffffffffffffffffffffffff16610f2a6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f77906140bd565b60405180910390fd5b816012604051610f8f90614134565b908152602001604051809103902081905550806012604051610fb090614195565b9081526020016040518091039020819055505050565b610fce612d4a565b73ffffffffffffffffffffffffffffffffffffffff16610fec6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611039906140bd565b60405180910390fd5b6110716000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000613073565b50565b60106020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600061113f6110aa612d4a565b8484600160006110b8612d4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113a91906142cc565b612d52565b6001905092915050565b611151612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661116f6121b2565b73ffffffffffffffffffffffffffffffffffffffff16146111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc906140bd565b60405180910390fd5b6111cd6114e2565b61120c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112039061436e565b60405180910390fd5b6112146134f5565b565b61121e612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661123c6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611289906140bd565b60405180910390fd5b61129c3382613597565b50565b60155481565b6112ad612d4a565b73ffffffffffffffffffffffffffffffffffffffff166112cb6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906140bd565b60405180910390fd5b61132a81612578565b1561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614400565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6012818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b6113fb612d4a565b73ffffffffffffffffffffffffffffffffffffffff166114196121b2565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611466906140bd565b60405180910390fd5b601e60009054906101000a900460ff16156114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b69061446c565b60405180910390fd5b6001601e60006101000a81548160ff021916908315150217905550565b60145481565b6000600560149054906101000a900460ff16905090565b601c5481565b611507612d4a565b73ffffffffffffffffffffffffffffffffffffffff166115256121b2565b73ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611572906140bd565b60405180910390fd5b61271081116115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906144d8565b60405180910390fd5b670de0b6b3a7640000816115d391906144f8565b600e8190555050565b601a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611632612d4a565b73ffffffffffffffffffffffffffffffffffffffff166116506121b2565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906140bd565b60405180910390fd5b6116b0600061376e565b565b6116ba612d4a565b73ffffffffffffffffffffffffffffffffffffffff166116d86121b2565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611725906140bd565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906145c4565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61181e612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661183c6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906140bd565b60405180910390fd5b6001601e60016101000a81548160ff021916908315150217905550565b6118b7612d4a565b73ffffffffffffffffffffffffffffffffffffffff166118d56121b2565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611922906140bd565b60405180910390fd5b6119336114e2565b15611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a90614656565b60405180910390fd5b61197b613834565b565b6000600267ffffffffffffffff81111561199a57611999613d85565b5b6040519080825280602002602001820160405280156119c85781602001602082028036833780820191505090505b50905030816000815181106119e0576119df614676565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8257600080fd5b505afa158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba91906146ba565b81600181518110611ace57611acd614676565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601554601454611b5891906142cc565b846040518363ffffffff1660e01b8152600401611b769291906147a5565b60006040518083038186803b158015611b8e57600080fd5b505afa158015611ba2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bcb91906148b2565b600181518110611bde57611bdd614676565b5b602002602001015190508060168190555060095481106121ae57600047905060006002601554611c0e919061492a565b601454611c1b91906142cc565b905080601781905550611c5130601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612d52565b601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008730426040518663ffffffff1660e01b8152600401611cb59594939291906149a0565b600060405180830381600087803b158015611ccf57600080fd5b505af1158015611ce3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d0c91906148b2565b5060008247611d1b91906149fa565b90508060188190555060006002601554611d35919061492a565b90506000670de0b6b3a7640000601554601454611d5291906142cc565b670de0b6b3a76400006002601554611d6a919061492a565b611d7491906144f8565b611d7e919061492a565b84611d8991906144f8565b611d93919061492a565b90506000670de0b6b3a7640000601554601454611db091906142cc565b670de0b6b3a7640000601454611dc691906144f8565b611dd0919061492a565b85611ddb91906144f8565b611de5919061492a565b9050611e1430601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612d52565b601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000806013604051611e6690614195565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611eb796959493929190614a2e565b6060604051808303818588803b158015611ed057600080fd5b505af1158015611ee4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f099190614a8f565b50505060008386611f1a91906142cc565b601554601454611f2a91906142cc565b611f3491906149fa565b9050806019819055506000811115611f8e57611f8d306013604051611f5890614134565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f1d565b5b60006013604051611f9e90614134565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611ff090614b13565b60006040518083038185875af1925050503d806000811461202d576040519150601f19603f3d011682016040523d82523d6000602084013e612032565b606091505b5050905080612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90614b74565b60405180910390fd5b6000848461208491906142cc565b8761208f91906149fa565b111561219557600060136040516120a590614134565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856120f691906142cc565b8861210191906149fa565b60405161210d90614b13565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90614b74565b60405180910390fd5b505b6000601481905550600060158190555050505050505050505b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546121eb906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054612217906141d9565b80156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b5050505050905090565b612276612d4a565b73ffffffffffffffffffffffffffffffffffffffff166122946121b2565b73ffffffffffffffffffffffffffffffffffffffff16146122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e1906140bd565b60405180910390fd5b6000601e60016101000a81548160ff021916908315150217905550565b60008060016000612316612d4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614c06565b60405180910390fd5b6123e76123de612d4a565b85858403612d52565b600191505092915050565b60006124066123ff612d4a565b8484612f1d565b6001905092915050565b6013818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612461612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661247f6121b2565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc906140bd565b60405180910390fd5b6124de81612578565b61251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614c72565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125d6612d4a565b73ffffffffffffffffffffffffffffffffffffffff166125f46121b2565b73ffffffffffffffffffffffffffffffffffffffff161461264a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612641906140bd565b60405180910390fd5b601e60009054906101000a900460ff16612699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269090614cde565b60405180910390fd5b6000601e60006101000a81548160ff021916908315150217905550565b6126be612d4a565b73ffffffffffffffffffffffffffffffffffffffff166126dc6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906140bd565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614d70565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612821612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661283f6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288c906140bd565b60405180910390fd5b8060136040516128a490614134565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601d5481565b60165481565b612994612d4a565b73ffffffffffffffffffffffffffffffffffffffff166129b26121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff906140bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90614e02565b60405180910390fd5b612a818161376e565b50565b601b5481565b600e5481565b612a98612d4a565b73ffffffffffffffffffffffffffffffffffffffff16612ab66121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b03906140bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b9457612b496121b2565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612b8e573d6000803e3d6000fd5b50612cbe565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612bd49190614016565b60206040518083038186803b158015612bec57600080fd5b505afa158015612c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c249190614e22565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612c4a6121b2565b836040518363ffffffff1660e01b8152600401612c68929190614e4f565b602060405180830381600087803b158015612c8257600080fd5b505af1158015612c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cba9190614ea4565b5050505b50565b600f6020528060005260406000206000915054906101000a900460ff1681565b601e60019054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990614f43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614fd5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f109190613f08565b60405180910390a3505050565b612f256114e2565b15612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c90615067565b60405180910390fd5b612f6e33612cf4565b15612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa5906150d3565b60405180910390fd5b612fb782612cf4565b15612ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fee9061513f565b60405180910390fd5b61300032612cf4565b15613040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613037906150d3565b60405180910390fd5b601e60009054906101000a900460ff161561306357613060838383613073565b90505b61306e8383836138d7565b505050565b600061307e84612578565b158015613091575061308f83612578565b155b156134ea576000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156132265760085460116040516130ff90614134565b9081526020016040518091039020548461311991906144f8565b613123919061492a565b8161312e91906142cc565b9050600854601160405161314190614195565b9081526020016040518091039020548461315b91906144f8565b613165919061492a565b8161317091906142cc565b9050600854601160405161318390614134565b9081526020016040518091039020548461319d91906144f8565b6131a7919061492a565b601460008282546131b891906142cc565b9250508190555060085460116040516131d090614195565b908152602001604051809103902054846131ea91906144f8565b6131f4919061492a565b6015600082825461320591906142cc565b92505081905550600081111561322157613220853083612f1d565b5b6133f7565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133f657600854601260405161328d90614134565b908152602001604051809103902054846132a791906144f8565b6132b1919061492a565b816132bc91906142cc565b905060085460126040516132cf90614195565b908152602001604051809103902054846132e991906144f8565b6132f3919061492a565b816132fe91906142cc565b9050600854601260405161331190614134565b9081526020016040518091039020548461332b91906144f8565b613335919061492a565b6014600082825461334691906142cc565b92505081905550600854601260405161335e90614195565b9081526020016040518091039020548461337891906144f8565b613382919061492a565b6015600082825461339391906142cc565b9250508190555060008111156133af576133ae853083612f1d565b5b60006015546014546133c191906142cc565b905060008114156133d65783925050506134ee565b601e60019054906101000a900460ff16156133f4576133f361197d565b5b505b5b808361340391906149fa565b925061340e846115e2565b601a8190555082601b81905550601b54601a5461342b91906142cc565b601c81905550600e54601d81905550602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146134e857600e548361349c866115e2565b6134a691906142cc565b11156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134de906151ab565b60405180910390fd5b5b505b8190505b9392505050565b6134fd6114e2565b61353c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353390615217565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613580612d4a565b60405161358d9190614016565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe906152a9565b60405180910390fd5b61361382600083613b58565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136909061533b565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546136f091906149fa565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137559190613f08565b60405180910390a361376983600084613b5d565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61383c6114e2565b1561387c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613873906153a7565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138c0612d4a565b6040516138cd9190614016565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393e90615439565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ae906154cb565b60405180910390fd5b6139c2838383613b58565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3f9061555d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613adb91906142cc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b3f9190613f08565b60405180910390a3613b52848484613b5d565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613b8981613b76565b8114613b9457600080fd5b50565b600081359050613ba681613b80565b92915050565b60008060408385031215613bc357613bc2613b6c565b5b6000613bd185828601613b97565b9250506020613be285828601613b97565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c26578082015181840152602081019050613c0b565b83811115613c35576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c5782613bec565b613c618185613bf7565b9350613c71818560208601613c08565b613c7a81613c3b565b840191505092915050565b60006020820190508181036000830152613c9f8184613c4c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd282613ca7565b9050919050565b613ce281613cc7565b8114613ced57600080fd5b50565b600081359050613cff81613cd9565b92915050565b60008060408385031215613d1c57613d1b613b6c565b5b6000613d2a85828601613cf0565b9250506020613d3b85828601613b97565b9150509250929050565b60008115159050919050565b613d5a81613d45565b82525050565b6000602082019050613d756000830184613d51565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613dbd82613c3b565b810181811067ffffffffffffffff82111715613ddc57613ddb613d85565b5b80604052505050565b6000613def613b62565b9050613dfb8282613db4565b919050565b600067ffffffffffffffff821115613e1b57613e1a613d85565b5b613e2482613c3b565b9050602081019050919050565b82818337600083830152505050565b6000613e53613e4e84613e00565b613de5565b905082815260208101848484011115613e6f57613e6e613d80565b5b613e7a848285613e31565b509392505050565b600082601f830112613e9757613e96613d7b565b5b8135613ea7848260208601613e40565b91505092915050565b600060208284031215613ec657613ec5613b6c565b5b600082013567ffffffffffffffff811115613ee457613ee3613b71565b5b613ef084828501613e82565b91505092915050565b613f0281613b76565b82525050565b6000602082019050613f1d6000830184613ef9565b92915050565b600080600060608486031215613f3c57613f3b613b6c565b5b6000613f4a86828701613cf0565b9350506020613f5b86828701613cf0565b9250506040613f6c86828701613b97565b9150509250925092565b600060208284031215613f8c57613f8b613b6c565b5b6000613f9a84828501613cf0565b91505092915050565b600060ff82169050919050565b613fb981613fa3565b82525050565b6000602082019050613fd46000830184613fb0565b92915050565b600060208284031215613ff057613fef613b6c565b5b6000613ffe84828501613b97565b91505092915050565b61401081613cc7565b82525050565b600060208201905061402b6000830184614007565b92915050565b6000806040838503121561404857614047613b6c565b5b600061405685828601613cf0565b925050602061406785828601613cf0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140a7602083613bf7565b91506140b282614071565b602082019050919050565b600060208201905081810360008301526140d68161409a565b9050919050565b600081905092915050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b600061411e6003836140dd565b9150614129826140e8565b600382019050919050565b600061413f82614111565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b600061417f6009836140dd565b915061418a82614149565b600982019050919050565b60006141a082614172565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141f157607f821691505b60208210811415614205576142046141aa565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614267602883613bf7565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d782613b76565b91506142e283613b76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143175761431661429d565b5b828201905092915050565b7f45524332303a20436f6e7472616374206973206e6f7420706175736564000000600082015250565b6000614358601d83613bf7565b915061436382614322565b602082019050919050565b600060208201905081810360008301526143878161434b565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006143ea602283613bf7565b91506143f58261438e565b604082019050919050565b60006020820190508181036000830152614419816143dd565b9050919050565b7f45524332303a2054617820697320616c726561647920656e61626c6564000000600082015250565b6000614456601d83613bf7565b915061446182614420565b602082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f4e4f207275672070756c6c000000000000000000000000000000000000000000600082015250565b60006144c2600b83613bf7565b91506144cd8261448c565b602082019050919050565b600060208201905081810360008301526144f1816144b5565b9050919050565b600061450382613b76565b915061450e83613b76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145475761454661429d565b5b828202905092915050565b7f45524332303a204163636f756e7420697320616c726561647920626c61636b6c60008201527f6973746564000000000000000000000000000000000000000000000000000000602082015250565b60006145ae602583613bf7565b91506145b982614552565b604082019050919050565b600060208201905081810360008301526145dd816145a1565b9050919050565b7f45524332303a20436f6e747261637420697320616c726561647920706175736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614640602183613bf7565b915061464b826145e4565b604082019050919050565b6000602082019050818103600083015261466f81614633565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506146b481613cd9565b92915050565b6000602082840312156146d0576146cf613b6c565b5b60006146de848285016146a5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61471c81613cc7565b82525050565b600061472e8383614713565b60208301905092915050565b6000602082019050919050565b6000614752826146e7565b61475c81856146f2565b935061476783614703565b8060005b8381101561479857815161477f8882614722565b975061478a8361473a565b92505060018101905061476b565b5085935050505092915050565b60006040820190506147ba6000830185613ef9565b81810360208301526147cc8184614747565b90509392505050565b600067ffffffffffffffff8211156147f0576147ef613d85565b5b602082029050602081019050919050565b600080fd5b60008151905061481581613b80565b92915050565b600061482e614829846147d5565b613de5565b9050808382526020820190506020840283018581111561485157614850614801565b5b835b8181101561487a57806148668882614806565b845260208401935050602081019050614853565b5050509392505050565b600082601f83011261489957614898613d7b565b5b81516148a984826020860161481b565b91505092915050565b6000602082840312156148c8576148c7613b6c565b5b600082015167ffffffffffffffff8111156148e6576148e5613b71565b5b6148f284828501614884565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061493582613b76565b915061494083613b76565b9250826149505761494f6148fb565b5b828204905092915050565b6000819050919050565b6000819050919050565b600061498a6149856149808461495b565b614965565b613b76565b9050919050565b61499a8161496f565b82525050565b600060a0820190506149b56000830188613ef9565b6149c26020830187614991565b81810360408301526149d48186614747565b90506149e36060830185614007565b6149f06080830184613ef9565b9695505050505050565b6000614a0582613b76565b9150614a1083613b76565b925082821015614a2357614a2261429d565b5b828203905092915050565b600060c082019050614a436000830189614007565b614a506020830188613ef9565b614a5d6040830187614991565b614a6a6060830186614991565b614a776080830185614007565b614a8460a0830184613ef9565b979650505050505050565b600080600060608486031215614aa857614aa7613b6c565b5b6000614ab686828701614806565b9350506020614ac786828701614806565b9250506040614ad886828701614806565b9150509250925092565b600081905092915050565b50565b6000614afd600083614ae2565b9150614b0882614aed565b600082019050919050565b6000614b1e82614af0565b9150819050919050565b7f7472616e7366657220746f20206465762077616c6c6574206661696c65640000600082015250565b6000614b5e601e83613bf7565b9150614b6982614b28565b602082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614bf0602583613bf7565b9150614bfb82614b94565b604082019050919050565b60006020820190508181036000830152614c1f81614be3565b9050919050565b7f45524332303a204163636f756e74206973206e6f74206578636c756465640000600082015250565b6000614c5c601e83613bf7565b9150614c6782614c26565b602082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b7f45524332303a2054617820697320616c72656164792064697361626c65640000600082015250565b6000614cc8601e83613bf7565b9150614cd382614c92565b602082019050919050565b60006020820190508181036000830152614cf781614cbb565b9050919050565b7f45524332303a204163636f756e74206973206e6f7420626c61636b6c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d5a602183613bf7565b9150614d6582614cfe565b604082019050919050565b60006020820190508181036000830152614d8981614d4d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dec602683613bf7565b9150614df782614d90565b604082019050919050565b60006020820190508181036000830152614e1b81614ddf565b9050919050565b600060208284031215614e3857614e37613b6c565b5b6000614e4684828501614806565b91505092915050565b6000604082019050614e646000830185614007565b614e716020830184613ef9565b9392505050565b614e8181613d45565b8114614e8c57600080fd5b50565b600081519050614e9e81614e78565b92915050565b600060208284031215614eba57614eb9613b6c565b5b6000614ec884828501614e8f565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f2d602483613bf7565b9150614f3882614ed1565b604082019050919050565b60006020820190508181036000830152614f5c81614f20565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fbf602283613bf7565b9150614fca82614f63565b604082019050919050565b60006020820190508181036000830152614fee81614fb2565b9050919050565b7f45524332303a20746f6b656e207472616e73666572207768696c65207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000615051602283613bf7565b915061505c82614ff5565b604082019050919050565b6000602082019050818103600083015261508081615044565b9050919050565b7f45524332303a2073656e64657220626c61636b6c697374656400000000000000600082015250565b60006150bd601983613bf7565b91506150c882615087565b602082019050919050565b600060208201905081810360008301526150ec816150b0565b9050919050565b7f45524332303a20726563697069656e7420626c61636b6c697374656400000000600082015250565b6000615129601c83613bf7565b9150615134826150f3565b602082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b6000615195601883613bf7565b91506151a08261515f565b602082019050919050565b600060208201905081810360008301526151c481615188565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000615201601483613bf7565b915061520c826151cb565b602082019050919050565b60006020820190508181036000830152615230816151f4565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615293602183613bf7565b915061529e82615237565b604082019050919050565b600060208201905081810360008301526152c281615286565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615325602283613bf7565b9150615330826152c9565b604082019050919050565b6000602082019050818103600083015261535481615318565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000615391601083613bf7565b915061539c8261535b565b602082019050919050565b600060208201905081810360008301526153c081615384565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615423602583613bf7565b915061542e826153c7565b604082019050919050565b6000602082019050818103600083015261545281615416565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154b5602383613bf7565b91506154c082615459565b604082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615547602683613bf7565b9150615552826154eb565b604082019050919050565b600060208201905081810360008301526155768161553a565b905091905056fea2646970667358221220e3a35f89baf60090ad71c111f396c3e3f1803a1fc48f9d0bdf9273de20bb678164736f6c63430008090033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c8063715018a6116101ab578063ced695a4116100f7578063f2fde38b11610095578063f9d0831a1161006f578063f9d0831a14610b75578063f9f92be414610b9e578063fd46752a14610bdb578063fe575a8714610c0657610325565b8063f2fde38b14610af6578063f441b1c814610b1f578063f8b45b0514610b4a57610325565b8063dc2c5f8a116100d1578063dc2c5f8a14610a38578063dd62ed3e14610a63578063e1370dd314610aa0578063ebcec6a214610acb57610325565b8063ced695a4146109cf578063cfefd79e146109e6578063d01dc84b14610a0f57610325565b806395d89b4111610164578063a9059cbb1161013e578063a9059cbb146108ef578063ab47919a1461092c578063abe4f11d14610969578063cba0e9961461099257610325565b806395d89b41146108705780639692c4f91461089b578063a457c2d7146108b257610325565b8063715018a6146107c0578063717a8651146107d75780637898d9b9146108005780638456cb591461081757806387d881821461082e5780638da5cb5b1461084557610325565b8063395093511161026a57806353eb3bcf116102235780635cabe5df116101fd5780635cabe5df146107045780635d0044ca1461072f5780635d9833ec1461075857806370a082311461078357610325565b806353eb3bcf1461069757806355648209146106ae5780635c975abb146106d957610325565b806339509351146105895780633f4ba83a146105c657806342966c68146105dd5780634b8ce602146106065780634febf53d14610631578063506e50ec1461065a57610325565b80631c9f0d2e116102d7578063247b912d116102b1578063247b912d146104e15780632c32abc21461050a5780633112739414610521578063313ce5671461055e57610325565b80631c9f0d2e1461044e57806323a38a381461047957806323b872dd146104a457610325565b806305a1f36d1461032a57806306fdde0314610353578063095ea7b31461037e578063099aca7d146103bb57806316483a92146103f857806318160ddd1461042357610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c9190613bac565b610c43565b005b34801561035f57600080fd5b50610368610d05565b6040516103759190613c85565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613d05565b610d97565b6040516103b29190613d60565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd9190613eb0565b610db5565b6040516103ef9190613f08565b60405180910390f35b34801561040457600080fd5b5061040d610de3565b60405161041a9190613f08565b60405180910390f35b34801561042f57600080fd5b50610438610de9565b6040516104459190613f08565b60405180910390f35b34801561045a57600080fd5b50610463610df3565b6040516104709190613f08565b60405180910390f35b34801561048557600080fd5b5061048e610df9565b60405161049b9190613d60565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190613f23565b610e0c565b6040516104d89190613d60565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613bac565b610f04565b005b34801561051657600080fd5b5061051f610fc6565b005b34801561052d57600080fd5b5061054860048036038101906105439190613f76565b611074565b6040516105559190613d60565b60405180910390f35b34801561056a57600080fd5b50610573611094565b6040516105809190613fbf565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613d05565b61109d565b6040516105bd9190613d60565b60405180910390f35b3480156105d257600080fd5b506105db611149565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190613fda565b611216565b005b34801561061257600080fd5b5061061b61129f565b6040516106289190613f08565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190613f76565b6112a5565b005b34801561066657600080fd5b50610681600480360381019061067c9190613eb0565b6113c5565b60405161068e9190613f08565b60405180910390f35b3480156106a357600080fd5b506106ac6113f3565b005b3480156106ba57600080fd5b506106c36114dc565b6040516106d09190613f08565b60405180910390f35b3480156106e557600080fd5b506106ee6114e2565b6040516106fb9190613d60565b60405180910390f35b34801561071057600080fd5b506107196114f9565b6040516107269190613f08565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190613fda565b6114ff565b005b34801561076457600080fd5b5061076d6115dc565b60405161077a9190613f08565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a59190613f76565b6115e2565b6040516107b79190613f08565b60405180910390f35b3480156107cc57600080fd5b506107d561162a565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190613f76565b6116b2565b005b34801561080c57600080fd5b50610815611816565b005b34801561082357600080fd5b5061082c6118af565b005b34801561083a57600080fd5b5061084361197d565b005b34801561085157600080fd5b5061085a6121b2565b6040516108679190614016565b60405180910390f35b34801561087c57600080fd5b506108856121dc565b6040516108929190613c85565b60405180910390f35b3480156108a757600080fd5b506108b061226e565b005b3480156108be57600080fd5b506108d960048036038101906108d49190613d05565b612307565b6040516108e69190613d60565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613d05565b6123f2565b6040516109239190613d60565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613eb0565b612410565b6040516109609190614016565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613f76565b612459565b005b34801561099e57600080fd5b506109b960048036038101906109b49190613f76565b612578565b6040516109c69190613d60565b60405180910390f35b3480156109db57600080fd5b506109e46125ce565b005b3480156109f257600080fd5b50610a0d6004803603810190610a089190613f76565b6126b6565b005b348015610a1b57600080fd5b50610a366004803603810190610a319190613f76565b612819565b005b348015610a4457600080fd5b50610a4d6128f3565b604051610a5a9190613f08565b60405180910390f35b348015610a6f57600080fd5b50610a8a6004803603810190610a859190614031565b6128f9565b604051610a979190613f08565b60405180910390f35b348015610aac57600080fd5b50610ab5612980565b604051610ac29190613f08565b60405180910390f35b348015610ad757600080fd5b50610ae0612986565b604051610aed9190613f08565b60405180910390f35b348015610b0257600080fd5b50610b1d6004803603810190610b189190613f76565b61298c565b005b348015610b2b57600080fd5b50610b34612a84565b604051610b419190613f08565b60405180910390f35b348015610b5657600080fd5b50610b5f612a8a565b604051610b6c9190613f08565b60405180910390f35b348015610b8157600080fd5b50610b9c6004803603810190610b979190613f76565b612a90565b005b348015610baa57600080fd5b50610bc56004803603810190610bc09190613f76565b612cc1565b604051610bd29190613d60565b60405180910390f35b348015610be757600080fd5b50610bf0612ce1565b604051610bfd9190613d60565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c289190613f76565b612cf4565b604051610c3a9190613d60565b60405180910390f35b610c4b612d4a565b73ffffffffffffffffffffffffffffffffffffffff16610c696121b2565b73ffffffffffffffffffffffffffffffffffffffff1614610cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb6906140bd565b60405180910390fd5b816011604051610cce90614134565b908152602001604051809103902081905550806011604051610cef90614195565b9081526020016040518091039020819055505050565b606060038054610d14906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054610d40906141d9565b8015610d8d5780601f10610d6257610100808354040283529160200191610d8d565b820191906000526020600020905b815481529060010190602001808311610d7057829003601f168201915b5050505050905090565b6000610dab610da4612d4a565b8484612d52565b6001905092915050565b6011818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b60175481565b6000600254905090565b60185481565b601e60009054906101000a900460ff1681565b6000610e19848484612f1d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e64612d4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061427d565b60405180910390fd5b610ef885610ef0612d4a565b858403612d52565b60019150509392505050565b610f0c612d4a565b73ffffffffffffffffffffffffffffffffffffffff16610f2a6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f77906140bd565b60405180910390fd5b816012604051610f8f90614134565b908152602001604051809103902081905550806012604051610fb090614195565b9081526020016040518091039020819055505050565b610fce612d4a565b73ffffffffffffffffffffffffffffffffffffffff16610fec6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611039906140bd565b60405180910390fd5b6110716000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000613073565b50565b60106020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b600061113f6110aa612d4a565b8484600160006110b8612d4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113a91906142cc565b612d52565b6001905092915050565b611151612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661116f6121b2565b73ffffffffffffffffffffffffffffffffffffffff16146111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc906140bd565b60405180910390fd5b6111cd6114e2565b61120c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112039061436e565b60405180910390fd5b6112146134f5565b565b61121e612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661123c6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611289906140bd565b60405180910390fd5b61129c3382613597565b50565b60155481565b6112ad612d4a565b73ffffffffffffffffffffffffffffffffffffffff166112cb6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906140bd565b60405180910390fd5b61132a81612578565b1561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614400565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6012818051602081018201805184825260208301602085012081835280955050505050506000915090505481565b6113fb612d4a565b73ffffffffffffffffffffffffffffffffffffffff166114196121b2565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611466906140bd565b60405180910390fd5b601e60009054906101000a900460ff16156114bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b69061446c565b60405180910390fd5b6001601e60006101000a81548160ff021916908315150217905550565b60145481565b6000600560149054906101000a900460ff16905090565b601c5481565b611507612d4a565b73ffffffffffffffffffffffffffffffffffffffff166115256121b2565b73ffffffffffffffffffffffffffffffffffffffff161461157b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611572906140bd565b60405180910390fd5b61271081116115bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b6906144d8565b60405180910390fd5b670de0b6b3a7640000816115d391906144f8565b600e8190555050565b601a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611632612d4a565b73ffffffffffffffffffffffffffffffffffffffff166116506121b2565b73ffffffffffffffffffffffffffffffffffffffff16146116a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169d906140bd565b60405180910390fd5b6116b0600061376e565b565b6116ba612d4a565b73ffffffffffffffffffffffffffffffffffffffff166116d86121b2565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611725906140bd565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b2906145c4565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61181e612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661183c6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906140bd565b60405180910390fd5b6001601e60016101000a81548160ff021916908315150217905550565b6118b7612d4a565b73ffffffffffffffffffffffffffffffffffffffff166118d56121b2565b73ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611922906140bd565b60405180910390fd5b6119336114e2565b15611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a90614656565b60405180910390fd5b61197b613834565b565b6000600267ffffffffffffffff81111561199a57611999613d85565b5b6040519080825280602002602001820160405280156119c85781602001602082028036833780820191505090505b50905030816000815181106119e0576119df614676565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8257600080fd5b505afa158015611a96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aba91906146ba565b81600181518110611ace57611acd614676565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601554601454611b5891906142cc565b846040518363ffffffff1660e01b8152600401611b769291906147a5565b60006040518083038186803b158015611b8e57600080fd5b505afa158015611ba2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611bcb91906148b2565b600181518110611bde57611bdd614676565b5b602002602001015190508060168190555060095481106121ae57600047905060006002601554611c0e919061492a565b601454611c1b91906142cc565b905080601781905550611c5130601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612d52565b601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008730426040518663ffffffff1660e01b8152600401611cb59594939291906149a0565b600060405180830381600087803b158015611ccf57600080fd5b505af1158015611ce3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d0c91906148b2565b5060008247611d1b91906149fa565b90508060188190555060006002601554611d35919061492a565b90506000670de0b6b3a7640000601554601454611d5291906142cc565b670de0b6b3a76400006002601554611d6a919061492a565b611d7491906144f8565b611d7e919061492a565b84611d8991906144f8565b611d93919061492a565b90506000670de0b6b3a7640000601554601454611db091906142cc565b670de0b6b3a7640000601454611dc691906144f8565b611dd0919061492a565b85611ddb91906144f8565b611de5919061492a565b9050611e1430601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612d52565b601e60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330866000806013604051611e6690614195565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611eb796959493929190614a2e565b6060604051808303818588803b158015611ed057600080fd5b505af1158015611ee4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f099190614a8f565b50505060008386611f1a91906142cc565b601554601454611f2a91906142cc565b611f3491906149fa565b9050806019819055506000811115611f8e57611f8d306013604051611f5890614134565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612f1d565b5b60006013604051611f9e90614134565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611ff090614b13565b60006040518083038185875af1925050503d806000811461202d576040519150601f19603f3d011682016040523d82523d6000602084013e612032565b606091505b5050905080612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90614b74565b60405180910390fd5b6000848461208491906142cc565b8761208f91906149fa565b111561219557600060136040516120a590614134565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685856120f691906142cc565b8861210191906149fa565b60405161210d90614b13565b60006040518083038185875af1925050503d806000811461214a576040519150601f19603f3d011682016040523d82523d6000602084013e61214f565b606091505b5050905080612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90614b74565b60405180910390fd5b505b6000601481905550600060158190555050505050505050505b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546121eb906141d9565b80601f0160208091040260200160405190810160405280929190818152602001828054612217906141d9565b80156122645780601f1061223957610100808354040283529160200191612264565b820191906000526020600020905b81548152906001019060200180831161224757829003601f168201915b5050505050905090565b612276612d4a565b73ffffffffffffffffffffffffffffffffffffffff166122946121b2565b73ffffffffffffffffffffffffffffffffffffffff16146122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e1906140bd565b60405180910390fd5b6000601e60016101000a81548160ff021916908315150217905550565b60008060016000612316612d4a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614c06565b60405180910390fd5b6123e76123de612d4a565b85858403612d52565b600191505092915050565b60006124066123ff612d4a565b8484612f1d565b6001905092915050565b6013818051602081018201805184825260208301602085012081835280955050505050506000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612461612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661247f6121b2565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc906140bd565b60405180910390fd5b6124de81612578565b61251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614c72565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125d6612d4a565b73ffffffffffffffffffffffffffffffffffffffff166125f46121b2565b73ffffffffffffffffffffffffffffffffffffffff161461264a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612641906140bd565b60405180910390fd5b601e60009054906101000a900460ff16612699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269090614cde565b60405180910390fd5b6000601e60006101000a81548160ff021916908315150217905550565b6126be612d4a565b73ffffffffffffffffffffffffffffffffffffffff166126dc6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906140bd565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590614d70565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612821612d4a565b73ffffffffffffffffffffffffffffffffffffffff1661283f6121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288c906140bd565b60405180910390fd5b8060136040516128a490614134565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601d5481565b60165481565b612994612d4a565b73ffffffffffffffffffffffffffffffffffffffff166129b26121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ff906140bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90614e02565b60405180910390fd5b612a818161376e565b50565b601b5481565b600e5481565b612a98612d4a565b73ffffffffffffffffffffffffffffffffffffffff16612ab66121b2565b73ffffffffffffffffffffffffffffffffffffffff1614612b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b03906140bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b9457612b496121b2565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612b8e573d6000803e3d6000fd5b50612cbe565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612bd49190614016565b60206040518083038186803b158015612bec57600080fd5b505afa158015612c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c249190614e22565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612c4a6121b2565b836040518363ffffffff1660e01b8152600401612c68929190614e4f565b602060405180830381600087803b158015612c8257600080fd5b505af1158015612c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cba9190614ea4565b5050505b50565b600f6020528060005260406000206000915054906101000a900460ff1681565b601e60019054906101000a900460ff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db990614f43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990614fd5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f109190613f08565b60405180910390a3505050565b612f256114e2565b15612f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5c90615067565b60405180910390fd5b612f6e33612cf4565b15612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa5906150d3565b60405180910390fd5b612fb782612cf4565b15612ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fee9061513f565b60405180910390fd5b61300032612cf4565b15613040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613037906150d3565b60405180910390fd5b601e60009054906101000a900460ff161561306357613060838383613073565b90505b61306e8383836138d7565b505050565b600061307e84612578565b158015613091575061308f83612578565b155b156134ea576000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156132265760085460116040516130ff90614134565b9081526020016040518091039020548461311991906144f8565b613123919061492a565b8161312e91906142cc565b9050600854601160405161314190614195565b9081526020016040518091039020548461315b91906144f8565b613165919061492a565b8161317091906142cc565b9050600854601160405161318390614134565b9081526020016040518091039020548461319d91906144f8565b6131a7919061492a565b601460008282546131b891906142cc565b9250508190555060085460116040516131d090614195565b908152602001604051809103902054846131ea91906144f8565b6131f4919061492a565b6015600082825461320591906142cc565b92505081905550600081111561322157613220853083612f1d565b5b6133f7565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156133f657600854601260405161328d90614134565b908152602001604051809103902054846132a791906144f8565b6132b1919061492a565b816132bc91906142cc565b905060085460126040516132cf90614195565b908152602001604051809103902054846132e991906144f8565b6132f3919061492a565b816132fe91906142cc565b9050600854601260405161331190614134565b9081526020016040518091039020548461332b91906144f8565b613335919061492a565b6014600082825461334691906142cc565b92505081905550600854601260405161335e90614195565b9081526020016040518091039020548461337891906144f8565b613382919061492a565b6015600082825461339391906142cc565b9250508190555060008111156133af576133ae853083612f1d565b5b60006015546014546133c191906142cc565b905060008114156133d65783925050506134ee565b601e60019054906101000a900460ff16156133f4576133f361197d565b5b505b5b808361340391906149fa565b925061340e846115e2565b601a8190555082601b81905550601b54601a5461342b91906142cc565b601c81905550600e54601d81905550602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146134e857600e548361349c866115e2565b6134a691906142cc565b11156134e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134de906151ab565b60405180910390fd5b5b505b8190505b9392505050565b6134fd6114e2565b61353c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353390615217565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613580612d4a565b60405161358d9190614016565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fe906152a9565b60405180910390fd5b61361382600083613b58565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613699576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136909061533b565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546136f091906149fa565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516137559190613f08565b60405180910390a361376983600084613b5d565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61383c6114e2565b1561387c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613873906153a7565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586138c0612d4a565b6040516138cd9190614016565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393e90615439565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ae906154cb565b60405180910390fd5b6139c2838383613b58565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a3f9061555d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613adb91906142cc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b3f9190613f08565b60405180910390a3613b52848484613b5d565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b613b8981613b76565b8114613b9457600080fd5b50565b600081359050613ba681613b80565b92915050565b60008060408385031215613bc357613bc2613b6c565b5b6000613bd185828601613b97565b9250506020613be285828601613b97565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c26578082015181840152602081019050613c0b565b83811115613c35576000848401525b50505050565b6000601f19601f8301169050919050565b6000613c5782613bec565b613c618185613bf7565b9350613c71818560208601613c08565b613c7a81613c3b565b840191505092915050565b60006020820190508181036000830152613c9f8184613c4c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613cd282613ca7565b9050919050565b613ce281613cc7565b8114613ced57600080fd5b50565b600081359050613cff81613cd9565b92915050565b60008060408385031215613d1c57613d1b613b6c565b5b6000613d2a85828601613cf0565b9250506020613d3b85828601613b97565b9150509250929050565b60008115159050919050565b613d5a81613d45565b82525050565b6000602082019050613d756000830184613d51565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613dbd82613c3b565b810181811067ffffffffffffffff82111715613ddc57613ddb613d85565b5b80604052505050565b6000613def613b62565b9050613dfb8282613db4565b919050565b600067ffffffffffffffff821115613e1b57613e1a613d85565b5b613e2482613c3b565b9050602081019050919050565b82818337600083830152505050565b6000613e53613e4e84613e00565b613de5565b905082815260208101848484011115613e6f57613e6e613d80565b5b613e7a848285613e31565b509392505050565b600082601f830112613e9757613e96613d7b565b5b8135613ea7848260208601613e40565b91505092915050565b600060208284031215613ec657613ec5613b6c565b5b600082013567ffffffffffffffff811115613ee457613ee3613b71565b5b613ef084828501613e82565b91505092915050565b613f0281613b76565b82525050565b6000602082019050613f1d6000830184613ef9565b92915050565b600080600060608486031215613f3c57613f3b613b6c565b5b6000613f4a86828701613cf0565b9350506020613f5b86828701613cf0565b9250506040613f6c86828701613b97565b9150509250925092565b600060208284031215613f8c57613f8b613b6c565b5b6000613f9a84828501613cf0565b91505092915050565b600060ff82169050919050565b613fb981613fa3565b82525050565b6000602082019050613fd46000830184613fb0565b92915050565b600060208284031215613ff057613fef613b6c565b5b6000613ffe84828501613b97565b91505092915050565b61401081613cc7565b82525050565b600060208201905061402b6000830184614007565b92915050565b6000806040838503121561404857614047613b6c565b5b600061405685828601613cf0565b925050602061406785828601613cf0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140a7602083613bf7565b91506140b282614071565b602082019050919050565b600060208201905081810360008301526140d68161409a565b9050919050565b600081905092915050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b600061411e6003836140dd565b9150614129826140e8565b600382019050919050565b600061413f82614111565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b600061417f6009836140dd565b915061418a82614149565b600982019050919050565b60006141a082614172565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141f157607f821691505b60208210811415614205576142046141aa565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614267602883613bf7565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142d782613b76565b91506142e283613b76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143175761431661429d565b5b828201905092915050565b7f45524332303a20436f6e7472616374206973206e6f7420706175736564000000600082015250565b6000614358601d83613bf7565b915061436382614322565b602082019050919050565b600060208201905081810360008301526143878161434b565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006143ea602283613bf7565b91506143f58261438e565b604082019050919050565b60006020820190508181036000830152614419816143dd565b9050919050565b7f45524332303a2054617820697320616c726561647920656e61626c6564000000600082015250565b6000614456601d83613bf7565b915061446182614420565b602082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f4e4f207275672070756c6c000000000000000000000000000000000000000000600082015250565b60006144c2600b83613bf7565b91506144cd8261448c565b602082019050919050565b600060208201905081810360008301526144f1816144b5565b9050919050565b600061450382613b76565b915061450e83613b76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145475761454661429d565b5b828202905092915050565b7f45524332303a204163636f756e7420697320616c726561647920626c61636b6c60008201527f6973746564000000000000000000000000000000000000000000000000000000602082015250565b60006145ae602583613bf7565b91506145b982614552565b604082019050919050565b600060208201905081810360008301526145dd816145a1565b9050919050565b7f45524332303a20436f6e747261637420697320616c726561647920706175736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614640602183613bf7565b915061464b826145e4565b604082019050919050565b6000602082019050818103600083015261466f81614633565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506146b481613cd9565b92915050565b6000602082840312156146d0576146cf613b6c565b5b60006146de848285016146a5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61471c81613cc7565b82525050565b600061472e8383614713565b60208301905092915050565b6000602082019050919050565b6000614752826146e7565b61475c81856146f2565b935061476783614703565b8060005b8381101561479857815161477f8882614722565b975061478a8361473a565b92505060018101905061476b565b5085935050505092915050565b60006040820190506147ba6000830185613ef9565b81810360208301526147cc8184614747565b90509392505050565b600067ffffffffffffffff8211156147f0576147ef613d85565b5b602082029050602081019050919050565b600080fd5b60008151905061481581613b80565b92915050565b600061482e614829846147d5565b613de5565b9050808382526020820190506020840283018581111561485157614850614801565b5b835b8181101561487a57806148668882614806565b845260208401935050602081019050614853565b5050509392505050565b600082601f83011261489957614898613d7b565b5b81516148a984826020860161481b565b91505092915050565b6000602082840312156148c8576148c7613b6c565b5b600082015167ffffffffffffffff8111156148e6576148e5613b71565b5b6148f284828501614884565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061493582613b76565b915061494083613b76565b9250826149505761494f6148fb565b5b828204905092915050565b6000819050919050565b6000819050919050565b600061498a6149856149808461495b565b614965565b613b76565b9050919050565b61499a8161496f565b82525050565b600060a0820190506149b56000830188613ef9565b6149c26020830187614991565b81810360408301526149d48186614747565b90506149e36060830185614007565b6149f06080830184613ef9565b9695505050505050565b6000614a0582613b76565b9150614a1083613b76565b925082821015614a2357614a2261429d565b5b828203905092915050565b600060c082019050614a436000830189614007565b614a506020830188613ef9565b614a5d6040830187614991565b614a6a6060830186614991565b614a776080830185614007565b614a8460a0830184613ef9565b979650505050505050565b600080600060608486031215614aa857614aa7613b6c565b5b6000614ab686828701614806565b9350506020614ac786828701614806565b9250506040614ad886828701614806565b9150509250925092565b600081905092915050565b50565b6000614afd600083614ae2565b9150614b0882614aed565b600082019050919050565b6000614b1e82614af0565b9150819050919050565b7f7472616e7366657220746f20206465762077616c6c6574206661696c65640000600082015250565b6000614b5e601e83613bf7565b9150614b6982614b28565b602082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614bf0602583613bf7565b9150614bfb82614b94565b604082019050919050565b60006020820190508181036000830152614c1f81614be3565b9050919050565b7f45524332303a204163636f756e74206973206e6f74206578636c756465640000600082015250565b6000614c5c601e83613bf7565b9150614c6782614c26565b602082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b7f45524332303a2054617820697320616c72656164792064697361626c65640000600082015250565b6000614cc8601e83613bf7565b9150614cd382614c92565b602082019050919050565b60006020820190508181036000830152614cf781614cbb565b9050919050565b7f45524332303a204163636f756e74206973206e6f7420626c61636b6c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d5a602183613bf7565b9150614d6582614cfe565b604082019050919050565b60006020820190508181036000830152614d8981614d4d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dec602683613bf7565b9150614df782614d90565b604082019050919050565b60006020820190508181036000830152614e1b81614ddf565b9050919050565b600060208284031215614e3857614e37613b6c565b5b6000614e4684828501614806565b91505092915050565b6000604082019050614e646000830185614007565b614e716020830184613ef9565b9392505050565b614e8181613d45565b8114614e8c57600080fd5b50565b600081519050614e9e81614e78565b92915050565b600060208284031215614eba57614eb9613b6c565b5b6000614ec884828501614e8f565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f2d602483613bf7565b9150614f3882614ed1565b604082019050919050565b60006020820190508181036000830152614f5c81614f20565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fbf602283613bf7565b9150614fca82614f63565b604082019050919050565b60006020820190508181036000830152614fee81614fb2565b9050919050565b7f45524332303a20746f6b656e207472616e73666572207768696c65207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000615051602283613bf7565b915061505c82614ff5565b604082019050919050565b6000602082019050818103600083015261508081615044565b9050919050565b7f45524332303a2073656e64657220626c61636b6c697374656400000000000000600082015250565b60006150bd601983613bf7565b91506150c882615087565b602082019050919050565b600060208201905081810360008301526150ec816150b0565b9050919050565b7f45524332303a20726563697069656e7420626c61636b6c697374656400000000600082015250565b6000615129601c83613bf7565b9150615134826150f3565b602082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b6000615195601883613bf7565b91506151a08261515f565b602082019050919050565b600060208201905081810360008301526151c481615188565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000615201601483613bf7565b915061520c826151cb565b602082019050919050565b60006020820190508181036000830152615230816151f4565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615293602183613bf7565b915061529e82615237565b604082019050919050565b600060208201905081810360008301526152c281615286565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615325602283613bf7565b9150615330826152c9565b604082019050919050565b6000602082019050818103600083015261535481615318565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000615391601083613bf7565b915061539c8261535b565b602082019050919050565b600060208201905081810360008301526153c081615384565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615423602583613bf7565b915061542e826153c7565b604082019050919050565b6000602082019050818103600083015261545281615416565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006154b5602383613bf7565b91506154c082615459565b604082019050919050565b600060208201905081810360008301526154e4816154a8565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615547602683613bf7565b9150615552826154eb565b604082019050919050565b600060208201905081810360008301526155768161553a565b905091905056fea2646970667358221220e3a35f89baf60090ad71c111f396c3e3f1803a1fc48f9d0bdf9273de20bb678164736f6c63430008090033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.