ETH Price: $3,294.13 (-1.08%)

Token

ABC (ABC)
 

Overview

Max Total Supply

1,000,000,000,000 ABC

Holders

439

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
695,463,730.326991691 ABC

Value
$0.00
0x94adfbb0f35d676035e5643543b16a98566cd145
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:
ApeToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : ApeToken.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/token/ERC20/IERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/access/Ownable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/Context.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/math/SafeMath.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/Address.sol";

contract ApeToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    // erc20
    mapping (address => uint256) private _rOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    // total supply = 1 trillion
    uint256 private constant _tTotal = 10**12 * 10**_decimals;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    // gets changed to APE ASTAX later
    string private _name = 'ABC';
    // gets changed to ASTAX \xF0\x9F\xA6\x8D later
    string private _symbol = 'ABC';
    uint8 private constant _decimals = 9;

    // uniswap
    address public constant uniswapV2RouterAddr = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(uniswapV2RouterAddr);
    address public constant uniswapV2FactoryAddr = address(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    address public liquidityPoolAddr =  UniswapV2Library.pairFor(uniswapV2FactoryAddr, uniswapV2Router.WETH(), address(this));

    // cooldown and numsells
    struct Holder {
        uint256 timeTransfer;
        uint256 numSells;
        uint256 timeSell;
    }
    mapping (address => Holder) public holder;
    // first 10 minutes there is a buy limit of 0.3% of liquidity pool
    uint256 private constant _buyLimit =  27 * 10**8 * 10**_decimals;
    // first 10 minutes there is a holding limit for each address of 1% of the liquidity pool
    uint256 private constant _holderLimit = 90 * 10**8 * 10**_decimals;
    uint256 private constant _resetTime = 24 hours;

    // taxes
    mapping (address => bool) public whitelist;
    mapping (address => bool) public blacklist;
    struct Taxes {
        uint256 marketing;
        uint256 redistribution;
        uint256 lottery;
        uint256 buybackBurn;
    }
    Taxes private _buyTaxrates = Taxes(50, 25, 25, 0);
    Taxes private _firstSellTaxrates = Taxes(50, 0, 20, 30);
    Taxes private _secondSellTaxrates = Taxes(125, 0, 50, 75);
    Taxes private _thirdSellTaxrates = Taxes(175, 0, 70, 105);
    Taxes private _fourthSellTaxrates = Taxes(225, 0, 90, 135);
    address public constant burnAddr = address(0x000000000000000000000000000000000000dEaD);
    address payable public marketingAddr = payable(0x7B7B7c8A9cd0922E5894B3d3166f313Cf200A363);
    address payable public marketingInitialAddr = payable(0xdcBBcAA8fD8e610017D6922517Ff3f4ed2611e71);
    address public lotteryAddr = address(0x284c1D4Fb47e6548bde1e63A47198419Ec678449);

    // gets set to true after openTrading is called
    bool public tradingEnabled = false;
    uint256 public launchTime;

    // preventing circular calls of swapping
    bool public inSwap = false;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    // every time the contract has 0.000005% of the total supply in tokens it will swap
    // them to eth in the next sell, keeping the buyback taxes whilst sending the rest to marketing
    uint256 public minimumTokensBeforeSwap = _tTotal.mul(5).div(1000000);

    // every time the contract has 1 eth it will use that for the buyback burn
    uint256 public minimumETHBeforeBurn = 1 ether;

    // the counter for how much of the token balance of the contract is allocated to buyback.
    // get reset every time the contract balance is swapped to eth.
    uint256 public rBuybackBurn;
    
    // initial token allocations
    uint256 private _ownerTokenAmount = _rTotal.div(100).mul(90);
    uint256 private _marketingInitialTokenAmount = _rTotal.div(100).mul(5);
    uint256 private _lotteryTokenAmount = _rTotal.div(100).mul(5);

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

    constructor () {
        
        // 90% of tsupply to owner
        _rOwned[_msgSender()] = _ownerTokenAmount;
        emit Transfer(address(0), _msgSender(), _ownerTokenAmount);
        // 5% of tsupply to marketingInitial
        _rOwned[marketingInitialAddr] = _marketingInitialTokenAmount;
        emit Transfer(address(0), marketingInitialAddr, _marketingInitialTokenAmount);
        // 5% of tsupply to lottery
        _rOwned[lotteryAddr] = _lotteryTokenAmount;
        emit Transfer(address(0), lotteryAddr, _lotteryTokenAmount);

        whitelist[address(this)] = true;
        whitelist[_msgSender()] = true;
        whitelist[lotteryAddr] = true;
        whitelist[marketingInitialAddr] = true;
        whitelist[marketingAddr] = true;
    }
    receive() external payable {}


// ==========  ERC20
    function name() public view returns (string memory) {
        return _name;
    }

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

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

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


// ==========  TRANSFER
    function _transfer(address sender, address recipient, uint256 tAmount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(tAmount > 0, "Transfer amount must be greater than zero");
        require(tradingEnabled || whitelist[sender] || whitelist[recipient], "Trading is not live yet. ");
        require(!blacklist[sender] && !blacklist[recipient], "Address is blacklisted. ");

        Taxes memory taxRates = Taxes(0,0,0,0);

        // getting appropiate tax rates and swapping of tokens/ sending of eth when threshhold passed
        if (!whitelist[sender] && !whitelist[recipient]) {

            // buy tax
            if (sender == liquidityPoolAddr && recipient != uniswapV2RouterAddr) {

                if (launchTime.add(10 minutes) >= block.timestamp) {
                    require(
                        balanceOf(recipient).add(tAmount) <= _holderLimit,
                        "The sale is limited to 1% of LP per address for the first 10 minutes. "
                    );
                    require(
                        tAmount <= _buyLimit,
                        "No buy greater than 0.3% of LP can be made for the first 10 minutes. "
                    );
                    require(
                        holder[recipient].timeTransfer.add(45 seconds) < block.timestamp,
                        "Need to wait 45 seconds until next transfer. "
                    );
                    holder[recipient].timeTransfer = block.timestamp;
                } else {
                    require(
                        holder[sender].timeTransfer.add(30 seconds) < block.timestamp,
                        "Need to wait 30 seconds until next transfer. "
                    );
                    holder[sender].timeTransfer = block.timestamp;
                }

                // set standard buy taxrates
                taxRates = _buyTaxrates;
            }

            // sell tax
            if (recipient == liquidityPoolAddr) {

                if (launchTime.add(10 minutes) >= block.timestamp) {
                    require(
                        holder[sender].timeTransfer.add(45 seconds) < block.timestamp,
                        "Need to wait 45 seconds until next transfer. "
                    );
                    holder[sender].timeTransfer = block.timestamp;
                } else {
                    require(
                        holder[sender].timeTransfer.add(30 seconds) < block.timestamp,
                        "Need to wait 30 seconds until next transfer. "
                    );
                    holder[sender].timeTransfer = block.timestamp;
                }

                // reset number of sells after 24 hours
                if (holder[sender].numSells > 0 && holder[sender].timeSell.add(_resetTime) < block.timestamp) {
                    holder[sender].numSells = 0;
                    holder[sender].timeSell = block.timestamp;
                }

                // set tax according to price impact or number of sells
                uint256 priceImpact = tAmount.mul(100).div(balanceOf(liquidityPoolAddr));

                // default sell taxrate, gets changed if numsells or priceimpact indicates that it should
                taxRates = _firstSellTaxrates;

                if (priceImpact > 1 || holder[sender].numSells == 1) {
                    taxRates = _secondSellTaxrates;
                }
                if (priceImpact > 2 || holder[sender].numSells == 2) {
                    taxRates = _thirdSellTaxrates;
                }
                if (priceImpact > 3 || holder[sender].numSells >= 3) {
                    taxRates = _fourthSellTaxrates;
                }

                // increment number of sells for holder
                if (holder[sender].numSells < 3) {
                    holder[sender].numSells = holder[sender].numSells.add(1);
                }
            }

            // wallet 2 wallet tax (or nonuniswap)
            if (sender != liquidityPoolAddr && recipient != liquidityPoolAddr) {

                if (launchTime.add(10 minutes) >= block.timestamp) {
                    require(
                        holder[sender].timeTransfer.add(45 seconds) < block.timestamp,
                        "Need to wait 45 seconds until next transfer. "
                    );
                    holder[sender].timeTransfer = block.timestamp;
                } else {
                    require(
                        holder[sender].timeTransfer.add(30 seconds) < block.timestamp,
                        "Need to wait 30 seconds until next transfer. "
                    );
                    holder[sender].timeTransfer = block.timestamp;
                }
                // same tax rates as a third sell
                taxRates = _thirdSellTaxrates;
            }

            // if not already swapping then tokens and eth can be swapped now
            if (!inSwap && sender != liquidityPoolAddr) {

                // swap tokens and send some to marketing, whilst keeping the eth for buyback burn
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= minimumTokensBeforeSwap) {
                    if (rBuybackBurn != 0) {
                        uint256 toBeBurned = tokenFromReflection(rBuybackBurn);
                        rBuybackBurn = 0;
                        uint256 toBeSentToMarketing = contractTokenBalance.sub(toBeBurned);
                        swapTokensForETHTo(toBeSentToMarketing, marketingAddr);
                        swapTokensForETHTo(toBeBurned, payable(this));
                    } else {
                        swapTokensForETHTo(contractTokenBalance, marketingAddr);
                    }
                }

                // swap eth for buyback burn if above minimum
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance >= minimumETHBeforeBurn) {
                    swapETHForTokensTo(contractETHBalance, burnAddr);
                }
            }
        }

        // make sure taxes are not applied when swapping internal balances
        if(inSwap) {
            taxRates = Taxes(0,0,0,0);
        }

        // check taxrates and use simpler transfer if appropiate
        if (taxRates.marketing == 0 && taxRates.buybackBurn == 0 && taxRates.redistribution == 0 && taxRates.lottery == 0) {
            _tokenTransferWithoutFees(sender, recipient, tAmount);
        } else {
            _tokenTransferWithFees(sender, recipient, tAmount, taxRates);
        }
    }

    function _tokenTransferWithoutFees(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate = _getRate();
        uint256 rAmount = tAmount.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _tokenTransferWithFees(address sender, address recipient, uint256 tAmount, Taxes memory taxRates) private {

        // translating amount to reflected amount
        uint256 currentRate = _getRate();
        uint256 rAmount = tAmount.mul(currentRate);

        // getting tax values
        Taxes memory tTaxValues = _getTTaxValues(tAmount, taxRates);
        Taxes memory rTaxValues = _getRTaxValues(tTaxValues);

        // removing tax values from the total amount
        uint256 rTransferAmount = _getTransferAmount(rAmount, rTaxValues);
        uint256 tTransferAmount = _getTransferAmount(tAmount, tTaxValues);

        // reflecting sender and recipient balances
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        // reflecting redistribution fees
        _rTotal = _rTotal.sub(rTaxValues.redistribution);

        // reflecting lottery fees
        _rOwned[lotteryAddr] = _rOwned[lotteryAddr].add(rTaxValues.lottery);

        // reflecting buybackburn and marketing fees
        _rOwned[address(this)] = _rOwned[address(this)].add(rTaxValues.marketing).add(rTaxValues.buybackBurn);
        rBuybackBurn = rBuybackBurn.add(rTaxValues.buybackBurn);

        // standard erc20 event
        emit Transfer(sender, recipient, tTransferAmount);
    }



// ==========  SWAP
    function swapTokensForETHTo(uint256 tokenAmount, address payable recipient) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            recipient,
            block.timestamp.add(300)
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    function swapETHForTokensTo(uint256 amount, address recipient) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            recipient,
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
    }


