Token Saint Inu

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
1,200,000,000,000 SAINT

Holders:
1,617 addresses
Contract:
0x6BB45804e7D5375E8fbEEE505392F5ecC4E76C950x6BB45804e7D5375E8fbEEE505392F5ecC4E76C95

Decimals:
18

Social Profiles:
Not Available, Update ?

Balance
128,810,316,284.841260659440565767 SAINT

Value
$0.00
0x71f8cE4931D8cded4B28aeF35e1e05452966fa61
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SaintInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : SaintInu.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "./UniswapV2Interfaces.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./IWETH.sol";

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IUniswapV2Router02 router;
    IWETH WETH;
    IERC20 RewardToken;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10 ** 6);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = IUniswapV2Router02(_router);
        _token = msg.sender;
        WETH = IWETH(router.WETH());
        RewardToken = WETH;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = address(WETH);
        path[1] = address(RewardToken);

        if(path[0] == path[1])
        {
            WETH.deposit{value: msg.value}();
        }
        else
        {
            router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
                0,
                path,
                address(this),
                block.timestamp
            );
        }

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
        && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }

    }

    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }

//    function rescueDividends(address to) external onlyToken {
//        RewardToken.transfer(to, RewardToken.balanceOf(address(this)));
//    }

    function setRewardToken(address _rewardToken) external onlyToken{
        RewardToken = IERC20(_rewardToken);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr, bool authorizePreviousOwner) public onlyOwner {
        authorizations[owner] = authorizePreviousOwner;
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    /**
     * Transfer ownership to the zero address without authorizing it. Caller must be owner.
     */
    function renounceOwnership(address payable adr) public onlyOwner {
        authorizations[owner] = false;
        owner = address(0);
        //No need to authorize the zero address.
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract SaintInu is IERC20, Auth {
    using SafeMath for uint256;

    string constant _name = "Saint Inu";
    string constant _symbol = "SAINT";
    uint8 constant _decimals = 18;

    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    uint256 _totalSupply = 1200000000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply;
    uint256 public _walletMax = _totalSupply;

    bool public restrictWhales = true;

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

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;
    bool public blacklistMode = true;
    mapping(address => bool) public isBlacklisted;

    uint256 public liquidityFee = 0;
    uint256 public marketingFee = 0;
    uint256 public rewardsFee = 200;
    uint256 public devFee = 200;
    uint256 public buyMultiplier = 10000;
    uint256 public sellMultiplier = 10000;

    uint256 public totalFeeIfBuying = 0;
    uint256 public totalFeeIfSelling = 0;

    address public autoLiquidityReceiver;
    address public marketingWallet;
    address public devWallet;

    IUniswapV2Router02 public router;
    address public pair;
    IWETH WETH;

    uint256 public launchedAt;
    bool public tradingOpen = false;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 750000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public alwaysLiquify = false;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = _totalSupply * 5 / 2000;

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

    constructor (address routerAddress, address _marketingWallet, address _devWallet, address _liquidityReceiver) Auth(msg.sender) {

        router = IUniswapV2Router02(routerAddress);
        WETH = IWETH(router.WETH());
        pair = IUniswapV2Factory(router.factory()).createPair(address(WETH), address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        // NICE!
        autoLiquidityReceiver = _liquidityReceiver;
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;

        uint256 totalFee = liquidityFee.add(marketingFee).add(rewardsFee).add(devFee);
        totalFeeIfBuying = totalFee.mul(buyMultiplier).div(10000);
        totalFeeIfSelling = totalFee.mul(sellMultiplier).div(10000);

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function name() external pure returns (string memory) { return _name; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); }
    function getOwner() external view returns (address) { return owner; }

    function getInitialSupply() external view returns (uint256) {
        return _totalSupply;
    }

    function burn(uint256 amount) external
    {
        transfer(ZERO, amount);
    }

    function burnToDEAD(uint256 amount) external
    {
        transfer(DEAD, amount);
    }

    function burnFrom(address sender, uint256 amount) external
    {
        transferFrom(sender, ZERO, amount);
    }

    function burnFromToDEAD(address sender, uint256 amount) external
    {
        transferFrom(sender, DEAD, amount);
    }

    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function claimDividend() external {
        dividendDistributor.claimDividend(msg.sender);
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function changeBuyAndSellMultiplier(uint256 newBuyMulti, uint256 newSellMulti) external authorized{
        buyMultiplier = newBuyMulti;
        sellMultiplier = newSellMulti;
        uint256 totalFee = liquidityFee.add(marketingFee).add(rewardsFee).add(devFee);
        require(totalFee <= 1000);
        totalFeeIfBuying = totalFee.mul(buyMultiplier).div(10000);
        require(totalFeeIfBuying <= 1000);
        totalFeeIfSelling = totalFee.mul(sellMultiplier).div(10000);
        require(totalFeeIfSelling <= 1000);
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function changeTxLimit(uint256 newLimit) external authorized {
        _maxTxAmount = newLimit;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function enable_blacklist(bool _status) public onlyOwner {
        blacklistMode = _status;
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function manage_blacklist(address[] calldata addresses, bool status)
    public
    onlyOwner
    {
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }

    function changeRestrictWhales(bool newValue) external authorized {
        restrictWhales = newValue;
    }

    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function changeIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;

        if(exempt){
            dividendDistributor.setShare(holder, 0);
        }else{
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee, uint256 newDevFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
        marketingFee = newMarketingFee;
        devFee = newDevFee;

        uint256 totalFee = liquidityFee.add(marketingFee).add(rewardsFee).add(devFee);
        require(totalFee <= 1000);
        totalFeeIfBuying = totalFee.mul(buyMultiplier).div(10000);
        require(totalFeeIfBuying <= 1000);
        totalFeeIfSelling = totalFee.mul(sellMultiplier).div(10000);
        require(totalFeeIfSelling <= 1000);
    }

    function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet, address newDevWallet) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
        devWallet = newDevWallet;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly, bool enableAlwaysLiquify) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
        alwaysLiquify = enableAlwaysLiquify;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas <= 750000);
        distributorGas = gas;
    }

    function setRewardToken(address _rewardToken) external authorized {
        dividendDistributor.setRewardToken(_rewardToken);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        return _transfer(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {

        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transfer(sender, recipient, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) internal returns (bool) {

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

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen, "Trading not open yet");
        }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if((msg.sender != pair || alwaysLiquify) && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){
            swapBack();
        }

        if(!launched() && recipient == pair) {
            require(_balances[sender] > 0);
            launch();
        }

        // Blacklist
        if (blacklistMode) {
            require(
                !isBlacklisted[sender] && !isBlacklisted[recipient],
                "Blacklisted");
        }

        if(recipient == pair && !authorizations[sender]) {
            require(tradingOpen, "Trading not open yet");
        }

        if(recipient != pair && !authorizations[recipient]) {
            require(tradingOpen, "Trading not open yet");
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {}
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    //Add liquidity (exempt from tax, uses inSwapAndLiquify)
    function feelessAddLiquidity(
        uint amountSAINTDesired,
        uint amountWETHDesired,
        uint amountSAINTMin,
        uint amountWETHMin,
        address to,
        uint deadline
    ) external lockTheSwap returns (uint amountSAINT, uint amountWETH, uint liquidity)
    {
        _basicTransfer(msg.sender, address(this), amountSAINTDesired);
        approve(address(router), amountSAINTDesired);
        WETH.transferFrom(msg.sender, address(this), amountWETHDesired);
        WETH.approve(address(router), amountWETHDesired);
        (amountSAINT, amountWETH, liquidity) = router.addLiquidity(address(this),
            address(WETH), amountSAINTDesired, amountWETHDesired,
            amountSAINTMin, amountWETHMin,
            to,
            deadline
        );
        //Get rid of dust approval + send back dust.
        if (amountSAINTDesired > amountSAINT)
        {
            approve(address(router), 0);
            _basicTransfer(address(this), msg.sender, amountSAINTDesired - amountSAINT);
        }
        if (amountWETHDesired > amountWETH)
        {
            WETH.approve(address(router), 0);
            WETH.transfer(msg.sender, amountWETHDesired - amountWETH);
        }
    }

    //Remove liquidity (exempt from tax, uses inSwapAndLiquify)
    function feelessRemoveLiquidity(
        uint liquidity,
        uint amountSAINTMin,
        uint amountWETHMin,
        address to,
        uint deadline
    ) external lockTheSwap returns (uint amountSAINT, uint amountWETH)
    {
        IERC20(pair).transferFrom(msg.sender, address(this), liquidity);
        IERC20(pair).approve(address(router), liquidity);
        (amountSAINT, amountWETH) = router.removeLiquidity(address(this),
            address(WETH), liquidity,
            amountSAINTMin, amountWETHMin,
            to,
            deadline
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {

        uint256 feeApplicable = 0;
        if(pair == recipient) feeApplicable = totalFeeIfSelling;
        if(pair == sender) feeApplicable = totalFeeIfBuying;
        if(feeApplicable == 0) return amount; //Early out.
        uint256 feeAmount = amount.mul(feeApplicable).div(10000);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function openTrading() public onlyOwner {
        tradingOpen = true;
    }

    function swapBack() internal lockTheSwap {

        uint256 tokensToLiquify = _balances[address(this)];
        uint256 totalFee = liquidityFee.add(marketingFee).add(rewardsFee).add(devFee);
        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

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

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);
        uint256 amountETHReflection = amountETH.mul(rewardsFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHDev = amountETH.mul(devFee).div(totalETHFee);

        try dividendDistributor.deposit{value: amountETHReflection}() {} catch {}

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (bool tmpSuccess1,) = payable(devWallet).call{value: amountETHDev, gas: 30000}("");

        // only to supress warning msg
        tmpSuccess = false;
        tmpSuccess1 = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    event AutoLiquify(uint256 amountETH, uint256 amountSAINT);

}

File 2 of 5 : UniswapV2Interfaces.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns(address);
    function feeToSetter() external view returns(address);
    function getPair(address tokenA, address tokenB) external view returns(address pair);
    function allPairs(uint) external view returns(address pair);
    function allPairsLength() external view returns(uint);
    function createPair(address tokenA, address tokenB) external returns(address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns(string memory);
    function symbol() external pure returns(string memory);
    function decimals() external pure returns(uint8);
    function totalSupply() external view returns(uint);
    function balanceOf(address owner) external view returns(uint);
    function allowance(address owner, address spender) external view returns(uint);
    function approve(address spender, uint value) external returns(bool);
    function transfer(address to, uint value) external returns(bool);
    function transferFrom(address from, address to, uint value) external returns(bool);
    function DOMAIN_SEPARATOR() external view returns(bytes32);
    function PERMIT_TYPEHASH() external pure returns(bytes32);
    function nonces(address owner) external view returns(uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns(uint);
    function factory() external view returns(address);
    function token0() external view returns(address);
    function token1() external view returns(address);
    function getReserves() external view returns(uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns(uint);
    function price1CumulativeLast() external view returns(uint);
    function kLast() external view returns(uint);
    function mint(address to) external returns(uint liquidity);
    function burn(address to) external returns(uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
interface IUniswapV2Router01 {
    function factory() external pure returns(address);
    function WETH() external pure returns(address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 3 of 5 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

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 generally not needed starting with Solidity 0.8, since 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 subtraction 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. 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 5 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 5 of 5 : IWETH.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface IWETH is IERC20
{
    function deposit() external payable;

    function withdraw(uint256 wad) external;
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_liquidityReceiver","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountSAINT","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alwaysLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFromToDEAD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToDEAD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyMulti","type":"uint256"},{"internalType":"uint256","name":"newSellMulti","type":"uint256"}],"name":"changeBuyAndSellMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"},{"internalType":"bool","name":"enableAlwaysLiquify","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enable_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountSAINTDesired","type":"uint256"},{"internalType":"uint256","name":"amountWETHDesired","type":"uint256"},{"internalType":"uint256","name":"amountSAINTMin","type":"uint256"},{"internalType":"uint256","name":"amountWETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"feelessAddLiquidity","outputs":[{"internalType":"uint256","name":"amountSAINT","type":"uint256"},{"internalType":"uint256","name":"amountWETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountSAINTMin","type":"uint256"},{"internalType":"uint256","name":"amountWETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"feelessRemoveLiquidity","outputs":[{"internalType":"uint256","name":"amountSAINT","type":"uint256"},{"internalType":"uint256","name":"amountWETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getInitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFeeIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","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 payable","name":"adr","type":"address"},{"internalType":"bool","name":"authorizePreviousOwner","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a620006b3565b62000024906501176592e000620006c4565b6002819055600381905560048190556005805460ff1990811660019081178355600b8054831690911790556000600d819055600e81905560c8600f81905560105561271060118190556012556013819055601455601c80549091169055620b71b0601d55601e805463ffffff0019166101001790556107d091620000a891620006c4565b620000b49190620006e6565b601f55348015620000c457600080fd5b50604051620047b8380380620047b8833981016040819052620000e79162000726565b600080546001600160a01b0319908116339081178355825260016020818152604093849020805460ff1916909217909155601880546001600160a01b03891693168317905582516315ab88c960e31b81529251919263ad5c46489260048083019392829003018186803b1580156200015e57600080fd5b505afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000783565b601a80546001600160a01b0319166001600160a01b039283161790556018546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b158015620001f357600080fd5b505afa15801562000208573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022e919062000783565b601a546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200027b57600080fd5b505af115801562000290573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b6919062000783565b601980546001600160a01b0319166001600160a01b0392831617905530600090815260076020908152604080832060188054861685529252918290206000199055549051911690620003089062000592565b6001600160a01b039091168152602001604051809103906000f08015801562000335573d6000803e3d6000fd5b50601c8054610100600160a81b0319166101006001600160a01b0393841602179055336000818152600860209081526040808320805460ff199081166001908117909255308086528386208054831684179055868652600985528386208054831684179055601980548916875284872080548416851790555488168652600a85528386208054831684179055958552828520805482168317905594845290832080548516821790557f20677881080440a9b3c87e826370bb5d9c2f74efd4dede686d52d77a6a09f8bb80548516821790558280527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3805490941617909255601580546001600160a01b0319908116868616179091556016805482168886161790556017805490911693861693909317909255601054600f54600e54600d54620004a4946200049093928492916200055f811b62001dcf17901c565b6200055f60201b62001dcf1790919060201c565b9050620004dd612710620004c9601154846200057660201b62001ddb1790919060201c565b6200058460201b62001de71790919060201c565b60138190555062000506612710620004c9601254846200057660201b62001ddb1790919060201c565b60145560025433600081815260066020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050505050620007bc565b60006200056d8284620007a1565b90505b92915050565b60006200056d8284620006c4565b60006200056d8284620006e6565b610fd080620037e883390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005f7578160001904821115620005db57620005db620005a0565b80851615620005e957918102915b93841c9390800290620005bb565b509250929050565b600082620006105750600162000570565b816200061f5750600062000570565b8160018114620006385760028114620006435762000663565b600191505062000570565b60ff841115620006575762000657620005a0565b50506001821b62000570565b5060208310610133831016604e8410600b841016171562000688575081810a62000570565b620006948383620005b6565b8060001904821115620006ab57620006ab620005a0565b029392505050565b60006200056d60ff841683620005ff565b6000816000190483118215151615620006e157620006e1620005a0565b500290565b6000826200070457634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200072157600080fd5b919050565b600080600080608085870312156200073d57600080fd5b620007488562000709565b9350620007586020860162000709565b9250620007686040860162000709565b9150620007786060860162000709565b905092959194509250565b6000602082840312156200079657600080fd5b6200056d8262000709565b60008219821115620007b757620007b7620005a0565b500190565b61301c80620007cc6000396000f3fe6080604052600436106103fe5760003560e01c806381a4a6d811610213578063bf56b37111610123578063e66b1d1e116100ab578063fabe62831161007a578063fabe628314610c74578063fe575a8714610c94578063fe9fbb8014610cc4578063fed0d2a114610ce4578063ffb54a9914610cfa57600080fd5b8063e66b1d1e14610bff578063f0b37c0414610c1f578063f0fc6bca14610c3f578063f887ea4014610c5457600080fd5b8063d920334e116100f2578063d920334e14610b23578063da00097d14610b43578063dd62ed3e14610b64578063df37ec9514610baa578063e424390314610bdf57600080fd5b8063bf56b37114610ac2578063c9567bf914610ad8578063ca33e64c14610aed578063ca987b0e14610b0d57600080fd5b806395d89b41116101a6578063a9059cbb11610175578063a9059cbb14610a1d578063a9f7864b14610a3d578063b242e53414610a5d578063b6a5d7de14610a7d578063bad3ea6a14610a9d57600080fd5b806395d89b411461099957806398118cb4146109c7578063a3a2e89e146109dd578063a8aa1b31146109fd57600080fd5b80638b42507f116101e25780638b42507f146109135780638e2eee84146109435780638ea5220f14610963578063935fe68c1461098357600080fd5b806381a4a6d8146108a6578063893d20e8146108bb578063896648c1146108d95780638aee8127146108f357600080fd5b8063479f66d81161030e5780636827e764116102a1578063773fcb5c11610270578063773fcb5c1461081a57806379cc67901461083a5780637d1db4a51461085a5780637db1342c14610870578063807c2d9c1461089057600080fd5b80636827e764146107805780636b67c4df1461079657806370a08231146107ac57806375f0a874146107e257600080fd5b8063588f3249116102dd578063588f3249146106e55780635e562f3b1461070557806362dd713214610725578063650c42261461076057600080fd5b8063479f66d8146106665780634a74bb0214610686578063571ac8b0146106a557806357820abb146106c557600080fd5b80632f54bf6e1161039157806338bf3cfa1161036057806338bf3cfa146105ac5780633f4218e0146105cc57806342966c68146105fc5780634355855a1461061c57806344de2e4c1461064c57600080fd5b80632f54bf6e1461052b5780633121c7c01461055a578063313ce56714610570578063315dca291461058c57600080fd5b806318160ddd116103cd57806318160ddd146104be57806323b872dd146104d357806325429b3d146104f35780632bb14e1d1461051557600080fd5b80630445b6671461040a57806306fdde031461043357806308c5a8dd1461046e578063095ea7b31461049e57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b50610420601f5481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b506040805180820190915260098152685361696e7420496e7560b81b60208201525b60405161042a9190612a2f565b34801561047a57600080fd5b50601e5461048e9062010000900460ff1681565b604051901515815260200161042a565b3480156104aa57600080fd5b5061048e6104b9366004612a9c565b610d14565b3480156104ca57600080fd5b50610420610d80565b3480156104df57600080fd5b5061048e6104ee366004612ac8565b610df1565b3480156104ff57600080fd5b5061051361050e366004612b09565b610eb3565b005b34801561052157600080fd5b50610420600f5481565b34801561053757600080fd5b5061048e610546366004612b2b565b6000546001600160a01b0391821691161490565b34801561056657600080fd5b5061042060115481565b34801561057c57600080fd5b506040516012815260200161042a565b34801561059857600080fd5b506105136105a7366004612b48565b610f89565b3480156105b857600080fd5b506105136105c7366004612b2b565b610fed565b3480156105d857600080fd5b5061048e6105e7366004612b2b565b60086020526000908152604090205460ff1681565b34801561060857600080fd5b50610513610617366004612b93565b611080565b34801561062857600080fd5b5061048e610637366004612b2b565b600a6020526000908152604090205460ff1681565b34801561065857600080fd5b5060055461048e9060ff1681565b34801561067257600080fd5b50610513610681366004612b93565b61108f565b34801561069257600080fd5b50601e5461048e90610100900460ff1681565b3480156106b157600080fd5b5061048e6106c0366004612b2b565b6110c9565b3480156106d157600080fd5b506105136106e0366004612a9c565b6110dd565b3480156106f157600080fd5b50610513610700366004612b93565b6110ea565b34801561071157600080fd5b50610513610720366004612bba565b6110f6565b34801561073157600080fd5b50610745610740366004612bd7565b611133565b6040805193845260208401929092529082015260600161042a565b34801561076c57600080fd5b5061051361077b366004612c2c565b6114b0565b34801561078c57600080fd5b5061042060105481565b3480156107a257600080fd5b50610420600e5481565b3480156107b857600080fd5b506104206107c7366004612b2b565b6001600160a01b031660009081526006602052604090205490565b3480156107ee57600080fd5b50601654610802906001600160a01b031681565b6040516001600160a01b03909116815260200161042a565b34801561082657600080fd5b50610513610835366004612c5e565b61156f565b34801561084657600080fd5b50610513610855366004612a9c565b6116b0565b34801561086657600080fd5b5061042060035481565b34801561087c57600080fd5b5061051361088b366004612b93565b6116bc565b34801561089c57600080fd5b5061042060045481565b3480156108b257600080fd5b50600254610420565b3480156108c757600080fd5b506000546001600160a01b0316610802565b3480156108e557600080fd5b50600b5461048e9060ff1681565b3480156108ff57600080fd5b5061051361090e366004612b2b565b6116e6565b34801561091f57600080fd5b5061048e61092e366004612b2b565b60096020526000908152604090205460ff1681565b34801561094f57600080fd5b5061051361095e366004612c97565b61176c565b34801561096f57600080fd5b50601754610802906001600160a01b031681565b34801561098f57600080fd5b5061042060135481565b3480156109a557600080fd5b5060408051808201909152600581526414d052539560da1b6020820152610461565b3480156109d357600080fd5b50610420600d5481565b3480156109e957600080fd5b506105136109f8366004612c5e565b61180b565b348015610a0957600080fd5b50601954610802906001600160a01b031681565b348015610a2957600080fd5b5061048e610a38366004612a9c565b61185b565b348015610a4957600080fd5b50610513610a58366004612b09565b611868565b348015610a6957600080fd5b50610513610a78366004612c5e565b6118c9565b348015610a8957600080fd5b50610513610a98366004612b2b565b611978565b348015610aa957600080fd5b50601c546108029061010090046001600160a01b031681565b348015610ace57600080fd5b50610420601b5481565b348015610ae457600080fd5b506105136119c9565b348015610af957600080fd5b50601554610802906001600160a01b031681565b348015610b1957600080fd5b5061042060145481565b348015610b2f57600080fd5b50610513610b3e366004612b93565b611a02565b348015610b4f57600080fd5b50601e5461048e906301000000900460ff1681565b348015610b7057600080fd5b50610420610b7f366004612d12565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610bb657600080fd5b50610bca610bc5366004612d40565b611a2c565b6040805192835260208301919091520161042a565b348015610beb57600080fd5b50610513610bfa366004612d89565b611c14565b348015610c0b57600080fd5b50610513610c1a366004612bba565b611c81565b348015610c2b57600080fd5b50610513610c3a366004612b2b565b611cb9565b348015610c4b57600080fd5b50610513611d04565b348015610c6057600080fd5b50601854610802906001600160a01b031681565b348015610c8057600080fd5b50610513610c8f366004612c5e565b611d61565b348015610ca057600080fd5b5061048e610caf366004612b2b565b600c6020526000908152604090205460ff1681565b348015610cd057600080fd5b5061048e610cdf366004612b2b565b611db1565b348015610cf057600080fd5b5061042060125481565b348015610d0657600080fd5b50601c5461048e9060ff1681565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d6f9086815260200190565b60405180910390a350600192915050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead60009081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22546002549192610dec929091610de69190611df3565b90611df3565b905090565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610e9e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600782528381203382529091529190912054610e79918490611dff565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610ea9848484611e2b565b90505b9392505050565b610ebc33611db1565b610ee15760405162461bcd60e51b8152600401610ed890612ddc565b60405180910390fd5b60118290556012819055601054600f54600e54600d54600093610f11939092610f0b928391611dcf565b90611dcf565b90506103e8811115610f2257600080fd5b610f43612710610f3d60115484611ddb90919063ffffffff16565b90611de7565b60138190556103e81015610f5657600080fd5b610f71612710610f3d60125484611ddb90919063ffffffff16565b60148190556103e81015610f8457600080fd5b505050565b610f9233611db1565b610fae5760405162461bcd60e51b8152600401610ed890612ddc565b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b6000546001600160a01b031633146110175760405162461bcd60e51b8152600401610ed890612e01565b600080546001600160a01b039081168252600160209081526040808420805460ff1916905583546001600160a01b031916909355915190831681527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61108b60008261185b565b5050565b61109833611db1565b6110b45760405162461bcd60e51b8152600401610ed890612ddc565b620b71b08111156110c457600080fd5b601d55565b60006110d782600019610d14565b92915050565b610f848261dead83610df1565b61108b61dead8261185b565b6000546001600160a01b031633146111205760405162461bcd60e51b8152600401610ed890612e01565b600b805460ff1916911515919091179055565b601e805460ff191660011790556000808061114f33308b612457565b50601854611166906001600160a01b03168a610d14565b50601a546040516323b872dd60e01b8152336004820152306024820152604481018a90526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156111b957600080fd5b505af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612e21565b50601a5460185460405163095ea7b360e01b81526001600160a01b039182166004820152602481018b905291169063095ea7b390604401602060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a9190612e21565b50601854601a5460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018c9052606481018b9052608481018a905260a4810189905287821660c482015260e4810187905291169063e8e337009061010401606060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132d9190612e3e565b919450925090508289111561136a57601854611353906001600160a01b03166000610d14565b506113683033611363868d612e82565b612457565b505b8188111561149757601a5460185460405163095ea7b360e01b81526001600160a01b0391821660048201526000602482015291169063095ea7b390604401602060405180830381600087803b1580156113c257600080fd5b505af11580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190612e21565b50601a546001600160a01b031663a9059cbb33611417858c612e82565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561145d57600080fd5b505af1158015611471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114959190612e21565b505b601e805460ff1916905591989097509095509350505050565b6114b933611db1565b6114d55760405162461bcd60e51b8152600401610ed890612ddc565b600d849055600f839055600e829055601081905560006114fb82610f0b86818988611dcf565b90506103e881111561150c57600080fd5b611527612710610f3d60115484611ddb90919063ffffffff16565b60138190556103e8101561153a57600080fd5b611555612710610f3d60125484611ddb90919063ffffffff16565b60148190556103e8101561156857600080fd5b5050505050565b61157833611db1565b6115945760405162461bcd60e51b8152600401610ed890612ddc565b6001600160a01b03821630148015906115bb57506019546001600160a01b03838116911614155b6115c457600080fd5b6001600160a01b0382166000908152600a60205260409020805460ff1916821580159190911790915561166257601c54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca96906044015b600060405180830381600087803b15801561164657600080fd5b505af115801561165a573d6000803e3d6000fd5b505050505050565b601c546001600160a01b0383811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca969060440161162c565b610f8482600083610df1565b6116c533611db1565b6116e15760405162461bcd60e51b8152600401610ed890612ddc565b600455565b6116ef33611db1565b61170b5760405162461bcd60e51b8152600401610ed890612ddc565b601c54604051638aee812760e01b81526001600160a01b03838116600483015261010090920490911690638aee812790602401600060405180830381600087803b15801561175857600080fd5b505af1158015611568573d6000803e3d6000fd5b6000546001600160a01b031633146117965760405162461bcd60e51b8152600401610ed890612e01565b60005b828110156118055781600c60008686858181106117b8576117b8612e99565b90506020020160208101906117cd9190612b2b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117fe81612eaf565b9050611799565b50505050565b61181433611db1565b6118305760405162461bcd60e51b8152600401610ed890612ddc565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000610eac338484611e2b565b61187133611db1565b61188d5760405162461bcd60e51b8152600401610ed890612ddc565b601c546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e8969060440161162c565b6000546001600160a01b031633146118f35760405162461bcd60e51b8152600401610ed890612e01565b600080546001600160a01b039081168252600160208181526040808520805460ff199081168815151790915585546001600160a01b0319169488169485178655848652948190208054909516909217909355519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a15050565b6000546001600160a01b031633146119a25760405162461bcd60e51b8152600401610ed890612e01565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146119f35760405162461bcd60e51b8152600401610ed890612e01565b601c805460ff19166001179055565b611a0b33611db1565b611a275760405162461bcd60e51b8152600401610ed890612ddc565b600355565b601e805460ff191660011790556019546040516323b872dd60e01b81523360048201523060248201526044810187905260009182916001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611a9057600080fd5b505af1158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190612e21565b5060195460185460405163095ea7b360e01b81526001600160a01b039182166004820152602481018a905291169063095ea7b390604401602060405180830381600087803b158015611b1957600080fd5b505af1158015611b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b519190612e21565b50601854601a54604051635d5155ef60e11b81523060048201526001600160a01b039182166024820152604481018a9052606481018990526084810188905286821660a482015260c4810186905291169063baa2abde9060e4016040805180830381600087803b158015611bc457600080fd5b505af1158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc9190612eca565b601e805460ff19169055909890975095505050505050565b611c1d33611db1565b611c395760405162461bcd60e51b8152600401610ed890612ddc565b601e8054601f94909455901515620100000262ff00001992151563010000000263ff00000019951515610100029590951663ff00ff0019909416939093179390931716179055565b611c8a33611db1565b611ca65760405162461bcd60e51b8152600401610ed890612ddc565b6005805460ff1916911515919091179055565b6000546001600160a01b03163314611ce35760405162461bcd60e51b8152600401610ed890612e01565b6001600160a01b03166000908152600160205260409020805460ff19169055565b601c54604051630afbf02f60e11b81523360048201526101009091046001600160a01b0316906315f7e05e90602401600060405180830381600087803b158015611d4d57600080fd5b505af1158015611805573d6000803e3d6000fd5b611d6a33611db1565b611d865760405162461bcd60e51b8152600401610ed890612ddc565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610eac8284612eee565b6000610eac8284612f06565b6000610eac8284612f25565b6000610eac8284612e82565b60008184841115611e235760405162461bcd60e51b8152600401610ed89190612a2f565b505050900390565b601e5460009060ff1615611e4b57611e44848484612457565b9050610eac565b6001600160a01b03841660009081526001602052604090205460ff16158015611e8d57506001600160a01b03831660009081526001602052604090205460ff16155b15611eb457601c5460ff16611eb45760405162461bcd60e51b8152600401610ed890612f47565b60035482111580611edd57506001600160a01b03841660009081526009602052604090205460ff165b611f1d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ed8565b6019546001600160a01b031633141580611f3f5750601e5462010000900460ff165b8015611f4e5750601e5460ff16155b8015611f615750601e54610100900460ff165b8015611f7e5750601f543060009081526006602052604090205410155b15611f8b57611f8b61253d565b601b54158015611fa857506019546001600160a01b038481169116145b15611fd8576001600160a01b038416600090815260066020526040902054611fcf57600080fd5b611fd843601b55565b600b5460ff161561205f576001600160a01b0384166000908152600c602052604090205460ff1615801561202557506001600160a01b0383166000908152600c602052604090205460ff16155b61205f5760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610ed8565b6019546001600160a01b03848116911614801561209557506001600160a01b03841660009081526001602052604090205460ff16155b156120bc57601c5460ff166120bc5760405162461bcd60e51b8152600401610ed890612f47565b6019546001600160a01b038481169116148015906120f357506001600160a01b03831660009081526001602052604090205460ff16155b1561211a57601c5460ff1661211a5760405162461bcd60e51b8152600401610ed890612f47565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526006909152919091205461216c918490611dff565b6001600160a01b0380861660009081526006602090815260408083209490945591861681526009909152205460ff161580156121aa575060055460ff165b156121e0576004546001600160a01b0384166000908152600660205260409020546121d59084611dcf565b11156121e057600080fd5b6001600160a01b03841660009081526008602052604081205460ff1615801561222257506001600160a01b03841660009081526008602052604090205460ff16155b61222c5782612237565b61223785858561294a565b6001600160a01b03851660009081526006602052604090205490915061225d9082611dcf565b6001600160a01b038086166000908152600660209081526040808320949094559188168152600a909152205460ff1661230657601c546001600160a01b0386811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b1580156122f357600080fd5b505af1925050508015612304575060015b505b6001600160a01b0384166000908152600a602052604090205460ff1661239c57601c546001600160a01b0385811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561238957600080fd5b505af192505050801561239a575060015b505b601c54601d546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b1580156123ed57600080fd5b505af19250505080156123fe575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161244491815260200190565b60405180910390a3506001949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546124a8918490611dff565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546124d79083611dcf565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061252b9086815260200190565b60405180910390a35060019392505050565b601e805460ff1916600117905530600090815260066020526040812054601054600f54600e54600d5493949361257b9392610f0b9290918391611dcf565b9050600061259d6002610f3d84610f3d600d5488611ddb90919063ffffffff16565b905060006125ab8483611df3565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106125e5576125e5612e99565b6001600160a01b039283166020918202929092010152601a5482519116908290600190811061261657612616612e99565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b815291169063791ac9479061265c908590600090869030904290600401612f75565b600060405180830381600087803b15801561267657600080fd5b505af115801561268a573d6000803e3d6000fd5b5050600d54479250600091506126ac906126a5906002611de7565b8790611df3565b905060006126ce6002610f3d84610f3d600d5488611ddb90919063ffffffff16565b905060006126eb83610f3d600f5487611ddb90919063ffffffff16565b9050600061270884610f3d600e5488611ddb90919063ffffffff16565b9050600061272585610f3d60105489611ddb90919063ffffffff16565b9050601c60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561277757600080fd5b505af193505050508015612789575060015b506016546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146127dc576040519150601f19603f3d011682016040523d82523d6000602084013e6127e1565b606091505b50506017546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461283a576040519150601f19603f3d011682016040523d82523d6000602084013e61283f565b606091505b5060009350839250508b1590506129315760185460155460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f49190612e3e565b505060408051888152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601e805460ff191690555050505050505050505050565b60195460009081906001600160a01b038581169116141561296a57506014545b6019546001600160a01b038681169116141561298557506013545b806129935782915050610eac565b60006129a5612710610f3d8685611ddb565b306000908152600660205260409020549091506129c29082611dcf565b30600081815260066020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a139085815260200190565b60405180910390a3612a258482611df3565b9695505050505050565b600060208083528351808285015260005b81811015612a5c57858101830151858201604001528201612a40565b81811115612a6e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612a9957600080fd5b50565b60008060408385031215612aaf57600080fd5b8235612aba81612a84565b946020939093013593505050565b600080600060608486031215612add57600080fd5b8335612ae881612a84565b92506020840135612af881612a84565b929592945050506040919091013590565b60008060408385031215612b1c57600080fd5b50508035926020909101359150565b600060208284031215612b3d57600080fd5b8135610eac81612a84565b600080600060608486031215612b5d57600080fd5b8335612b6881612a84565b92506020840135612b7881612a84565b91506040840135612b8881612a84565b809150509250925092565b600060208284031215612ba557600080fd5b5035919050565b8015158114612a9957600080fd5b600060208284031215612bcc57600080fd5b8135610eac81612bac565b60008060008060008060c08789031215612bf057600080fd5b863595506020870135945060408701359350606087013592506080870135612c1781612a84565b8092505060a087013590509295509295509295565b60008060008060808587031215612c4257600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612c7157600080fd5b8235612c7c81612a84565b91506020830135612c8c81612bac565b809150509250929050565b600080600060408486031215612cac57600080fd5b833567ffffffffffffffff80821115612cc457600080fd5b818601915086601f830112612cd857600080fd5b813581811115612ce757600080fd5b8760208260051b8501011115612cfc57600080fd5b60209283019550935050840135612b8881612bac565b60008060408385031215612d2557600080fd5b8235612d3081612a84565b91506020830135612c8c81612a84565b600080600080600060a08688031215612d5857600080fd5b8535945060208601359350604086013592506060860135612d7881612a84565b949793965091946080013592915050565b60008060008060808587031215612d9f57600080fd5b8435612daa81612bac565b9350602085013592506040850135612dc181612bac565b91506060850135612dd181612bac565b939692955090935050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600060208284031215612e3357600080fd5b8151610eac81612bac565b600080600060608486031215612e5357600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b600082821015612e9457612e94612e6c565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ec357612ec3612e6c565b5060010190565b60008060408385031215612edd57600080fd5b505080516020909101519092909150565b60008219821115612f0157612f01612e6c565b500190565b6000816000190483118215151615612f2057612f20612e6c565b500290565b600082612f4257634e487b7160e01b600052601260045260246000fd5b500490565b602080825260149082015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fc55784516001600160a01b031683529383019391830191600101612fa0565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b25c93e551486f876cc3d8fd4426225f734d62e554214be902b750fbe3c06ec664736f6c6343000809003360806040526ec097ce7bc90715b34b9f1000000000600c55610e10600d55620f4240600e5534801561003057600080fd5b50604051610fd0380380610fd083398101604081905261004f91610118565b600180546001600160a01b0383166001600160a01b031991821681179092556000805490911633179055604080516315ab88c960e31b8152905163ad5c464891600480820192602092909190829003018186803b1580156100af57600080fd5b505afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610118565b600280546001600160a01b03929092166001600160a01b031992831681179091556003805490921617905550610148565b60006020828403121561012a57600080fd5b81516001600160a01b038116811461014157600080fd5b9392505050565b610e79806101576000396000f3fe6080604052600436106100e85760003560e01c80638aee81271161008a578063e2d2e21911610059578063e2d2e21914610259578063efca2eed1461026f578063ffb2c47914610285578063ffd49c84146102a557600080fd5b80638aee8127146101c4578063997664d7146101e4578063ce7c2ac2146101fa578063d0e30db01461025157600080fd5b806328fd3198116100c657806328fd3198146101585780632d48e896146101785780633a98ef39146101985780634fab0ae8146101ae57600080fd5b806311ce023d146100ed57806314b6ca961461011657806315f7e05e14610138575b600080fd5b3480156100f957600080fd5b50610103600c5481565b6040519081526020015b60405180910390f35b34801561012257600080fd5b50610136610131366004610c51565b6102bb565b005b34801561014457600080fd5b50610136610153366004610c7b565b610433565b34801561016457600080fd5b50610103610173366004610c7b565b610456565b34801561018457600080fd5b50610136610193366004610c96565b6104df565b3480156101a457600080fd5b5061010360085481565b3480156101ba57600080fd5b50610103600e5481565b3480156101d057600080fd5b506101366101df366004610c7b565b610501565b3480156101f057600080fd5b5061010360095481565b34801561020657600080fd5b50610236610215366004610c7b565b60076020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161010d565b61013661053a565b34801561026557600080fd5b50610103600b5481565b34801561027b57600080fd5b50610103600a5481565b34801561029157600080fd5b506101366102a0366004610cb8565b610856565b3480156102b157600080fd5b50610103600d5481565b6000546001600160a01b031633146102d257600080fd5b6001600160a01b038216600090815260076020526040902054156102f9576102f982610956565b60008111801561031f57506001600160a01b038216600090815260076020526040902054155b1561038557600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103b8565b801580156103aa57506001600160a01b03821660009081526007602052604090205415155b156103b8576103b882610a81565b6001600160a01b0382166000908152600760205260409020546008546103e99183916103e391610b96565b90610ba9565b6008556001600160a01b038216600090815260076020526040902081905561041081610bb5565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461044a57600080fd5b61045381610956565b50565b6001600160a01b03811660009081526007602052604081205461047b57506000919050565b6001600160a01b03821660009081526007602052604081205461049d90610bb5565b6001600160a01b0384166000908152600760205260409020600101549091508082116104cd575060009392505050565b6104d78282610b96565b949350505050565b6000546001600160a01b031633146104f657600080fd5b600d91909155600e55565b6000546001600160a01b0316331461051857600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461055157600080fd5b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561059557600080fd5b505afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd9190610cd1565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061061357610613610cea565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061064457610644610cea565b60200260200101906001600160a01b031690816001600160a01b0316815250508060018151811061067757610677610cea565b60200260200101516001600160a01b03168160008151811061069b5761069b610cea565b60200260200101516001600160a01b0316141561072057600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561070257600080fd5b505af1158015610716573d6000803e3d6000fd5b505050505061078c565b60015460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de9590349061075990600090869030904290600401610d00565b6000604051808303818588803b15801561077257600080fd5b505af1158015610786573d6000803e3d6000fd5b50505050505b6003546040516370a0823160e01b81523060048201526000916108149185916001600160a01b0316906370a082319060240160206040518083038186803b1580156107d657600080fd5b505afa1580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e9190610cd1565b90610b96565b6009549091506108249082610ba9565b600955600854600c5461084e916108459161083f9085610bd8565b90610be4565b600b5490610ba9565b600b55505050565b6000546001600160a01b0316331461086d57600080fd5b60045480610879575050565b60008060005a90505b848210801561089057508383105b1561094f5783600f54106108a4576000600f555b6108d66004600f54815481106108bc576108bc610cea565b6000918252602090912001546001600160a01b0316610bf0565b1561090d5761090d6004600f54815481106108f3576108f3610cea565b6000918252602090912001546001600160a01b0316610956565b61092261091b5a8390610b96565b8390610ba9565b91505a600f8054919250600061093783610d80565b9190505550828061094790610d80565b935050610882565b5050505050565b6001600160a01b0381166000908152600760205260409020546109765750565b600061098182610456565b90508015610a7d57600a546109969082610ba9565b600a5560035460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156109e757600080fd5b505af11580156109fb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1f9190610d9b565b506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610a539082610ba9565b6001600160a01b038316600090815260076020526040902060028101919091555461041090610bb5565b5050565b60048054610a9190600190610dbd565b81548110610aa157610aa1610cea565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610adf57610adf610cea565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610b2b90600190610dbd565b81548110610b3b57610b3b610cea565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610b7157610b71610dd4565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610ba28284610dbd565b9392505050565b6000610ba28284610dea565b6000610bd2600c5461083f600b5485610bd890919063ffffffff16565b92915050565b6000610ba28284610e02565b6000610ba28284610e21565b600d546001600160a01b03821660009081526006602052604081205490914291610c1a9190610dea565b108015610bd25750600e54610c2e83610456565b1192915050565b80356001600160a01b0381168114610c4c57600080fd5b919050565b60008060408385031215610c6457600080fd5b610c6d83610c35565b946020939093013593505050565b600060208284031215610c8d57600080fd5b610ba282610c35565b60008060408385031215610ca957600080fd5b50508035926020909101359150565b600060208284031215610cca57600080fd5b5035919050565b600060208284031215610ce357600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d4a5784516001600160a01b031683529383019391830191600101610d25565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415610d9457610d94610d6a565b5060010190565b600060208284031215610dad57600080fd5b81518015158114610ba257600080fd5b600082821015610dcf57610dcf610d6a565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610dfd57610dfd610d6a565b500190565b6000816000190483118215151615610e1c57610e1c610d6a565b500290565b600082610e3e57634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122097ba9ab90eb9b3f0d0c7f4cc29de4a6fa42531da0ffb01a0268790429724698864736f6c634300080900330000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa6100000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa6100000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa61

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c806381a4a6d811610213578063bf56b37111610123578063e66b1d1e116100ab578063fabe62831161007a578063fabe628314610c74578063fe575a8714610c94578063fe9fbb8014610cc4578063fed0d2a114610ce4578063ffb54a9914610cfa57600080fd5b8063e66b1d1e14610bff578063f0b37c0414610c1f578063f0fc6bca14610c3f578063f887ea4014610c5457600080fd5b8063d920334e116100f2578063d920334e14610b23578063da00097d14610b43578063dd62ed3e14610b64578063df37ec9514610baa578063e424390314610bdf57600080fd5b8063bf56b37114610ac2578063c9567bf914610ad8578063ca33e64c14610aed578063ca987b0e14610b0d57600080fd5b806395d89b41116101a6578063a9059cbb11610175578063a9059cbb14610a1d578063a9f7864b14610a3d578063b242e53414610a5d578063b6a5d7de14610a7d578063bad3ea6a14610a9d57600080fd5b806395d89b411461099957806398118cb4146109c7578063a3a2e89e146109dd578063a8aa1b31146109fd57600080fd5b80638b42507f116101e25780638b42507f146109135780638e2eee84146109435780638ea5220f14610963578063935fe68c1461098357600080fd5b806381a4a6d8146108a6578063893d20e8146108bb578063896648c1146108d95780638aee8127146108f357600080fd5b8063479f66d81161030e5780636827e764116102a1578063773fcb5c11610270578063773fcb5c1461081a57806379cc67901461083a5780637d1db4a51461085a5780637db1342c14610870578063807c2d9c1461089057600080fd5b80636827e764146107805780636b67c4df1461079657806370a08231146107ac57806375f0a874146107e257600080fd5b8063588f3249116102dd578063588f3249146106e55780635e562f3b1461070557806362dd713214610725578063650c42261461076057600080fd5b8063479f66d8146106665780634a74bb0214610686578063571ac8b0146106a557806357820abb146106c557600080fd5b80632f54bf6e1161039157806338bf3cfa1161036057806338bf3cfa146105ac5780633f4218e0146105cc57806342966c68146105fc5780634355855a1461061c57806344de2e4c1461064c57600080fd5b80632f54bf6e1461052b5780633121c7c01461055a578063313ce56714610570578063315dca291461058c57600080fd5b806318160ddd116103cd57806318160ddd146104be57806323b872dd146104d357806325429b3d146104f35780632bb14e1d1461051557600080fd5b80630445b6671461040a57806306fdde031461043357806308c5a8dd1461046e578063095ea7b31461049e57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b50610420601f5481565b6040519081526020015b60405180910390f35b34801561043f57600080fd5b506040805180820190915260098152685361696e7420496e7560b81b60208201525b60405161042a9190612a2f565b34801561047a57600080fd5b50601e5461048e9062010000900460ff1681565b604051901515815260200161042a565b3480156104aa57600080fd5b5061048e6104b9366004612a9c565b610d14565b3480156104ca57600080fd5b50610420610d80565b3480156104df57600080fd5b5061048e6104ee366004612ac8565b610df1565b3480156104ff57600080fd5b5061051361050e366004612b09565b610eb3565b005b34801561052157600080fd5b50610420600f5481565b34801561053757600080fd5b5061048e610546366004612b2b565b6000546001600160a01b0391821691161490565b34801561056657600080fd5b5061042060115481565b34801561057c57600080fd5b506040516012815260200161042a565b34801561059857600080fd5b506105136105a7366004612b48565b610f89565b3480156105b857600080fd5b506105136105c7366004612b2b565b610fed565b3480156105d857600080fd5b5061048e6105e7366004612b2b565b60086020526000908152604090205460ff1681565b34801561060857600080fd5b50610513610617366004612b93565b611080565b34801561062857600080fd5b5061048e610637366004612b2b565b600a6020526000908152604090205460ff1681565b34801561065857600080fd5b5060055461048e9060ff1681565b34801561067257600080fd5b50610513610681366004612b93565b61108f565b34801561069257600080fd5b50601e5461048e90610100900460ff1681565b3480156106b157600080fd5b5061048e6106c0366004612b2b565b6110c9565b3480156106d157600080fd5b506105136106e0366004612a9c565b6110dd565b3480156106f157600080fd5b50610513610700366004612b93565b6110ea565b34801561071157600080fd5b50610513610720366004612bba565b6110f6565b34801561073157600080fd5b50610745610740366004612bd7565b611133565b6040805193845260208401929092529082015260600161042a565b34801561076c57600080fd5b5061051361077b366004612c2c565b6114b0565b34801561078c57600080fd5b5061042060105481565b3480156107a257600080fd5b50610420600e5481565b3480156107b857600080fd5b506104206107c7366004612b2b565b6001600160a01b031660009081526006602052604090205490565b3480156107ee57600080fd5b50601654610802906001600160a01b031681565b6040516001600160a01b03909116815260200161042a565b34801561082657600080fd5b50610513610835366004612c5e565b61156f565b34801561084657600080fd5b50610513610855366004612a9c565b6116b0565b34801561086657600080fd5b5061042060035481565b34801561087c57600080fd5b5061051361088b366004612b93565b6116bc565b34801561089c57600080fd5b5061042060045481565b3480156108b257600080fd5b50600254610420565b3480156108c757600080fd5b506000546001600160a01b0316610802565b3480156108e557600080fd5b50600b5461048e9060ff1681565b3480156108ff57600080fd5b5061051361090e366004612b2b565b6116e6565b34801561091f57600080fd5b5061048e61092e366004612b2b565b60096020526000908152604090205460ff1681565b34801561094f57600080fd5b5061051361095e366004612c97565b61176c565b34801561096f57600080fd5b50601754610802906001600160a01b031681565b34801561098f57600080fd5b5061042060135481565b3480156109a557600080fd5b5060408051808201909152600581526414d052539560da1b6020820152610461565b3480156109d357600080fd5b50610420600d5481565b3480156109e957600080fd5b506105136109f8366004612c5e565b61180b565b348015610a0957600080fd5b50601954610802906001600160a01b031681565b348015610a2957600080fd5b5061048e610a38366004612a9c565b61185b565b348015610a4957600080fd5b50610513610a58366004612b09565b611868565b348015610a6957600080fd5b50610513610a78366004612c5e565b6118c9565b348015610a8957600080fd5b50610513610a98366004612b2b565b611978565b348015610aa957600080fd5b50601c546108029061010090046001600160a01b031681565b348015610ace57600080fd5b50610420601b5481565b348015610ae457600080fd5b506105136119c9565b348015610af957600080fd5b50601554610802906001600160a01b031681565b348015610b1957600080fd5b5061042060145481565b348015610b2f57600080fd5b50610513610b3e366004612b93565b611a02565b348015610b4f57600080fd5b50601e5461048e906301000000900460ff1681565b348015610b7057600080fd5b50610420610b7f366004612d12565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610bb657600080fd5b50610bca610bc5366004612d40565b611a2c565b6040805192835260208301919091520161042a565b348015610beb57600080fd5b50610513610bfa366004612d89565b611c14565b348015610c0b57600080fd5b50610513610c1a366004612bba565b611c81565b348015610c2b57600080fd5b50610513610c3a366004612b2b565b611cb9565b348015610c4b57600080fd5b50610513611d04565b348015610c6057600080fd5b50601854610802906001600160a01b031681565b348015610c8057600080fd5b50610513610c8f366004612c5e565b611d61565b348015610ca057600080fd5b5061048e610caf366004612b2b565b600c6020526000908152604090205460ff1681565b348015610cd057600080fd5b5061048e610cdf366004612b2b565b611db1565b348015610cf057600080fd5b5061042060125481565b348015610d0657600080fd5b50601c5461048e9060ff1681565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d6f9086815260200190565b60405180910390a350600192915050565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead60009081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22546002549192610dec929091610de69190611df3565b90611df3565b905090565b6001600160a01b038316600090815260076020908152604080832033845290915281205460001914610e9e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600782528381203382529091529190912054610e79918490611dff565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b610ea9848484611e2b565b90505b9392505050565b610ebc33611db1565b610ee15760405162461bcd60e51b8152600401610ed890612ddc565b60405180910390fd5b60118290556012819055601054600f54600e54600d54600093610f11939092610f0b928391611dcf565b90611dcf565b90506103e8811115610f2257600080fd5b610f43612710610f3d60115484611ddb90919063ffffffff16565b90611de7565b60138190556103e81015610f5657600080fd5b610f71612710610f3d60125484611ddb90919063ffffffff16565b60148190556103e81015610f8457600080fd5b505050565b610f9233611db1565b610fae5760405162461bcd60e51b8152600401610ed890612ddc565b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b6000546001600160a01b031633146110175760405162461bcd60e51b8152600401610ed890612e01565b600080546001600160a01b039081168252600160209081526040808420805460ff1916905583546001600160a01b031916909355915190831681527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61108b60008261185b565b5050565b61109833611db1565b6110b45760405162461bcd60e51b8152600401610ed890612ddc565b620b71b08111156110c457600080fd5b601d55565b60006110d782600019610d14565b92915050565b610f848261dead83610df1565b61108b61dead8261185b565b6000546001600160a01b031633146111205760405162461bcd60e51b8152600401610ed890612e01565b600b805460ff1916911515919091179055565b601e805460ff191660011790556000808061114f33308b612457565b50601854611166906001600160a01b03168a610d14565b50601a546040516323b872dd60e01b8152336004820152306024820152604481018a90526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156111b957600080fd5b505af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612e21565b50601a5460185460405163095ea7b360e01b81526001600160a01b039182166004820152602481018b905291169063095ea7b390604401602060405180830381600087803b15801561124257600080fd5b505af1158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a9190612e21565b50601854601a5460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018c9052606481018b9052608481018a905260a4810189905287821660c482015260e4810187905291169063e8e337009061010401606060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132d9190612e3e565b919450925090508289111561136a57601854611353906001600160a01b03166000610d14565b506113683033611363868d612e82565b612457565b505b8188111561149757601a5460185460405163095ea7b360e01b81526001600160a01b0391821660048201526000602482015291169063095ea7b390604401602060405180830381600087803b1580156113c257600080fd5b505af11580156113d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fa9190612e21565b50601a546001600160a01b031663a9059cbb33611417858c612e82565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561145d57600080fd5b505af1158015611471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114959190612e21565b505b601e805460ff1916905591989097509095509350505050565b6114b933611db1565b6114d55760405162461bcd60e51b8152600401610ed890612ddc565b600d849055600f839055600e829055601081905560006114fb82610f0b86818988611dcf565b90506103e881111561150c57600080fd5b611527612710610f3d60115484611ddb90919063ffffffff16565b60138190556103e8101561153a57600080fd5b611555612710610f3d60125484611ddb90919063ffffffff16565b60148190556103e8101561156857600080fd5b5050505050565b61157833611db1565b6115945760405162461bcd60e51b8152600401610ed890612ddc565b6001600160a01b03821630148015906115bb57506019546001600160a01b03838116911614155b6115c457600080fd5b6001600160a01b0382166000908152600a60205260409020805460ff1916821580159190911790915561166257601c54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152610100909204909116906314b6ca96906044015b600060405180830381600087803b15801561164657600080fd5b505af115801561165a573d6000803e3d6000fd5b505050505050565b601c546001600160a01b0383811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca969060440161162c565b610f8482600083610df1565b6116c533611db1565b6116e15760405162461bcd60e51b8152600401610ed890612ddc565b600455565b6116ef33611db1565b61170b5760405162461bcd60e51b8152600401610ed890612ddc565b601c54604051638aee812760e01b81526001600160a01b03838116600483015261010090920490911690638aee812790602401600060405180830381600087803b15801561175857600080fd5b505af1158015611568573d6000803e3d6000fd5b6000546001600160a01b031633146117965760405162461bcd60e51b8152600401610ed890612e01565b60005b828110156118055781600c60008686858181106117b8576117b8612e99565b90506020020160208101906117cd9190612b2b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117fe81612eaf565b9050611799565b50505050565b61181433611db1565b6118305760405162461bcd60e51b8152600401610ed890612ddc565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000610eac338484611e2b565b61187133611db1565b61188d5760405162461bcd60e51b8152600401610ed890612ddc565b601c546040516316a4744b60e11b815260048101849052602481018390526101009091046001600160a01b031690632d48e8969060440161162c565b6000546001600160a01b031633146118f35760405162461bcd60e51b8152600401610ed890612e01565b600080546001600160a01b039081168252600160208181526040808520805460ff199081168815151790915585546001600160a01b0319169488169485178655848652948190208054909516909217909355519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a15050565b6000546001600160a01b031633146119a25760405162461bcd60e51b8152600401610ed890612e01565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000546001600160a01b031633146119f35760405162461bcd60e51b8152600401610ed890612e01565b601c805460ff19166001179055565b611a0b33611db1565b611a275760405162461bcd60e51b8152600401610ed890612ddc565b600355565b601e805460ff191660011790556019546040516323b872dd60e01b81523360048201523060248201526044810187905260009182916001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611a9057600080fd5b505af1158015611aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac89190612e21565b5060195460185460405163095ea7b360e01b81526001600160a01b039182166004820152602481018a905291169063095ea7b390604401602060405180830381600087803b158015611b1957600080fd5b505af1158015611b2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b519190612e21565b50601854601a54604051635d5155ef60e11b81523060048201526001600160a01b039182166024820152604481018a9052606481018990526084810188905286821660a482015260c4810186905291169063baa2abde9060e4016040805180830381600087803b158015611bc457600080fd5b505af1158015611bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfc9190612eca565b601e805460ff19169055909890975095505050505050565b611c1d33611db1565b611c395760405162461bcd60e51b8152600401610ed890612ddc565b601e8054601f94909455901515620100000262ff00001992151563010000000263ff00000019951515610100029590951663ff00ff0019909416939093179390931716179055565b611c8a33611db1565b611ca65760405162461bcd60e51b8152600401610ed890612ddc565b6005805460ff1916911515919091179055565b6000546001600160a01b03163314611ce35760405162461bcd60e51b8152600401610ed890612e01565b6001600160a01b03166000908152600160205260409020805460ff19169055565b601c54604051630afbf02f60e11b81523360048201526101009091046001600160a01b0316906315f7e05e90602401600060405180830381600087803b158015611d4d57600080fd5b505af1158015611805573d6000803e3d6000fd5b611d6a33611db1565b611d865760405162461bcd60e51b8152600401610ed890612ddc565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000610eac8284612eee565b6000610eac8284612f06565b6000610eac8284612f25565b6000610eac8284612e82565b60008184841115611e235760405162461bcd60e51b8152600401610ed89190612a2f565b505050900390565b601e5460009060ff1615611e4b57611e44848484612457565b9050610eac565b6001600160a01b03841660009081526001602052604090205460ff16158015611e8d57506001600160a01b03831660009081526001602052604090205460ff16155b15611eb457601c5460ff16611eb45760405162461bcd60e51b8152600401610ed890612f47565b60035482111580611edd57506001600160a01b03841660009081526009602052604090205460ff165b611f1d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610ed8565b6019546001600160a01b031633141580611f3f5750601e5462010000900460ff165b8015611f4e5750601e5460ff16155b8015611f615750601e54610100900460ff165b8015611f7e5750601f543060009081526006602052604090205410155b15611f8b57611f8b61253d565b601b54158015611fa857506019546001600160a01b038481169116145b15611fd8576001600160a01b038416600090815260066020526040902054611fcf57600080fd5b611fd843601b55565b600b5460ff161561205f576001600160a01b0384166000908152600c602052604090205460ff1615801561202557506001600160a01b0383166000908152600c602052604090205460ff16155b61205f5760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610ed8565b6019546001600160a01b03848116911614801561209557506001600160a01b03841660009081526001602052604090205460ff16155b156120bc57601c5460ff166120bc5760405162461bcd60e51b8152600401610ed890612f47565b6019546001600160a01b038481169116148015906120f357506001600160a01b03831660009081526001602052604090205460ff16155b1561211a57601c5460ff1661211a5760405162461bcd60e51b8152600401610ed890612f47565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526006909152919091205461216c918490611dff565b6001600160a01b0380861660009081526006602090815260408083209490945591861681526009909152205460ff161580156121aa575060055460ff165b156121e0576004546001600160a01b0384166000908152600660205260409020546121d59084611dcf565b11156121e057600080fd5b6001600160a01b03841660009081526008602052604081205460ff1615801561222257506001600160a01b03841660009081526008602052604090205460ff16155b61222c5782612237565b61223785858561294a565b6001600160a01b03851660009081526006602052604090205490915061225d9082611dcf565b6001600160a01b038086166000908152600660209081526040808320949094559188168152600a909152205460ff1661230657601c546001600160a01b0386811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b1580156122f357600080fd5b505af1925050508015612304575060015b505b6001600160a01b0384166000908152600a602052604090205460ff1661239c57601c546001600160a01b0385811660008181526006602052604090819020549051630a5b654b60e11b81526004810192909252602482015261010090920416906314b6ca9690604401600060405180830381600087803b15801561238957600080fd5b505af192505050801561239a575060015b505b601c54601d546040516001624d3b8760e01b0319815260048101919091526101009091046001600160a01b03169063ffb2c47990602401600060405180830381600087803b1580156123ed57600080fd5b505af19250505080156123fe575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161244491815260200190565b60405180910390a3506001949350505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546124a8918490611dff565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546124d79083611dcf565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061252b9086815260200190565b60405180910390a35060019392505050565b601e805460ff1916600117905530600090815260066020526040812054601054600f54600e54600d5493949361257b9392610f0b9290918391611dcf565b9050600061259d6002610f3d84610f3d600d5488611ddb90919063ffffffff16565b905060006125ab8483611df3565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106125e5576125e5612e99565b6001600160a01b039283166020918202929092010152601a5482519116908290600190811061261657612616612e99565b6001600160a01b03928316602091820292909201015260185460405163791ac94760e01b815291169063791ac9479061265c908590600090869030904290600401612f75565b600060405180830381600087803b15801561267657600080fd5b505af115801561268a573d6000803e3d6000fd5b5050600d54479250600091506126ac906126a5906002611de7565b8790611df3565b905060006126ce6002610f3d84610f3d600d5488611ddb90919063ffffffff16565b905060006126eb83610f3d600f5487611ddb90919063ffffffff16565b9050600061270884610f3d600e5488611ddb90919063ffffffff16565b9050600061272585610f3d60105489611ddb90919063ffffffff16565b9050601c60019054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561277757600080fd5b505af193505050508015612789575060015b506016546040516000916001600160a01b03169061753090859084818181858888f193505050503d80600081146127dc576040519150601f19603f3d011682016040523d82523d6000602084013e6127e1565b606091505b50506017546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d806000811461283a576040519150601f19603f3d011682016040523d82523d6000602084013e61283f565b606091505b5060009350839250508b1590506129315760185460155460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c4016060604051808303818588803b1580156128bb57600080fd5b505af11580156128cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f49190612e3e565b505060408051888152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601e805460ff191690555050505050505050505050565b60195460009081906001600160a01b038581169116141561296a57506014545b6019546001600160a01b038681169116141561298557506013545b806129935782915050610eac565b60006129a5612710610f3d8685611ddb565b306000908152600660205260409020549091506129c29082611dcf565b30600081815260066020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a139085815260200190565b60405180910390a3612a258482611df3565b9695505050505050565b600060208083528351808285015260005b81811015612a5c57858101830151858201604001528201612a40565b81811115612a6e576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612a9957600080fd5b50565b60008060408385031215612aaf57600080fd5b8235612aba81612a84565b946020939093013593505050565b600080600060608486031215612add57600080fd5b8335612ae881612a84565b92506020840135612af881612a84565b929592945050506040919091013590565b60008060408385031215612b1c57600080fd5b50508035926020909101359150565b600060208284031215612b3d57600080fd5b8135610eac81612a84565b600080600060608486031215612b5d57600080fd5b8335612b6881612a84565b92506020840135612b7881612a84565b91506040840135612b8881612a84565b809150509250925092565b600060208284031215612ba557600080fd5b5035919050565b8015158114612a9957600080fd5b600060208284031215612bcc57600080fd5b8135610eac81612bac565b60008060008060008060c08789031215612bf057600080fd5b863595506020870135945060408701359350606087013592506080870135612c1781612a84565b8092505060a087013590509295509295509295565b60008060008060808587031215612c4257600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612c7157600080fd5b8235612c7c81612a84565b91506020830135612c8c81612bac565b809150509250929050565b600080600060408486031215612cac57600080fd5b833567ffffffffffffffff80821115612cc457600080fd5b818601915086601f830112612cd857600080fd5b813581811115612ce757600080fd5b8760208260051b8501011115612cfc57600080fd5b60209283019550935050840135612b8881612bac565b60008060408385031215612d2557600080fd5b8235612d3081612a84565b91506020830135612c8c81612a84565b600080600080600060a08688031215612d5857600080fd5b8535945060208601359350604086013592506060860135612d7881612a84565b949793965091946080013592915050565b60008060008060808587031215612d9f57600080fd5b8435612daa81612bac565b9350602085013592506040850135612dc181612bac565b91506060850135612dd181612bac565b939692955090935050565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b600060208284031215612e3357600080fd5b8151610eac81612bac565b600080600060608486031215612e5357600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b600082821015612e9457612e94612e6c565b500390565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612ec357612ec3612e6c565b5060010190565b60008060408385031215612edd57600080fd5b505080516020909101519092909150565b60008219821115612f0157612f01612e6c565b500190565b6000816000190483118215151615612f2057612f20612e6c565b500290565b600082612f4257634e487b7160e01b600052601260045260246000fd5b500490565b602080825260149082015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fc55784516001600160a01b031683529383019391830191600101612fa0565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220b25c93e551486f876cc3d8fd4426225f734d62e554214be902b750fbe3c06ec664736f6c63430008090033

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

0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b4799750600000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa6100000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa6100000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa61

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506
Arg [1] : _marketingWallet (address): 0x71f8cE4931D8cded4B28aeF35e1e05452966fa61
Arg [2] : _devWallet (address): 0x71f8cE4931D8cded4B28aeF35e1e05452966fa61
Arg [3] : _liquidityReceiver (address): 0x71f8cE4931D8cded4B28aeF35e1e05452966fa61

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000001b02da8cb0d097eb8d57a175b88c7d8b47997506
Arg [1] : 00000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa61
Arg [2] : 00000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa61
Arg [3] : 00000000000000000000000071f8ce4931d8cded4b28aef35e1e05452966fa61


Loading