// ==========  REFLECT
    function _getRate() private view returns(uint256) {
        return _rTotal.div(_tTotal);
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less or equal than total reflections");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function _getTTaxValues(uint256 amount, Taxes memory taxRates) private pure returns (Taxes memory) {
        Taxes memory taxValues;
        taxValues.redistribution = amount.div(1000).mul(taxRates.redistribution);
        taxValues.buybackBurn = amount.div(1000).mul(taxRates.buybackBurn);
        taxValues.marketing = amount.div(1000).mul(taxRates.marketing);
        taxValues.lottery = amount.div(1000).mul(taxRates.lottery);
        return taxValues;
    }

    function _getRTaxValues(Taxes memory tTaxValues) private view returns (Taxes memory) {
        Taxes memory taxValues;
        uint256 currentRate = _getRate();
        taxValues.redistribution = tTaxValues.redistribution.mul(currentRate);
        taxValues.buybackBurn = tTaxValues.buybackBurn.mul(currentRate);
        taxValues.marketing = tTaxValues.marketing.mul(currentRate);
        taxValues.lottery = tTaxValues.lottery.mul(currentRate);
        return taxValues;
    }

    function _getTransferAmount(uint256 amount, Taxes memory taxValues) private pure returns (uint256) {
        return amount.sub(taxValues.marketing).sub(taxValues.lottery).sub(taxValues.buybackBurn).sub(taxValues.redistribution);
    }


// ==========  ADMIN
    function openTrading() external onlyOwner() {
        require(!tradingEnabled, "Trading is already enabled. ");
        tradingEnabled = true;
        launchTime = block.timestamp;
    }

    function manualTaxConv() external onlyOwner() returns (bool) {
        // swap tokens and send some to marketing, whilst keeping the eth for buyback burn
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (rBuybackBurn != 0) {
                uint256 toBeBurned = tokenFromReflection(rBuybackBurn);
                rBuybackBurn = 0;
                uint256 toBeSentToMarketing = contractTokenBalance.sub(toBeBurned);
                swapTokensForETHTo(toBeSentToMarketing, marketingAddr);
                swapTokensForETHTo(toBeBurned, payable(this));
            } else {
                swapTokensForETHTo(contractTokenBalance, marketingAddr);
            }
        }
        return true;
    }

    function manualBuybackBurn() external onlyOwner() returns (bool) {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            swapETHForTokensTo(contractETHBalance, burnAddr);
        }
        return true;
    }

    function setWhitelist(address addr, bool onoff) external onlyOwner() {
        whitelist[addr] = onoff;
    }
    
    function setBlacklist(address addr, bool onoff) external onlyOwner() {
        blacklist[addr] = onoff;
    }
    
    function setMarketingWallet(address payable marketing) external onlyOwner() {
        marketingAddr = marketing;
    }

    function setMarketingLottery(address lottery) external onlyOwner() {
        lotteryAddr = lottery;
    }

    function restoreNameAndSymbol() external onlyOwner() {
        _name = "APE ASTAX";
        _symbol = "ASTAX \xF0\x9F\xA6\x8D";
    }

    function setMinimumTokensBeforeSwap(uint256 val) external onlyOwner() {
        minimumTokensBeforeSwap = val;
    }

    function setMinimumETHBeforeBurn(uint256 val) external onlyOwner() {
        minimumETHBeforeBurn = val;
    }

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

}


// ==========  LIBS
library UniswapV2Library {
    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint160(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            )))));
    }
}

interface IUniswapV2Router02  {
    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;
    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);
}

File 2 of 6 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 6 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 4 of 6 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 5 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 6 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holder","outputs":[{"internalType":"uint256","name":"timeTransfer","type":"uint256"},{"internalType":"uint256","name":"numSells","type":"uint256"},{"internalType":"uint256","name":"timeSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","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":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuybackBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualTaxConv","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingInitialAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumETHBeforeBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rBuybackBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreNameAndSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lottery","type":"address"}],"name":"setMarketingLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMinimumETHBeforeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2FactoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062001119565b64e8d4a5100062000026919062001256565b600019620000359190620013af565b600019620000449190620012b7565b6003556040518060400160405280600381526020017f4142430000000000000000000000000000000000000000000000000000000000815250600490805190602001906200009492919062000db9565b506040518060400160405280600381526020017f414243000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000e292919062000db9565b50737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000207735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ba57600080fd5b505afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000e80565b3062000bcd60201b62001c201760201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180608001604052806032815260200160198152602001601981526020016000815250600b6000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280603281526020016000815260200160148152602001601e815250600f6000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280607d81526020016000815260200160328152602001604b8152506013600082015181600001556020820151816001015560408201518160020155606082015181600301555050604051806080016040528060af8152602001600081526020016046815260200160698152506017600082015181600001556020820151816001015560408201518160020155606082015181600301555050604051806080016040528060e1815260200160008152602001605a81526020016087815250601b600082015181600001556020820151816001015560408201518160020155606082015181600301555050737b7b7c8a9cd0922e5894b3d3166f313cf200a363601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dcbbcaa8fd8e610017d6922517ff3f4ed2611e71602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073284c1d4fb47e6548bde1e63a47198419ec678449602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602160146101000a81548160ff0219169083151502179055506000602360006101000a81548160ff02191690831515021790555062000569620f42406200055560056009600a6200052f919062001119565b64e8d4a5100062000541919062001256565b62000c4b60201b62001c921790919060201c565b62000c6360201b62001ca81790919060201c565b602455670de0b6b3a7640000602555620005af605a6200059b606460035462000c6360201b62001ca81790919060201c565b62000c4b60201b62001c921790919060201c565b602755620005e96005620005d5606460035462000c6360201b62001ca81790919060201c565b62000c4b60201b62001c921790919060201c565b6028556200062360056200060f606460035462000c6360201b62001ca81790919060201c565b62000c4b60201b62001c921790919060201c565b6029553480156200063357600080fd5b5060006200064662000c7b60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060275460016000620006fb62000c7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506200074962000c7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602754604051620007aa91906200104d565b60405180910390a360285460016000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6028546040516200089e91906200104d565b60405180910390a360295460016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6029546040516200099291906200104d565b60405180910390a36001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600062000a0862000c7b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062001572565b600080600062000be4858562000c8360201b60201c565b9150915085828260405160200162000bfe92919062000f8f565b6040516020818303038152906040528051906020012060405160200162000c2792919062000fbf565b6040516020818303038152906040528051906020012060001c925050509392505050565b6000818362000c5b919062001256565b905092915050565b6000818362000c73919062001086565b905092915050565b600033905090565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000cf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cef9062001009565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161062000d3457828462000d37565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000da9906200102b565b60405180910390fd5b9250929050565b82805462000dc79062001347565b90600052602060002090601f01602090048101928262000deb576000855562000e37565b82601f1062000e0657805160ff191683800117855562000e37565b8280016001018555821562000e37579182015b8281111562000e3657825182559160200191906001019062000e19565b5b50905062000e46919062000e4a565b5090565b5b8082111562000e6557600081600090555060010162000e4b565b5090565b60008151905062000e7a8162001558565b92915050565b60006020828403121562000e9357600080fd5b600062000ea38482850162000e69565b91505092915050565b62000ec162000ebb82620012f2565b6200137d565b82525050565b62000edc62000ed68262001306565b62001391565b82525050565b600062000ef16025836200106a565b915062000efe826200148e565b604082019050919050565b600062000f186020836200107b565b915062000f2582620014dd565b602082019050919050565b600062000f3f6001836200107b565b915062000f4c8262001506565b600182019050919050565b600062000f66601e836200106a565b915062000f73826200152f565b602082019050919050565b62000f898162001330565b82525050565b600062000f9d828562000eac565b60148201915062000faf828462000eac565b6014820191508190509392505050565b600062000fcc8262000f30565b915062000fda828562000eac565b60148201915062000fec828462000ec7565b60208201915062000ffd8262000f09565b91508190509392505050565b60006020820190508181036000830152620010248162000ee2565b9050919050565b60006020820190508181036000830152620010468162000f57565b9050919050565b600060208201905062001064600083018462000f7e565b92915050565b600082825260208201905092915050565b600081905092915050565b6000620010938262001330565b9150620010a08362001330565b925082620010b357620010b262001416565b5b828204905092915050565b6000808291508390505b60018511156200111057808604811115620010e857620010e7620013e7565b5b6001851615620010f85780820291505b8081029050620011088562001481565b9450620010c8565b94509492505050565b6000620011268262001330565b915062001133836200133a565b9250620011627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200116a565b905092915050565b6000826200117c57600190506200124f565b816200118c57600090506200124f565b8160018114620011a55760028114620011b057620011e6565b60019150506200124f565b60ff841115620011c557620011c4620013e7565b5b8360020a915084821115620011df57620011de620013e7565b5b506200124f565b5060208310610133831016604e8410600b8410161715620012205782820a9050838111156200121a5762001219620013e7565b5b6200124f565b6200122f8484846001620010be565b92509050818404811115620012495762001248620013e7565b5b81810290505b9392505050565b6000620012638262001330565b9150620012708362001330565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012ac57620012ab620013e7565b5b828202905092915050565b6000620012c48262001330565b9150620012d18362001330565b925082821015620012e757620012e6620013e7565b5b828203905092915050565b6000620012ff8262001310565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200136057607f821691505b6020821081141562001377576200137662001445565b5b50919050565b60006200138a826200139b565b9050919050565b6000819050919050565b6000620013a88262001474565b9050919050565b6000620013bc8262001330565b9150620013c98362001330565b925082620013dc57620013db62001416565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160601b9050919050565b60008160011c9050919050565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b6200156381620012f2565b81146200156f57600080fd5b50565b61571b80620015826000396000f3fe6080604052600436106102605760003560e01c806381f1814311610144578063c9567bf9116100b6578063d85ff2ff1161007a578063d85ff2ff14610901578063dd62ed3e1461092c578063ee9e20c614610969578063f2fde38b14610992578063f9f92be4146109bb578063ff142f97146109f857610267565b8063c9567bf91461083e578063cea2085114610855578063d246d41114610880578063d2d7ad83146108ab578063d8306786146108d657610267565b8063a091273b11610108578063a091273b14610730578063a457c2d71461075b578063a9059cbb14610798578063aee50b1e146107d5578063bad291ab146107fe578063c8078c4e1461082757610267565b806381f181431461064757806381f651aa146106725780638da5cb5b1461069d57806395d89b41146106c85780639b19251a146106f357610267565b80632f5b1564116101dd5780634ada218b116101a15780634ada218b1461054b57806353d6fd59146105765780635d098b381461059f57806370a08231146105c8578063715018a614610605578063790ca4131461061c57610267565b80632f5b156414610462578063313ce5671461048d57806339509351146104b85780633ff42b92146104f5578063497f3eeb1461052057610267565b806318160ddd1161022457806318160ddd146103535780631eb7caba1461037e578063216fb989146103bd57806323b872dd146103e85780632d8381191461042557610267565b806306fdde031461026c578063095ea7b31461029757806312065fe0146102d4578063153b0d1e146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a23565b60405161028e91906148d6565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b9919061434e565b610ab5565b6040516102cb9190614854565b60405180910390f35b3480156102e057600080fd5b506102e9610ad3565b6040516102f69190614b18565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190614312565b610adb565b005b34801561033457600080fd5b5061033d610bb2565b60405161034a919061486f565b60405180910390f35b34801561035f57600080fd5b50610368610bd8565b6040516103759190614b18565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061420c565b610bfd565b6040516103b493929190614bbd565b60405180910390f35b3480156103c957600080fd5b506103d2610c27565b6040516103df9190614854565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142c3565b610cc8565b60405161041c9190614854565b60405180910390f35b34801561043157600080fd5b5061044c6004803603810190610447919061438a565b610da1565b6040516104599190614b18565b60405180910390f35b34801561046e57600080fd5b50610477610e0f565b604051610484919061481e565b60405180910390f35b34801561049957600080fd5b506104a2610e35565b6040516104af9190614bf4565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da919061434e565b610e3e565b6040516104ec9190614854565b60405180910390f35b34801561050157600080fd5b5061050a610ef1565b6040516105179190614839565b60405180910390f35b34801561052c57600080fd5b50610535610f17565b6040516105429190614839565b60405180910390f35b34801561055757600080fd5b50610560610f3d565b60405161056d9190614854565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614312565b610f50565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061425e565b611027565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061420c565b6110e7565b6040516105fc9190614b18565b60405180910390f35b34801561061157600080fd5b5061061a611138565b005b34801561062857600080fd5b50610631611272565b60405161063e9190614b18565b60405180910390f35b34801561065357600080fd5b5061065c611278565b6040516106699190614854565b60405180910390f35b34801561067e57600080fd5b506106876113b7565b604051610694919061481e565b60405180910390f35b3480156106a957600080fd5b506106b26113dd565b6040516106bf919061481e565b60405180910390f35b3480156106d457600080fd5b506106dd611406565b6040516106ea91906148d6565b60405180910390f35b3480156106ff57600080fd5b5061071a6004803603810190610715919061420c565b611498565b6040516107279190614854565b60405180910390f35b34801561073c57600080fd5b506107456114b8565b6040516107529190614b18565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061434e565b6114be565b60405161078f9190614854565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba919061434e565b61158b565b6040516107cc9190614854565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f7919061438a565b6115a9565b005b34801561080a57600080fd5b506108256004803603810190610820919061420c565b61162f565b005b34801561083357600080fd5b5061083c6116ef565b005b34801561084a57600080fd5b50610853611805565b005b34801561086157600080fd5b5061086a6118f5565b604051610877919061481e565b60405180910390f35b34801561088c57600080fd5b5061089561190d565b6040516108a2919061481e565b60405180910390f35b3480156108b757600080fd5b506108c0611913565b6040516108cd9190614b18565b60405180910390f35b3480156108e257600080fd5b506108eb611919565b6040516108f89190614854565b60405180910390f35b34801561090d57600080fd5b5061091661192c565b6040516109239190614b18565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614287565b611932565b6040516109609190614b18565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061438a565b6119b9565b005b34801561099e57600080fd5b506109b960048036038101906109b4919061420c565b611a3f565b005b3480156109c757600080fd5b506109e260048036038101906109dd919061420c565b611be8565b6040516109ef9190614854565b60405180910390f35b348015610a0457600080fd5b50610a0d611c08565b604051610a1a919061481e565b60405180910390f35b606060048054610a3290615005565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e90615005565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac9610ac2611cbe565b8484611cc6565b6001905092915050565b600047905090565b610ae3611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610b016113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906149f8565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a610be89190614d49565b64e8d4a51000610bf89190614e67565b905090565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b6000610c31611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610c4f6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c906149f8565b60405180910390fd5b60004790506000811115610cc057610cbf8161dead611e91565b5b600191505090565b6000610cd58484846121ab565b610d9684610ce1611cbe565b610d918560405180606001604052806028815260200161569960289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d47611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b600190509392505050565b6000600354821115610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614978565b60405180910390fd5b6000610df26134a0565b9050610e078184611ca890919063ffffffff16565b915050919050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b6000610ee7610e4b611cbe565b84610ee28560026000610e5c611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b611cc6565b6001905092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602160149054906101000a900460ff1681565b610f58611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610f766113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906149f8565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61102f611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661104d6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906149f8565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611131600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da1565b9050919050565b611140611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661115e6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60225481565b6000611282611cbe565b73ffffffffffffffffffffffffffffffffffffffff166112a06113dd565b73ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906149f8565b60405180910390fd5b6000611301306110e7565b905060008111156113af57600060265414611381576000611323602654610da1565b90506000602681905550600061134282846134ef90919063ffffffff16565b905061137081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61137a8230613505565b50506113ae565b6113ad81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600191505090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461141590615005565b80601f016020809104026020016040519081016040528092919081815260200182805461144190615005565b801561148e5780601f106114635761010080835404028352916020019161148e565b820191906000526020600020905b81548152906001019060200180831161147157829003601f168201915b5050505050905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60255481565b60006115816114cb611cbe565b8461157c856040518060600160405280602581526020016156c160259139600260006114f5611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b6001905092915050565b600061159f611598611cbe565b84846121ab565b6001905092915050565b6115b1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166115cf6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c906149f8565b60405180910390fd5b8060248190555050565b611637611cbe565b73ffffffffffffffffffffffffffffffffffffffff166116556113dd565b73ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906149f8565b60405180910390fd5b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116f7611cbe565b73ffffffffffffffffffffffffffffffffffffffff166117156113dd565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611762906149f8565b60405180910390fd5b6040518060400160405280600981526020017f4150452041535441580000000000000000000000000000000000000000000000815250600490805190602001906117b69291906140d8565b506040518060400160405280600a81526020017f415354415820f09fa68d00000000000000000000000000000000000000000000815250600590805190602001906118029291906140d8565b50565b61180d611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661182b6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611878906149f8565b60405180910390fd5b602160149054906101000a900460ff16156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c8906148f8565b60405180910390fd5b6001602160146101000a81548160ff02191690831515021790555042602281905550565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b61dead81565b60245481565b602360009054906101000a900460ff1681565b60265481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166119df6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c906149f8565b60405180910390fd5b8060258190555050565b611a47611cbe565b73ffffffffffffffffffffffffffffffffffffffff16611a656113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab2906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614938565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6000806000611c2f858561383f565b91509150858282604051602001611c479291906147b0565b60405160208183030381529060405280519060200120604051602001611c6e9291906147dc565b6040516020818303038152906040528051906020012060001c925050509392505050565b60008183611ca09190614e67565b905092915050565b60008183611cb69190614cc5565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d90614a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614958565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e849190614b18565b60405180910390a3505050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611f1d5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8857600080fd5b505afa158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190614235565b81600081518110611ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061206f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95846000848661210161012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b8152600401612120949392919061488a565b6000604051808303818588803b15801561213957600080fd5b505af115801561214d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248382604051612183929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290614a78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290614918565b60405180910390fd5b600081116122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c590614a18565b60405180910390fd5b602160149054906101000a900460ff16806123325750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123865750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc906149d8565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124695750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90614ab8565b60405180910390fd5b6000604051806080016040528060008152602001600081526020016000815260200160008152509050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125755750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ae57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156126175750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561290c57426126346102586022546134d990919063ffffffff16565b106127f5576009600a6126479190614d49565b640218711a006126579190614e67565b61267283612664866110e7565b6134d990919063ffffffff16565b11156126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614af8565b60405180910390fd5b6009600a6126c19190614d49565b63a0eebb006126d09190614e67565b821115612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906149b8565b60405180910390fd5b42612769602d600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614a38565b60405180910390fd5b42600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506128d4565b4261284c601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b1061288c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288390614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b600b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9e574261297a6102586022546134d990919063ffffffff16565b10612a6257426129d6602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550612b41565b42612ab9601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154118015612be9575042612be762015180600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546134d990919063ffffffff16565b105b15612c7e576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505b6000612cd0612cae600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110e7565b612cc2606486611c9290919063ffffffff16565b611ca890919063ffffffff16565b9050600f60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091506001811180612d5a57506001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612d9757601360405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6002811180612de857506002600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612e2557601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003811180612e7757506003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b15612eb457601b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015612f9c57612f556001600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546134d990919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561304a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561326657426130676102586022546134d990919063ffffffff16565b1061314f57426130c3602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10613103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fa90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061322e565b426131a6601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b602360009054906101000a900460ff161580156132d15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156133ad5760006132e1306110e7565b9050602454811061338f57600060265414613361576000613303602654610da1565b90506000602681905550600061332282846134ef90919063ffffffff16565b905061335081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61335a8230613505565b505061338e565b61338d81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600047905060255481106133aa576133a98161dead611e91565b5b50505b5b602360009054906101000a900460ff16156133eb576040518060800160405280600081526020016000815260200160008152602001600081525090505b60008160000151148015613403575060008160600151145b8015613413575060008160200151145b8015613423575060008160400151145b156134385761343384848461396d565b613445565b61344484848484613b26565b5b50505050565b6000838311158290613493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348a91906148d6565b60405180910390fd5b5082840390509392505050565b60006134d46009600a6134b39190614d49565b64e8d4a510006134c39190614e67565b600354611ca890919063ffffffff16565b905090565b600081836134e79190614c6f565b905092915050565b600081836134fd9190614ec1565b905092915050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613563577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156135915781602001602082028036833780820191505090505b50905030816000815181106135cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561367157600080fd5b505afa158015613685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a99190614235565b816001815181106136e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061373c30737a250d5630b4cf539739df2c5dacb4c659f2488d85611cc6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947846000848661379461012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b81526004016137b4959493929190614b63565b600060405180830381600087803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613817929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a890614998565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106138eb5782846138ee565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395d90614ad8565b60405180910390fd5b9250929050565b60006139776134a0565b9050600061398e8284611c9290919063ffffffff16565b90506139e281600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7781600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b179190614b18565b60405180910390a35050505050565b6000613b306134a0565b90506000613b478285611c9290919063ffffffff16565b90506000613b558585613ee5565b90506000613b6282613fcf565b90506000613b708483614075565b90506000613b7e8885614075565b9050613bd285600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6782600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cc383602001516003546134ef90919063ffffffff16565b600381905550613d41836040015160016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b60016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e128360600151613e048560000151600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b6134d990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6e83606001516026546134d990919063ffffffff16565b6026819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ed19190614b18565b60405180910390a350505050505050505050565b613eed61415e565b613ef561415e565b613f208360200151613f126103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816020018181525050613f548360600151613f466103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816060018181525050613f888360000151613f7a6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816000018181525050613fbc8360400151613fae6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b8160400181815250508091505092915050565b613fd761415e565b613fdf61415e565b6000613fe96134a0565b9050614002818560200151611c9290919063ffffffff16565b826020018181525050614022818560600151611c9290919063ffffffff16565b826060018181525050614042818560000151611c9290919063ffffffff16565b826000018181525050614062818560400151611c9290919063ffffffff16565b8260400181815250508192505050919050565b60006140d082602001516140c284606001516140b486604001516140a688600001518a6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b905092915050565b8280546140e490615005565b90600052602060002090601f016020900481019282614106576000855561414d565b82601f1061411f57805160ff191683800117855561414d565b8280016001018555821561414d579182015b8281111561414c578251825591602001919060010190614131565b5b50905061415a9190614186565b5090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b5b8082111561419f576000816000905550600101614187565b5090565b6000813590506141b28161563c565b92915050565b6000815190506141c78161563c565b92915050565b6000813590506141dc81615653565b92915050565b6000813590506141f18161566a565b92915050565b60008135905061420681615681565b92915050565b60006020828403121561421e57600080fd5b600061422c848285016141a3565b91505092915050565b60006020828403121561424757600080fd5b6000614255848285016141b8565b91505092915050565b60006020828403121561427057600080fd5b600061427e848285016141cd565b91505092915050565b6000806040838503121561429a57600080fd5b60006142a8858286016141a3565b92505060206142b9858286016141a3565b9150509250929050565b6000806000606084860312156142d857600080fd5b60006142e6868287016141a3565b93505060206142f7868287016141a3565b9250506040614308868287016141f7565b9150509250925092565b6000806040838503121561432557600080fd5b6000614333858286016141a3565b9250506020614344858286016141e2565b9150509250929050565b6000806040838503121561436157600080fd5b600061436f858286016141a3565b9250506020614380858286016141f7565b9150509250929050565b60006020828403121561439c57600080fd5b60006143aa848285016141f7565b91505092915050565b60006143bf83836143e9565b60208301905092915050565b6143d481614f66565b82525050565b6143e381614f07565b82525050565b6143f281614ef5565b82525050565b61440181614ef5565b82525050565b61441861441382614ef5565b615037565b82525050565b600061442982614c1f565b6144338185614c42565b935061443e83614c0f565b8060005b8381101561446f57815161445688826143b3565b975061446183614c35565b925050600181019050614442565b5085935050505092915050565b61448581614f19565b82525050565b61449c61449782614f25565b615049565b82525050565b6144ab81614f78565b82525050565b6144ba81614f9c565b82525050565b60006144cb82614c2a565b6144d58185614c53565b93506144e5818560208601614fd2565b6144ee816150f2565b840191505092915050565b6000614506601c83614c53565b91506145118261511d565b602082019050919050565b6000614529602383614c53565b915061453482615146565b604082019050919050565b600061454c602683614c53565b915061455782615195565b604082019050919050565b600061456f602283614c53565b915061457a826151e4565b604082019050919050565b6000614592603383614c53565b915061459d82615233565b604082019050919050565b60006145b5602583614c53565b91506145c082615282565b604082019050919050565b60006145d8604583614c53565b91506145e3826152d1565b606082019050919050565b60006145fb602083614c64565b915061460682615346565b602082019050919050565b600061461e601983614c53565b91506146298261536f565b602082019050919050565b6000614641600183614c64565b915061464c82615398565b600182019050919050565b6000614664602083614c53565b915061466f826153c1565b602082019050919050565b6000614687602983614c53565b9150614692826153ea565b604082019050919050565b60006146aa602d83614c53565b91506146b582615439565b604082019050919050565b60006146cd602d83614c53565b91506146d882615488565b604082019050919050565b60006146f0602583614c53565b91506146fb826154d7565b604082019050919050565b6000614713602483614c53565b915061471e82615526565b604082019050919050565b6000614736601883614c53565b915061474182615575565b602082019050919050565b6000614759601e83614c53565b91506147648261559e565b602082019050919050565b600061477c604683614c53565b9150614787826155c7565b606082019050919050565b61479b81614f4f565b82525050565b6147aa81614f59565b82525050565b60006147bc8285614407565b6014820191506147cc8284614407565b6014820191508190509392505050565b60006147e782614634565b91506147f38285614407565b601482019150614803828461448b565b602082019150614812826145ee565b91508190509392505050565b600060208201905061483360008301846143f8565b92915050565b600060208201905061484e60008301846143da565b92915050565b6000602082019050614869600083018461447c565b92915050565b600060208201905061488460008301846144a2565b92915050565b600060808201905061489f60008301876144b1565b81810360208301526148b1818661441e565b90506148c060408301856143f8565b6148cd6060830184614792565b95945050505050565b600060208201905081810360008301526148f081846144c0565b905092915050565b60006020820190508181036000830152614911816144f9565b9050919050565b600060208201905081810360008301526149318161451c565b9050919050565b600060208201905081810360008301526149518161453f565b9050919050565b6000602082019050818103600083015261497181614562565b9050919050565b6000602082019050818103600083015261499181614585565b9050919050565b600060208201905081810360008301526149b1816145a8565b9050919050565b600060208201905081810360008301526149d1816145cb565b9050919050565b600060208201905081810360008301526149f181614611565b9050919050565b60006020820190508181036000830152614a1181614657565b9050919050565b60006020820190508181036000830152614a318161467a565b9050919050565b60006020820190508181036000830152614a518161469d565b9050919050565b60006020820190508181036000830152614a71816146c0565b9050919050565b60006020820190508181036000830152614a91816146e3565b9050919050565b60006020820190508181036000830152614ab181614706565b9050919050565b60006020820190508181036000830152614ad181614729565b9050919050565b60006020820190508181036000830152614af18161474c565b9050919050565b60006020820190508181036000830152614b118161476f565b9050919050565b6000602082019050614b2d6000830184614792565b92915050565b6000604082019050614b486000830185614792565b8181036020830152614b5a818461441e565b90509392505050565b600060a082019050614b786000830188614792565b614b8560208301876144b1565b8181036040830152614b97818661441e565b9050614ba660608301856143cb565b614bb36080830184614792565b9695505050505050565b6000606082019050614bd26000830186614792565b614bdf6020830185614792565b614bec6040830184614792565b949350505050565b6000602082019050614c0960008301846147a1565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c7a82614f4f565b9150614c8583614f4f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cba57614cb9615065565b5b828201905092915050565b6000614cd082614f4f565b9150614cdb83614f4f565b925082614ceb57614cea615094565b5b828204905092915050565b6000808291508390505b6001851115614d4057808604811115614d1c57614d1b615065565b5b6001851615614d2b5780820291505b8081029050614d3985615110565b9450614d00565b94509492505050565b6000614d5482614f4f565b9150614d5f83614f59565b9250614d8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614d94565b905092915050565b600082614da45760019050614e60565b81614db25760009050614e60565b8160018114614dc85760028114614dd257614e01565b6001915050614e60565b60ff841115614de457614de3615065565b5b8360020a915084821115614dfb57614dfa615065565b5b50614e60565b5060208310610133831016604e8410600b8410161715614e365782820a905083811115614e3157614e30615065565b5b614e60565b614e438484846001614cf6565b92509050818404811115614e5a57614e59615065565b5b81810290505b9392505050565b6000614e7282614f4f565b9150614e7d83614f4f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb657614eb5615065565b5b828202905092915050565b6000614ecc82614f4f565b9150614ed783614f4f565b925082821015614eea57614ee9615065565b5b828203905092915050565b6000614f0082614f2f565b9050919050565b6000614f1282614f2f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f7182614fae565b9050919050565b6000614f8382614f8a565b9050919050565b6000614f9582614f2f565b9050919050565b6000614fa782614f4f565b9050919050565b6000614fb982614fc0565b9050919050565b6000614fcb82614f2f565b9050919050565b60005b83811015614ff0578082015181840152602081019050614fd5565b83811115614fff576000848401525b50505050565b6000600282049050600182168061501d57607f821691505b60208210811415615031576150306150c3565b5b50919050565b600061504282615053565b9050919050565b6000819050919050565b600061505e82615103565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160011c9050919050565b7f54726164696e6720697320616c726561647920656e61626c65642e2000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206275792067726561746572207468616e20302e3325206f66204c50206360008201527f616e206265206d61646520666f7220746865206669727374203130206d696e7560208201527f7465732e20000000000000000000000000000000000000000000000000000000604082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f54726164696e67206973206e6f74206c697665207965742e2000000000000000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203435207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203330207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320697320626c61636b6c69737465642e200000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b7f5468652073616c65206973206c696d6974656420746f203125206f66204c502060008201527f706572206164647265737320666f7220746865206669727374203130206d696e60208201527f757465732e200000000000000000000000000000000000000000000000000000604082015250565b61564581614ef5565b811461565057600080fd5b50565b61565c81614f07565b811461566757600080fd5b50565b61567381614f19565b811461567e57600080fd5b50565b61568a81614f4f565b811461569557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b5478bf4b5d8aadc0a167c6e0ea3cbaf584742baef743a8957f31ace944f27064736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806381f1814311610144578063c9567bf9116100b6578063d85ff2ff1161007a578063d85ff2ff14610901578063dd62ed3e1461092c578063ee9e20c614610969578063f2fde38b14610992578063f9f92be4146109bb578063ff142f97146109f857610267565b8063c9567bf91461083e578063cea2085114610855578063d246d41114610880578063d2d7ad83146108ab578063d8306786146108d657610267565b8063a091273b11610108578063a091273b14610730578063a457c2d71461075b578063a9059cbb14610798578063aee50b1e146107d5578063bad291ab146107fe578063c8078c4e1461082757610267565b806381f181431461064757806381f651aa146106725780638da5cb5b1461069d57806395d89b41146106c85780639b19251a146106f357610267565b80632f5b1564116101dd5780634ada218b116101a15780634ada218b1461054b57806353d6fd59146105765780635d098b381461059f57806370a08231146105c8578063715018a614610605578063790ca4131461061c57610267565b80632f5b156414610462578063313ce5671461048d57806339509351146104b85780633ff42b92146104f5578063497f3eeb1461052057610267565b806318160ddd1161022457806318160ddd146103535780631eb7caba1461037e578063216fb989146103bd57806323b872dd146103e85780632d8381191461042557610267565b806306fdde031461026c578063095ea7b31461029757806312065fe0146102d4578063153b0d1e146102ff5780631694505e1461032857610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a23565b60405161028e91906148d6565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b9919061434e565b610ab5565b6040516102cb9190614854565b60405180910390f35b3480156102e057600080fd5b506102e9610ad3565b6040516102f69190614b18565b60405180910390f35b34801561030b57600080fd5b5061032660048036038101906103219190614312565b610adb565b005b34801561033457600080fd5b5061033d610bb2565b60405161034a919061486f565b60405180910390f35b34801561035f57600080fd5b50610368610bd8565b6040516103759190614b18565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061420c565b610bfd565b6040516103b493929190614bbd565b60405180910390f35b3480156103c957600080fd5b506103d2610c27565b6040516103df9190614854565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142c3565b610cc8565b60405161041c9190614854565b60405180910390f35b34801561043157600080fd5b5061044c6004803603810190610447919061438a565b610da1565b6040516104599190614b18565b60405180910390f35b34801561046e57600080fd5b50610477610e0f565b604051610484919061481e565b60405180910390f35b34801561049957600080fd5b506104a2610e35565b6040516104af9190614bf4565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da919061434e565b610e3e565b6040516104ec9190614854565b60405180910390f35b34801561050157600080fd5b5061050a610ef1565b6040516105179190614839565b60405180910390f35b34801561052c57600080fd5b50610535610f17565b6040516105429190614839565b60405180910390f35b34801561055757600080fd5b50610560610f3d565b60405161056d9190614854565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190614312565b610f50565b005b3480156105ab57600080fd5b506105c660048036038101906105c1919061425e565b611027565b005b3480156105d457600080fd5b506105ef60048036038101906105ea919061420c565b6110e7565b6040516105fc9190614b18565b60405180910390f35b34801561061157600080fd5b5061061a611138565b005b34801561062857600080fd5b50610631611272565b60405161063e9190614b18565b60405180910390f35b34801561065357600080fd5b5061065c611278565b6040516106699190614854565b60405180910390f35b34801561067e57600080fd5b506106876113b7565b604051610694919061481e565b60405180910390f35b3480156106a957600080fd5b506106b26113dd565b6040516106bf919061481e565b60405180910390f35b3480156106d457600080fd5b506106dd611406565b6040516106ea91906148d6565b60405180910390f35b3480156106ff57600080fd5b5061071a6004803603810190610715919061420c565b611498565b6040516107279190614854565b60405180910390f35b34801561073c57600080fd5b506107456114b8565b6040516107529190614b18565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061434e565b6114be565b60405161078f9190614854565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba919061434e565b61158b565b6040516107cc9190614854565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f7919061438a565b6115a9565b005b34801561080a57600080fd5b506108256004803603810190610820919061420c565b61162f565b005b34801561083357600080fd5b5061083c6116ef565b005b34801561084a57600080fd5b50610853611805565b005b34801561086157600080fd5b5061086a6118f5565b604051610877919061481e565b60405180910390f35b34801561088c57600080fd5b5061089561190d565b6040516108a2919061481e565b60405180910390f35b3480156108b757600080fd5b506108c0611913565b6040516108cd9190614b18565b60405180910390f35b3480156108e257600080fd5b506108eb611919565b6040516108f89190614854565b60405180910390f35b34801561090d57600080fd5b5061091661192c565b6040516109239190614b18565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190614287565b611932565b6040516109609190614b18565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061438a565b6119b9565b005b34801561099e57600080fd5b506109b960048036038101906109b4919061420c565b611a3f565b005b3480156109c757600080fd5b506109e260048036038101906109dd919061420c565b611be8565b6040516109ef9190614854565b60405180910390f35b348015610a0457600080fd5b50610a0d611c08565b604051610a1a919061481e565b60405180910390f35b606060048054610a3290615005565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e90615005565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac9610ac2611cbe565b8484611cc6565b6001905092915050565b600047905090565b610ae3611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610b016113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e906149f8565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a610be89190614d49565b64e8d4a51000610bf89190614e67565b905090565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b6000610c31611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610c4f6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9c906149f8565b60405180910390fd5b60004790506000811115610cc057610cbf8161dead611e91565b5b600191505090565b6000610cd58484846121ab565b610d9684610ce1611cbe565b610d918560405180606001604052806028815260200161569960289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d47611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b600190509392505050565b6000600354821115610de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddf90614978565b60405180910390fd5b6000610df26134a0565b9050610e078184611ca890919063ffffffff16565b915050919050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b6000610ee7610e4b611cbe565b84610ee28560026000610e5c611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b611cc6565b6001905092915050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602160149054906101000a900460ff1681565b610f58611cbe565b73ffffffffffffffffffffffffffffffffffffffff16610f766113dd565b73ffffffffffffffffffffffffffffffffffffffff1614610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906149f8565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61102f611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661104d6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906149f8565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611131600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610da1565b9050919050565b611140611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661115e6113dd565b73ffffffffffffffffffffffffffffffffffffffff16146111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60225481565b6000611282611cbe565b73ffffffffffffffffffffffffffffffffffffffff166112a06113dd565b73ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906149f8565b60405180910390fd5b6000611301306110e7565b905060008111156113af57600060265414611381576000611323602654610da1565b90506000602681905550600061134282846134ef90919063ffffffff16565b905061137081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61137a8230613505565b50506113ae565b6113ad81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600191505090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461141590615005565b80601f016020809104026020016040519081016040528092919081815260200182805461144190615005565b801561148e5780601f106114635761010080835404028352916020019161148e565b820191906000526020600020905b81548152906001019060200180831161147157829003601f168201915b5050505050905090565b60096020528060005260406000206000915054906101000a900460ff1681565b60255481565b60006115816114cb611cbe565b8461157c856040518060600160405280602581526020016156c160259139600260006114f5611cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461344b9092919063ffffffff16565b611cc6565b6001905092915050565b600061159f611598611cbe565b84846121ab565b6001905092915050565b6115b1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166115cf6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c906149f8565b60405180910390fd5b8060248190555050565b611637611cbe565b73ffffffffffffffffffffffffffffffffffffffff166116556113dd565b73ffffffffffffffffffffffffffffffffffffffff16146116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a2906149f8565b60405180910390fd5b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116f7611cbe565b73ffffffffffffffffffffffffffffffffffffffff166117156113dd565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611762906149f8565b60405180910390fd5b6040518060400160405280600981526020017f4150452041535441580000000000000000000000000000000000000000000000815250600490805190602001906117b69291906140d8565b506040518060400160405280600a81526020017f415354415820f09fa68d00000000000000000000000000000000000000000000815250600590805190602001906118029291906140d8565b50565b61180d611cbe565b73ffffffffffffffffffffffffffffffffffffffff1661182b6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611878906149f8565b60405180910390fd5b602160149054906101000a900460ff16156118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c8906148f8565b60405180910390fd5b6001602160146101000a81548160ff02191690831515021790555042602281905550565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b61dead81565b60245481565b602360009054906101000a900460ff1681565b60265481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6119c1611cbe565b73ffffffffffffffffffffffffffffffffffffffff166119df6113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c906149f8565b60405180910390fd5b8060258190555050565b611a47611cbe565b73ffffffffffffffffffffffffffffffffffffffff16611a656113dd565b73ffffffffffffffffffffffffffffffffffffffff1614611abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab2906149f8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614938565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6000806000611c2f858561383f565b91509150858282604051602001611c479291906147b0565b60405160208183030381529060405280519060200120604051602001611c6e9291906147dc565b6040516020818303038152906040528051906020012060001c925050509392505050565b60008183611ca09190614e67565b905092915050565b60008183611cb69190614cc5565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d90614a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614958565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e849190614b18565b60405180910390a3505050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611eef577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611f1d5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8857600080fd5b505afa158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190614235565b81600081518110611ffa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061206f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95846000848661210161012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b8152600401612120949392919061488a565b6000604051808303818588803b15801561213957600080fd5b505af115801561214d573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a96248382604051612183929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561221b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221290614a78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290614918565b60405180910390fd5b600081116122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c590614a18565b60405180910390fd5b602160149054906101000a900460ff16806123325750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123865750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc906149d8565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124695750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90614ab8565b60405180910390fd5b6000604051806080016040528060008152602001600081526020016000815260200160008152509050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125755750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133ae57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156126175750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561290c57426126346102586022546134d990919063ffffffff16565b106127f5576009600a6126479190614d49565b640218711a006126579190614e67565b61267283612664866110e7565b6134d990919063ffffffff16565b11156126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126aa90614af8565b60405180910390fd5b6009600a6126c19190614d49565b63a0eebb006126d09190614e67565b821115612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906149b8565b60405180910390fd5b42612769602d600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614a38565b60405180910390fd5b42600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506128d4565b4261284c601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b1061288c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288390614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b600b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f9e574261297a6102586022546134d990919063ffffffff16565b10612a6257426129d6602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0d90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550612b41565b42612ab9601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af090614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154118015612be9575042612be762015180600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546134d990919063ffffffff16565b105b15612c7e576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505b6000612cd0612cae600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110e7565b612cc2606486611c9290919063ffffffff16565b611ca890919063ffffffff16565b9050600f60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091506001811180612d5a57506001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612d9757601360405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6002811180612de857506002600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b15612e2557601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003811180612e7757506003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b15612eb457601b60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6003600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541015612f9c57612f556001600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546134d990919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561304a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561326657426130676102586022546134d990919063ffffffff16565b1061314f57426130c3602d600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b10613103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fa90614a38565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061322e565b426131a6601e600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546134d990919063ffffffff16565b106131e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dd90614a58565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b601760405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b602360009054906101000a900460ff161580156132d15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156133ad5760006132e1306110e7565b9050602454811061338f57600060265414613361576000613303602654610da1565b90506000602681905550600061332282846134ef90919063ffffffff16565b905061335081601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b61335a8230613505565b505061338e565b61338d81601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613505565b5b5b600047905060255481106133aa576133a98161dead611e91565b5b50505b5b602360009054906101000a900460ff16156133eb576040518060800160405280600081526020016000815260200160008152602001600081525090505b60008160000151148015613403575060008160600151145b8015613413575060008160200151145b8015613423575060008160400151145b156134385761343384848461396d565b613445565b61344484848484613b26565b5b50505050565b6000838311158290613493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348a91906148d6565b60405180910390fd5b5082840390509392505050565b60006134d46009600a6134b39190614d49565b64e8d4a510006134c39190614e67565b600354611ca890919063ffffffff16565b905090565b600081836134e79190614c6f565b905092915050565b600081836134fd9190614ec1565b905092915050565b6001602360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115613563577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156135915781602001602082028036833780820191505090505b50905030816000815181106135cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561367157600080fd5b505afa158015613685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a99190614235565b816001815181106136e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061373c30737a250d5630b4cf539739df2c5dacb4c659f2488d85611cc6565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947846000848661379461012c426134d990919063ffffffff16565b6040518663ffffffff1660e01b81526004016137b4959493929190614b63565b600060405180830381600087803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613817929190614b33565b60405180910390a1506000602360006101000a81548160ff0219169083151502179055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a890614998565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106138eb5782846138ee565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395d90614ad8565b60405180910390fd5b9250929050565b60006139776134a0565b9050600061398e8284611c9290919063ffffffff16565b90506139e281600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7781600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613b179190614b18565b60405180910390a35050505050565b6000613b306134a0565b90506000613b478285611c9290919063ffffffff16565b90506000613b558585613ee5565b90506000613b6282613fcf565b90506000613b708483614075565b90506000613b7e8885614075565b9050613bd285600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ef90919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c6782600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cc383602001516003546134ef90919063ffffffff16565b600381905550613d41836040015160016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b60016000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e128360600151613e048560000151600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d990919063ffffffff16565b6134d990919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e6e83606001516026546134d990919063ffffffff16565b6026819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613ed19190614b18565b60405180910390a350505050505050505050565b613eed61415e565b613ef561415e565b613f208360200151613f126103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816020018181525050613f548360600151613f466103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816060018181525050613f888360000151613f7a6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b816000018181525050613fbc8360400151613fae6103e887611ca890919063ffffffff16565b611c9290919063ffffffff16565b8160400181815250508091505092915050565b613fd761415e565b613fdf61415e565b6000613fe96134a0565b9050614002818560200151611c9290919063ffffffff16565b826020018181525050614022818560600151611c9290919063ffffffff16565b826060018181525050614042818560000151611c9290919063ffffffff16565b826000018181525050614062818560400151611c9290919063ffffffff16565b8260400181815250508192505050919050565b60006140d082602001516140c284606001516140b486604001516140a688600001518a6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b6134ef90919063ffffffff16565b905092915050565b8280546140e490615005565b90600052602060002090601f016020900481019282614106576000855561414d565b82601f1061411f57805160ff191683800117855561414d565b8280016001018555821561414d579182015b8281111561414c578251825591602001919060010190614131565b5b50905061415a9190614186565b5090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b5b8082111561419f576000816000905550600101614187565b5090565b6000813590506141b28161563c565b92915050565b6000815190506141c78161563c565b92915050565b6000813590506141dc81615653565b92915050565b6000813590506141f18161566a565b92915050565b60008135905061420681615681565b92915050565b60006020828403121561421e57600080fd5b600061422c848285016141a3565b91505092915050565b60006020828403121561424757600080fd5b6000614255848285016141b8565b91505092915050565b60006020828403121561427057600080fd5b600061427e848285016141cd565b91505092915050565b6000806040838503121561429a57600080fd5b60006142a8858286016141a3565b92505060206142b9858286016141a3565b9150509250929050565b6000806000606084860312156142d857600080fd5b60006142e6868287016141a3565b93505060206142f7868287016141a3565b9250506040614308868287016141f7565b9150509250925092565b6000806040838503121561432557600080fd5b6000614333858286016141a3565b9250506020614344858286016141e2565b9150509250929050565b6000806040838503121561436157600080fd5b600061436f858286016141a3565b9250506020614380858286016141f7565b9150509250929050565b60006020828403121561439c57600080fd5b60006143aa848285016141f7565b91505092915050565b60006143bf83836143e9565b60208301905092915050565b6143d481614f66565b82525050565b6143e381614f07565b82525050565b6143f281614ef5565b82525050565b61440181614ef5565b82525050565b61441861441382614ef5565b615037565b82525050565b600061442982614c1f565b6144338185614c42565b935061443e83614c0f565b8060005b8381101561446f57815161445688826143b3565b975061446183614c35565b925050600181019050614442565b5085935050505092915050565b61448581614f19565b82525050565b61449c61449782614f25565b615049565b82525050565b6144ab81614f78565b82525050565b6144ba81614f9c565b82525050565b60006144cb82614c2a565b6144d58185614c53565b93506144e5818560208601614fd2565b6144ee816150f2565b840191505092915050565b6000614506601c83614c53565b91506145118261511d565b602082019050919050565b6000614529602383614c53565b915061453482615146565b604082019050919050565b600061454c602683614c53565b915061455782615195565b604082019050919050565b600061456f602283614c53565b915061457a826151e4565b604082019050919050565b6000614592603383614c53565b915061459d82615233565b604082019050919050565b60006145b5602583614c53565b91506145c082615282565b604082019050919050565b60006145d8604583614c53565b91506145e3826152d1565b606082019050919050565b60006145fb602083614c64565b915061460682615346565b602082019050919050565b600061461e601983614c53565b91506146298261536f565b602082019050919050565b6000614641600183614c64565b915061464c82615398565b600182019050919050565b6000614664602083614c53565b915061466f826153c1565b602082019050919050565b6000614687602983614c53565b9150614692826153ea565b604082019050919050565b60006146aa602d83614c53565b91506146b582615439565b604082019050919050565b60006146cd602d83614c53565b91506146d882615488565b604082019050919050565b60006146f0602583614c53565b91506146fb826154d7565b604082019050919050565b6000614713602483614c53565b915061471e82615526565b604082019050919050565b6000614736601883614c53565b915061474182615575565b602082019050919050565b6000614759601e83614c53565b91506147648261559e565b602082019050919050565b600061477c604683614c53565b9150614787826155c7565b606082019050919050565b61479b81614f4f565b82525050565b6147aa81614f59565b82525050565b60006147bc8285614407565b6014820191506147cc8284614407565b6014820191508190509392505050565b60006147e782614634565b91506147f38285614407565b601482019150614803828461448b565b602082019150614812826145ee565b91508190509392505050565b600060208201905061483360008301846143f8565b92915050565b600060208201905061484e60008301846143da565b92915050565b6000602082019050614869600083018461447c565b92915050565b600060208201905061488460008301846144a2565b92915050565b600060808201905061489f60008301876144b1565b81810360208301526148b1818661441e565b90506148c060408301856143f8565b6148cd6060830184614792565b95945050505050565b600060208201905081810360008301526148f081846144c0565b905092915050565b60006020820190508181036000830152614911816144f9565b9050919050565b600060208201905081810360008301526149318161451c565b9050919050565b600060208201905081810360008301526149518161453f565b9050919050565b6000602082019050818103600083015261497181614562565b9050919050565b6000602082019050818103600083015261499181614585565b9050919050565b600060208201905081810360008301526149b1816145a8565b9050919050565b600060208201905081810360008301526149d1816145cb565b9050919050565b600060208201905081810360008301526149f181614611565b9050919050565b60006020820190508181036000830152614a1181614657565b9050919050565b60006020820190508181036000830152614a318161467a565b9050919050565b60006020820190508181036000830152614a518161469d565b9050919050565b60006020820190508181036000830152614a71816146c0565b9050919050565b60006020820190508181036000830152614a91816146e3565b9050919050565b60006020820190508181036000830152614ab181614706565b9050919050565b60006020820190508181036000830152614ad181614729565b9050919050565b60006020820190508181036000830152614af18161474c565b9050919050565b60006020820190508181036000830152614b118161476f565b9050919050565b6000602082019050614b2d6000830184614792565b92915050565b6000604082019050614b486000830185614792565b8181036020830152614b5a818461441e565b90509392505050565b600060a082019050614b786000830188614792565b614b8560208301876144b1565b8181036040830152614b97818661441e565b9050614ba660608301856143cb565b614bb36080830184614792565b9695505050505050565b6000606082019050614bd26000830186614792565b614bdf6020830185614792565b614bec6040830184614792565b949350505050565b6000602082019050614c0960008301846147a1565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c7a82614f4f565b9150614c8583614f4f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cba57614cb9615065565b5b828201905092915050565b6000614cd082614f4f565b9150614cdb83614f4f565b925082614ceb57614cea615094565b5b828204905092915050565b6000808291508390505b6001851115614d4057808604811115614d1c57614d1b615065565b5b6001851615614d2b5780820291505b8081029050614d3985615110565b9450614d00565b94509492505050565b6000614d5482614f4f565b9150614d5f83614f59565b9250614d8c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614d94565b905092915050565b600082614da45760019050614e60565b81614db25760009050614e60565b8160018114614dc85760028114614dd257614e01565b6001915050614e60565b60ff841115614de457614de3615065565b5b8360020a915084821115614dfb57614dfa615065565b5b50614e60565b5060208310610133831016604e8410600b8410161715614e365782820a905083811115614e3157614e30615065565b5b614e60565b614e438484846001614cf6565b92509050818404811115614e5a57614e59615065565b5b81810290505b9392505050565b6000614e7282614f4f565b9150614e7d83614f4f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb657614eb5615065565b5b828202905092915050565b6000614ecc82614f4f565b9150614ed783614f4f565b925082821015614eea57614ee9615065565b5b828203905092915050565b6000614f0082614f2f565b9050919050565b6000614f1282614f2f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f7182614fae565b9050919050565b6000614f8382614f8a565b9050919050565b6000614f9582614f2f565b9050919050565b6000614fa782614f4f565b9050919050565b6000614fb982614fc0565b9050919050565b6000614fcb82614f2f565b9050919050565b60005b83811015614ff0578082015181840152602081019050614fd5565b83811115614fff576000848401525b50505050565b6000600282049050600182168061501d57607f821691505b60208210811415615031576150306150c3565b5b50919050565b600061504282615053565b9050919050565b6000819050919050565b600061505e82615103565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160011c9050919050565b7f54726164696e6720697320616c726561647920656e61626c65642e2000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206275792067726561746572207468616e20302e3325206f66204c50206360008201527f616e206265206d61646520666f7220746865206669727374203130206d696e7560208201527f7465732e20000000000000000000000000000000000000000000000000000000604082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f54726164696e67206973206e6f74206c697665207965742e2000000000000000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203435207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f4e65656420746f2077616974203330207365636f6e647320756e74696c206e6560008201527f7874207472616e736665722e2000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320697320626c61636b6c69737465642e200000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b7f5468652073616c65206973206c696d6974656420746f203125206f66204c502060008201527f706572206164647265737320666f7220746865206669727374203130206d696e60208201527f757465732e200000000000000000000000000000000000000000000000000000604082015250565b61564581614ef5565b811461565057600080fd5b50565b61565c81614f07565b811461566757600080fd5b50565b61567381614f19565b811461567e57600080fd5b50565b61568a81614f4f565b811461569557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200b5478bf4b5d8aadc0a167c6e0ea3cbaf584742baef743a8957f31ace944f27064736f6c63430008040033

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.