Contract Address Details

0xE63fd242c225f93A707931B76d86fC0d12dA41D8

Token
RatMilk (RATM)
Creator
0xd1e4ff–b38c75 at 0x2026c2–6bd32b
Balance
5 mADA
Tokens
Fetching tokens...
Transactions
6 Transactions
Transfers
1 Transfers
Gas Used
238,590
Last Balance Update
43538274
Contract name:
RatMilk




Optimization enabled
false
Compiler version
v0.8.4+commit.c7e474f2




EVM Version
default




Verified at
2022-04-11T01:21:07.836696Z

Constructor Arguments

[
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "owner",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "spender",
				"type": "address"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "value",
				"type": "uint256"
			}
		],
		"name": "Approval",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "previousOwner",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "newOwner",
				"type": "address"
			}
		],
		"name": "OwnershipTransferred",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "tokensSwapped",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "ethReceived",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "tokensIntoLiqudity",
				"type": "uint256"
			}
		],
		"name": "SwapAndLiquify",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": false,
				"internalType": "bool",
				"name": "enabled",
				"type": "bool"
			}
		],
		"name": "SwapAndLiquifyEnabledUpdated",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "amountIn",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "address[]",
				"name": "path",
				"type": "address[]"
			}
		],
		"name": "SwapETHForTokens",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "amountIn",
				"type": "uint256"
			},
			{
				"indexed": false,
				"internalType": "address[]",
				"name": "path",
				"type": "address[]"
			}
		],
		"name": "SwapTokensForETH",
		"type": "event"
	},
	{
		"anonymous": false,
		"inputs": [
			{
				"indexed": true,
				"internalType": "address",
				"name": "from",
				"type": "address"
			},
			{
				"indexed": true,
				"internalType": "address",
				"name": "to",
				"type": "address"
			},
			{
				"indexed": false,
				"internalType": "uint256",
				"name": "value",
				"type": "uint256"
			}
		],
		"name": "Transfer",
		"type": "event"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "account",
				"type": "address"
			}
		],
		"name": "addMarketPair",
		"outputs": [],
		"stateMutability": "nonpayable",
		"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": "newRouterAddress",
				"type": "address"
			}
		],
		"name": "changeRouterVersion",
		"outputs": [
			{
				"internalType": "address",
				"name": "newPairAddress",
				"type": "address"
			}
		],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "spender",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "subtractedValue",
				"type": "uint256"
			}
		],
		"name": "decreaseAllowance",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "bool",
				"name": "newValue",
				"type": "bool"
			}
		],
		"name": "enableDisableWalletLimit",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "spender",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "addedValue",
				"type": "uint256"
			}
		],
		"name": "increaseAllowance",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "newLiquidityTax",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "newteamTax",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "newtreasuryTax",
				"type": "uint256"
			}
		],
		"name": "setBuyTaxes",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "newLiquidityShare",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "newteamShare",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "newtreasuryShare",
				"type": "uint256"
			}
		],
		"name": "setDistributionSettings",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "account",
				"type": "address"
			},
			{
				"internalType": "bool",
				"name": "newValue",
				"type": "bool"
			}
		],
		"name": "setIsExcludedFromFees",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "holder",
				"type": "address"
			},
			{
				"internalType": "bool",
				"name": "exempt",
				"type": "bool"
			}
		],
		"name": "setIsTxLimitExcept",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "holder",
				"type": "address"
			},
			{
				"internalType": "bool",
				"name": "exempt",
				"type": "bool"
			}
		],
		"name": "setIsWalletLimitExcept",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "maxTxAmount",
				"type": "uint256"
			}
		],
		"name": "setMaxTxAmount",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "newLimit",
				"type": "uint256"
			}
		],
		"name": "setNumTokensBeforeSwap",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "newLiquidityTax",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "newteamTax",
				"type": "uint256"
			},
			{
				"internalType": "uint256",
				"name": "newtreasuryTax",
				"type": "uint256"
			}
		],
		"name": "setSellTaxes",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "bool",
				"name": "newValue",
				"type": "bool"
			}
		],
		"name": "setSwapAndLiquifyByLimitOnly",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "bool",
				"name": "_enabled",
				"type": "bool"
			}
		],
		"name": "setSwapAndLiquifyEnabled",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "newAddress",
				"type": "address"
			}
		],
		"name": "setteamWalletAddress",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "newAddress",
				"type": "address"
			}
		],
		"name": "settreasuryWalletAddress",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "uint256",
				"name": "newLimit",
				"type": "uint256"
			}
		],
		"name": "setWalletLimit",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "recipient",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "amount",
				"type": "uint256"
			}
		],
		"name": "transfer",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "sender",
				"type": "address"
			},
			{
				"internalType": "address",
				"name": "recipient",
				"type": "address"
			},
			{
				"internalType": "uint256",
				"name": "amount",
				"type": "uint256"
			}
		],
		"name": "transferFrom",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "newOwner",
				"type": "address"
			}
		],
		"name": "transferOwnership",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"stateMutability": "payable",
		"type": "receive"
	},
	{
		"inputs": [],
		"name": "waiveOwnership",
		"outputs": [],
		"stateMutability": "nonpayable",
		"type": "function"
	},
	{
		"inputs": [],
		"stateMutability": "nonpayable",
		"type": "constructor"
	},
	{
		"inputs": [],
		"name": "_liquidityShares",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "_maxTxAmount",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "_taxTotal",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "_teamShares",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "_totalDistributionShares",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "_treasuryShares",
		"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": "owner",
				"type": "address"
			},
			{
				"internalType": "address",
				"name": "spender",
				"type": "address"
			}
		],
		"name": "allowance",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "account",
				"type": "address"
			}
		],
		"name": "balanceOf",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "checkWalletLimit",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "deadAddress",
		"outputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "decimals",
		"outputs": [
			{
				"internalType": "uint8",
				"name": "",
				"type": "uint8"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "getCirculatingSupply",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"name": "isExcludedFromFees",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"name": "isMarketPair",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"name": "isTxLimitExcept",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"name": "isWalletLimitExcept",
		"outputs": [
			{
				"internalType": "bool",
				"name": "",
				"type": "bool"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "name",
		"outputs": [
			{
				"internalType": "string",
				"name": "",
				"type": "string"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "owner",
		"outputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "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": "symbol",
		"outputs": [
			{
				"internalType": "string",
				"name": "",
				"type": "string"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "totalSupply",
		"outputs": [
			{
				"internalType": "uint256",
				"name": "",
				"type": "uint256"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "uniswapPair",
		"outputs": [
			{
				"internalType": "address",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	},
	{
		"inputs": [],
		"name": "uniswapV2Router",
		"outputs": [
			{
				"internalType": "contract IUniswapV2Router02",
				"name": "",
				"type": "address"
			}
		],
		"stateMutability": "view",
		"type": "function"
	}
]
              

Contract source code

/*
    Website : https://ratmilk.finance/
    Telegram Group : https://t.me/ratmilkPortal
    Total Supply : 100,000,000 RATM
    Max wallet : 2,000,000 RATM
*/


// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;


abstract contract Context {

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

contract RatMilk is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "RatMilk";
    string private _symbol = "RATM";
    uint8 private _decimals = 9;

    address payable private teamWalletAddress = payable(0xd1E4FF0287f4097F39Bc1d5774E439DD37B38C75);
    address payable private treasuryWalletAddress = payable(0xd1E4FF0287f4097F39Bc1d5774E439DD37B38C75);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFees;
    mapping (address => bool) public isWalletLimitExcept;
    mapping (address => bool) public isTxLimitExcept;
    mapping (address => bool) public isMarketPair;

    uint256 private _buyLiquidityFees = 1;
    uint256 private _buyteamFees = 7;
    uint256 private _buytreasuryFees = 7;
    uint256 private _sellLiquidityFees = 1;
    uint256 private _sellteamFees = 7;
    uint256 private _selltreasuryFees = 7;

    uint256 public _liquidityShares = 2;
    uint256 public _teamShares = 10;
    uint256 public _treasuryShares = 10;

    uint256 private _totalTaxIfBuying = 15;
    uint256 private _totalTaxIfSelling = 15;
    uint256 public _taxTotal = 8;
    uint256 public _totalDistributionShares = 22;

    uint256 private _totalSupply = 100* 10**5 * 10**9;
    uint256 public _maxTxAmount = 100 * 10**5 * 10**9;
    uint256 public _walletMax = 2 * 10**5 * 10**9;
    uint256 private minimumTokensBeforeSwap = 250 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x9D2E30C2FB648BeE307EDBaFDb461b09DF79516C); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

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

        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFees.add(_buyteamFees).add(_buytreasuryFees);
        _totalTaxIfSelling = _sellLiquidityFees.add(_sellteamFees).add(_selltreasuryFees);
        _totalDistributionShares = _liquidityShares.add(_teamShares).add(_treasuryShares);

        isWalletLimitExcept[owner()] = true;
        isWalletLimitExcept[address(uniswapPair)] = true;
        isWalletLimitExcept[address(this)] = true;
        
        isTxLimitExcept[owner()] = true;
        isTxLimitExcept[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

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

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

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

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

    function addMarketPair(address account) public onlyOwner {
        isMarketPair[account] = true;
    }

    function setIsTxLimitExcept(address holder, bool exempt) external onlyOwner {
        isTxLimitExcept[holder] = exempt;
    }
    
    function setIsExcludedFromFees(address account, bool newValue) public onlyOwner {
        isExcludedFromFees[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newteamTax, uint256 newtreasuryTax) external onlyOwner() {
        _buyLiquidityFees = newLiquidityTax;
        _buyteamFees = newteamTax;
        _buytreasuryFees = newtreasuryTax;

        _totalTaxIfBuying = _buyLiquidityFees.add(_buyteamFees).add(_buytreasuryFees);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newteamTax, uint256 newtreasuryTax) external onlyOwner() {
        _sellLiquidityFees = newLiquidityTax;
        _sellteamFees = newteamTax;
        _selltreasuryFees = newtreasuryTax;

        _totalTaxIfSelling = _sellLiquidityFees.add(_sellteamFees).add(_selltreasuryFees);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newteamShare, uint256 newtreasuryShare) external onlyOwner() {
        _liquidityShares = newLiquidityShare;
        _teamShares = newteamShare;
        _treasuryShares = newtreasuryShare;

        _totalDistributionShares = _liquidityShares.add(_teamShares).add(_treasuryShares);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount <= (100 * 10**5 * 10**9), "Max wallet should be less or euqal to 4% totalSupply");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExcept(address holder, bool exempt) external onlyOwner {
        isWalletLimitExcept[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setteamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

    function settreasuryWalletAddress(address newAddress) external onlyOwner() {
        treasuryWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExcept[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

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

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExcept[sender] && !isTxLimitExcept[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

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

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

            if(checkWalletLimit && !isWalletLimitExcept[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShares).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShares.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShares).div(totalETHFee).div(2);
        uint256 amountETHtreasury = amountReceived.mul(_treasuryShares).div(totalETHFee);
        uint256 amountETHteam = amountReceived.sub(amountETHLiquidity).sub(amountETHtreasury);

        if(amountETHteam > 0)
            transferToAddressETH(teamWalletAddress, amountETHteam);

        if(amountETHtreasury > 0)
            transferToAddressETH(treasuryWalletAddress, amountETHtreasury);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SwapAndLiquify","inputs":[{"type":"uint256","name":"tokensSwapped","internalType":"uint256","indexed":false},{"type":"uint256","name":"ethReceived","internalType":"uint256","indexed":false},{"type":"uint256","name":"tokensIntoLiqudity","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SwapAndLiquifyEnabledUpdated","inputs":[{"type":"bool","name":"enabled","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SwapETHForTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256","indexed":false},{"type":"address[]","name":"path","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"event","name":"SwapTokensForETH","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256","indexed":false},{"type":"address[]","name":"path","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_liquidityShares","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_taxTotal","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_teamShares","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalDistributionShares","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_treasuryShares","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_walletMax","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addMarketPair","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"newPairAddress","internalType":"address"}],"name":"changeRouterVersion","inputs":[{"type":"address","name":"newRouterAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkWalletLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deadAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableDisableWalletLimit","inputs":[{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromFees","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isMarketPair","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTxLimitExcept","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWalletLimitExcept","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBuyTaxes","inputs":[{"type":"uint256","name":"newLiquidityTax","internalType":"uint256"},{"type":"uint256","name":"newteamTax","internalType":"uint256"},{"type":"uint256","name":"newtreasuryTax","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionSettings","inputs":[{"type":"uint256","name":"newLiquidityShare","internalType":"uint256"},{"type":"uint256","name":"newteamShare","internalType":"uint256"},{"type":"uint256","name":"newtreasuryShare","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsExcludedFromFees","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExcept","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsWalletLimitExcept","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxTxAmount","inputs":[{"type":"uint256","name":"maxTxAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNumTokensBeforeSwap","inputs":[{"type":"uint256","name":"newLimit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSellTaxes","inputs":[{"type":"uint256","name":"newLiquidityTax","internalType":"uint256"},{"type":"uint256","name":"newteamTax","internalType":"uint256"},{"type":"uint256","name":"newtreasuryTax","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapAndLiquifyByLimitOnly","inputs":[{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapAndLiquifyEnabled","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWalletLimit","inputs":[{"type":"uint256","name":"newLimit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setteamWalletAddress","inputs":[{"type":"address","name":"newAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"settreasuryWalletAddress","inputs":[{"type":"address","name":"newAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyByLimitOnly","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"uniswapPair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"uniswapV2Router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"waiveOwnership","inputs":[]},{"type":"receive","stateMutability":"payable"}]
            

Deployed ByteCode

0x6080604052600436106102975760003560e01c8063914eb66a1161015a578063bb47cc0c116100c1578063dd62ed3e1161007a578063dd62ed3e14610a4b578063e207a92b14610a88578063ec28438a14610ab1578063f1d5f51714610ada578063f2fde38b14610b03578063f872858a14610b2c5761029e565b8063bb47cc0c1461093b578063c2d4640e14610966578063c49b9a801461098f578063c816841b146109b8578063d6efa6c0146109e3578063da00097d14610a205761029e565b8063a5d69d1f11610113578063a5d69d1f1461082f578063a661df9114610858578063a9059cbb14610881578063adf18693146108be578063b1a8abdb146108e7578063b6d2e516146109125761029e565b8063914eb66a14610731578063915ebb0b1461074857806395d89b41146107715780639e3fa3231461079c578063a08e671f146107c7578063a457c2d7146107f25761029e565b806339509351116101fe57806370a08231116101b757806370a082311461061f5780637d1db4a51461065c578063807c2d9c1461068757806389e4e243146106b25780638da5cb5b146106dd578063906d6235146107085761029e565b806339509351146104d75780633b97084a146105145780633ecad2711461053d5780634a74bb021461057a5780634fbee193146105a55780635881f3ef146105e25761029e565b80631870517a116102505780631870517a146103c757806323b872dd146103f05780632563ae831461042d57806327c8f835146104565780632b112e4914610481578063313ce567146104ac5761029e565b8063044466d1146102a357806306fdde03146102e0578063087332141461030b578063095ea7b3146103345780631694505e1461037157806318160ddd1461039c5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102ca60048036038101906102c59190613b38565b610b57565b6040516102d79190614098565b60405180910390f35b3480156102ec57600080fd5b506102f5610b77565b60405161030291906140ce565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190613cdf565b610c09565b005b34801561034057600080fd5b5061035b60048036038101906103569190613c51565b610ce9565b6040516103689190614098565b60405180910390f35b34801561037d57600080fd5b50610386610d07565b60405161039391906140b3565b60405180910390f35b3480156103a857600080fd5b506103b1610d2d565b6040516103be9190614230565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190613cdf565b610d37565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613bc6565b610e17565b6040516104249190614098565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613c8d565b610ef1565b005b34801561046257600080fd5b5061046b610fa3565b6040516104789190613ff3565b60405180910390f35b34801561048d57600080fd5b50610496610fc7565b6040516104a39190614230565b60405180910390f35b3480156104b857600080fd5b506104c161100b565b6040516104ce91906142d5565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190613c51565b611022565b60405161050b9190614098565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190613cb6565b6110d5565b005b34801561054957600080fd5b50610564600480360381019061055f9190613b38565b611174565b6040516105719190614098565b60405180910390f35b34801561058657600080fd5b5061058f611194565b60405161059c9190614098565b60405180910390f35b3480156105b157600080fd5b506105cc60048036038101906105c79190613b38565b6111a7565b6040516105d99190614098565b60405180910390f35b3480156105ee57600080fd5b5061060960048036038101906106049190613b38565b6111c7565b6040516106169190613ff3565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190613b38565b611725565b6040516106539190614230565b60405180910390f35b34801561066857600080fd5b5061067161176e565b60405161067e9190614230565b60405180910390f35b34801561069357600080fd5b5061069c611774565b6040516106a99190614230565b60405180910390f35b3480156106be57600080fd5b506106c761177a565b6040516106d49190614230565b60405180910390f35b3480156106e957600080fd5b506106f2611780565b6040516106ff9190613ff3565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190613c15565b6117a9565b005b34801561073d57600080fd5b50610746611899565b005b34801561075457600080fd5b5061076f600480360381019061076a9190613b38565b6119ec565b005b34801561077d57600080fd5b50610786611ac5565b60405161079391906140ce565b60405180910390f35b3480156107a857600080fd5b506107b1611b57565b6040516107be9190614230565b60405180910390f35b3480156107d357600080fd5b506107dc611b5d565b6040516107e99190614230565b60405180910390f35b3480156107fe57600080fd5b5061081960048036038101906108149190613c51565b611b63565b6040516108269190614098565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190613c8d565b611c30565b005b34801561086457600080fd5b5061087f600480360381019061087a9190613b38565b611ce2565b005b34801561088d57600080fd5b506108a860048036038101906108a39190613c51565b611dbb565b6040516108b59190614098565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e09190613c15565b611dda565b005b3480156108f357600080fd5b506108fc611eca565b6040516109099190614230565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613c15565b611ed0565b005b34801561094757600080fd5b50610950611fc0565b60405161095d9190614230565b60405180910390f35b34801561097257600080fd5b5061098d60048036038101906109889190613cdf565b611fc6565b005b34801561099b57600080fd5b506109b660048036038101906109b19190613c8d565b6120a6565b005b3480156109c457600080fd5b506109cd61218f565b6040516109da9190613ff3565b60405180910390f35b3480156109ef57600080fd5b50610a0a6004803603810190610a059190613b38565b6121b5565b604051610a179190614098565b60405180910390f35b348015610a2c57600080fd5b50610a356121d5565b604051610a429190614098565b60405180910390f35b348015610a5757600080fd5b50610a726004803603810190610a6d9190613b8a565b6121e8565b604051610a7f9190614230565b60405180910390f35b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190613b38565b61226f565b005b348015610abd57600080fd5b50610ad86004803603810190610ad39190613cb6565b61235f565b005b348015610ae657600080fd5b50610b016004803603810190610afc9190613cb6565b612448565b005b348015610b0f57600080fd5b50610b2a6004803603810190610b259190613b38565b6124e7565b005b348015610b3857600080fd5b50610b416126a9565b604051610b4e9190614098565b60405180910390f35b600a6020528060005260406000206000915054906101000a900460ff1681565b606060028054610b8690614518565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb290614518565b8015610bff5780601f10610bd457610100808354040283529160200191610bff565b820191906000526020600020905b815481529060010190602001808311610be257829003601f168201915b5050505050905090565b610c1161271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c95906141d0565b60405180910390fd5b82600f819055508160108190555080601181905550610cde601154610cd0601054600f546126bc90919063ffffffff16565b6126bc90919063ffffffff16565b601681905550505050565b6000610cfd610cf661271a565b8484612722565b6001905092915050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b610d3f61271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906141d0565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610e0c600e54610dfe600d54600c546126bc90919063ffffffff16565b6126bc90919063ffffffff16565b601581905550505050565b6000610e248484846128ed565b50610ee684610e3161271a565b610ee1856040518060600160405280602881526020016148f860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e9761271a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed29092919063ffffffff16565b612722565b600190509392505050565b610ef961271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141d0565b60405180910390fd5b80601e60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000611006610ff57f000000000000000000000000000000000000000000000000000000000000dead611725565b601954612f3690919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b60006110cb61102f61271a565b846110c6856007600061104061271a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126bc90919063ffffffff16565b612722565b6001905092915050565b6110dd61271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906141d0565b60405180910390fd5b80601c8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b60006111d161271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611255906141d0565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a957600080fd5b505afa1580156112bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e19190613b61565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561134357600080fd5b505afa158015611357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137b9190613b61565b6040518363ffffffff1660e01b815260040161139892919061400e565b60206040518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e89190613b61565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a9578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149d9190613b61565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ff57600080fd5b505afa158015611513573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115379190613b61565b6040518363ffffffff1660e01b815260040161155492919061400e565b602060405180830381600087803b15801561156e57600080fd5b505af1158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190613b61565b91505b81601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b60145481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117b161271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611835906141d0565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118a161271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906141d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6119f461271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a78906141d0565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054611ad490614518565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0090614518565b8015611b4d5780601f10611b2257610100808354040283529160200191611b4d565b820191906000526020600020905b815481529060010190602001808311611b3057829003601f168201915b5050505050905090565b60125481565b60185481565b6000611c26611b7061271a565b84611c21856040518060600160405280602581526020016149206025913960076000611b9a61271a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed29092919063ffffffff16565b612722565b6001905092915050565b611c3861271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc906141d0565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b611cea61271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6e906141d0565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611dcf611dc861271a565b84846128ed565b506001905092915050565b611de261271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e66906141d0565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b611ed861271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c906141d0565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611fce61271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612052906141d0565b60405180910390fd5b82601281905550816013819055508060148190555061209b60145461208d6013546012546126bc90919063ffffffff16565b6126bc90919063ffffffff16565b601881905550505050565b6120ae61271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461213b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612132906141d0565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121849190614098565b60405180910390a150565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b601e60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61227761271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fb906141d0565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61236761271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906141d0565b60405180910390fd5b662386f26fc1000081111561243e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243590614110565b60405180910390fd5b80601a8190555050565b61245061271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d4906141d0565b60405180910390fd5b80601b8190555050565b6124ef61271a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906141d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e390614130565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60179054906101000a900460ff1681565b60008082846126cb9190614345565b905083811015612710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270790614170565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278990614210565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f990614150565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128e09190614230565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561295e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612955906141f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c5906140f0565b60405180910390fd5b601e60149054906101000a900460ff16156129f5576129ee848484612f80565b9050612ecb565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a995750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ae457601a54821115612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90614190565b60405180910390fd5b5b6000612aef30611725565b90506000601c548210159050808015612b155750601e60149054906101000a900460ff16155b8015612b6b5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b835750601e60159054906101000a900460ff165b15612bad57601e60169054906101000a900460ff1615612ba357601c5491505b612bac82613153565b5b612c36846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed29092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d1c5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d3057612d2b878787613344565b612d32565b845b9050601e60179054906101000a900460ff168015612d9a5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc957601b54612dbd82612daf89611725565b6126bc90919063ffffffff16565b1115612dc857600080fd5b5b612e1b81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126bc90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ebb9190614230565b60405180910390a3600193505050505b9392505050565b6000838311158290612f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1191906140ce565b60405180910390fd5b5060008385612f299190614426565b9050809150509392505050565b6000612f7883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ed2565b905092915050565b600061300b826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ed29092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126bc90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131409190614230565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff02191690831515021790555060006131ac600261319e6018546131906012548761356b90919063ffffffff16565b6135e690919063ffffffff16565b6135e690919063ffffffff16565b905060006131c38284612f3690919063ffffffff16565b90506131ce81613630565b600047905060006131ff6131ee60026012546135e690919063ffffffff16565b601854612f3690919063ffffffff16565b9050600061323d600261322f846132216012548861356b90919063ffffffff16565b6135e690919063ffffffff16565b6135e690919063ffffffff16565b905060006132688361325a6014548761356b90919063ffffffff16565b6135e690919063ffffffff16565b90506000613291826132838588612f3690919063ffffffff16565b612f3690919063ffffffff16565b905060008111156132c9576132c8600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261392d565b5b60008211156132ff576132fe600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361392d565b5b60008311801561330f5750600087115b1561331f5761331e8784613978565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133cc576133c560646133b76015548661356b90919063ffffffff16565b6135e690919063ffffffff16565b905061344a565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156134495761344660646134386016548661356b90919063ffffffff16565b6135e690919063ffffffff16565b90505b5b600081111561354e576134a581600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126bc90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135459190614230565b60405180910390a35b6135618184612f3690919063ffffffff16565b9150509392505050565b60008083141561357e57600090506135e0565b6000828461358c91906143cc565b905082848261359b919061439b565b146135db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d2906141b0565b60405180910390fd5b809150505b92915050565b600061362883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a6c565b905092915050565b6000600267ffffffffffffffff811115613673577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156136a15781602001602082028036833780820191505090505b50905030816000815181106136df577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561378157600080fd5b505afa158015613795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b99190613b61565b816001815181106137f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061385a30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612722565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138be95949392919061427b565b600060405180830381600087803b1580156138d857600080fd5b505af11580156138ec573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161392192919061424b565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613973573d6000803e3d6000fd5b505050565b6139a530601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612722565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806139f1611780565b426040518863ffffffff1660e01b8152600401613a1396959493929190614037565b6060604051808303818588803b158015613a2c57600080fd5b505af1158015613a40573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a659190613d2e565b5050505050565b60008083118290613ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aaa91906140ce565b60405180910390fd5b5060008385613ac2919061439b565b9050809150509392505050565b600081359050613ade816148b2565b92915050565b600081519050613af3816148b2565b92915050565b600081359050613b08816148c9565b92915050565b600081359050613b1d816148e0565b92915050565b600081519050613b32816148e0565b92915050565b600060208284031215613b4a57600080fd5b6000613b5884828501613acf565b91505092915050565b600060208284031215613b7357600080fd5b6000613b8184828501613ae4565b91505092915050565b60008060408385031215613b9d57600080fd5b6000613bab85828601613acf565b9250506020613bbc85828601613acf565b9150509250929050565b600080600060608486031215613bdb57600080fd5b6000613be986828701613acf565b9350506020613bfa86828701613acf565b9250506040613c0b86828701613b0e565b9150509250925092565b60008060408385031215613c2857600080fd5b6000613c3685828601613acf565b9250506020613c4785828601613af9565b9150509250929050565b60008060408385031215613c6457600080fd5b6000613c7285828601613acf565b9250506020613c8385828601613b0e565b9150509250929050565b600060208284031215613c9f57600080fd5b6000613cad84828501613af9565b91505092915050565b600060208284031215613cc857600080fd5b6000613cd684828501613b0e565b91505092915050565b600080600060608486031215613cf457600080fd5b6000613d0286828701613b0e565b9350506020613d1386828701613b0e565b9250506040613d2486828701613b0e565b9150509250925092565b600080600060608486031215613d4357600080fd5b6000613d5186828701613b23565b9350506020613d6286828701613b23565b9250506040613d7386828701613b23565b9150509250925092565b6000613d898383613d95565b60208301905092915050565b613d9e8161445a565b82525050565b613dad8161445a565b82525050565b6000613dbe82614300565b613dc88185614323565b9350613dd3836142f0565b8060005b83811015613e04578151613deb8882613d7d565b9750613df683614316565b925050600181019050613dd7565b5085935050505092915050565b613e1a8161446c565b82525050565b613e29816144af565b82525050565b613e38816144d3565b82525050565b6000613e498261430b565b613e538185614334565b9350613e638185602086016144e5565b613e6c816145d7565b840191505092915050565b6000613e84602383614334565b9150613e8f826145e8565b604082019050919050565b6000613ea7603483614334565b9150613eb282614637565b604082019050919050565b6000613eca602683614334565b9150613ed582614686565b604082019050919050565b6000613eed602283614334565b9150613ef8826146d5565b604082019050919050565b6000613f10601b83614334565b9150613f1b82614724565b602082019050919050565b6000613f33602883614334565b9150613f3e8261474d565b604082019050919050565b6000613f56602183614334565b9150613f618261479c565b604082019050919050565b6000613f79602083614334565b9150613f84826147eb565b602082019050919050565b6000613f9c602583614334565b9150613fa782614814565b604082019050919050565b6000613fbf602483614334565b9150613fca82614863565b604082019050919050565b613fde81614498565b82525050565b613fed816144a2565b82525050565b60006020820190506140086000830184613da4565b92915050565b60006040820190506140236000830185613da4565b6140306020830184613da4565b9392505050565b600060c08201905061404c6000830189613da4565b6140596020830188613fd5565b6140666040830187613e2f565b6140736060830186613e2f565b6140806080830185613da4565b61408d60a0830184613fd5565b979650505050505050565b60006020820190506140ad6000830184613e11565b92915050565b60006020820190506140c86000830184613e20565b92915050565b600060208201905081810360008301526140e88184613e3e565b905092915050565b6000602082019050818103600083015261410981613e77565b9050919050565b6000602082019050818103600083015261412981613e9a565b9050919050565b6000602082019050818103600083015261414981613ebd565b9050919050565b6000602082019050818103600083015261416981613ee0565b9050919050565b6000602082019050818103600083015261418981613f03565b9050919050565b600060208201905081810360008301526141a981613f26565b9050919050565b600060208201905081810360008301526141c981613f49565b9050919050565b600060208201905081810360008301526141e981613f6c565b9050919050565b6000602082019050818103600083015261420981613f8f565b9050919050565b6000602082019050818103600083015261422981613fb2565b9050919050565b60006020820190506142456000830184613fd5565b92915050565b60006040820190506142606000830185613fd5565b81810360208301526142728184613db3565b90509392505050565b600060a0820190506142906000830188613fd5565b61429d6020830187613e2f565b81810360408301526142af8186613db3565b90506142be6060830185613da4565b6142cb6080830184613fd5565b9695505050505050565b60006020820190506142ea6000830184613fe4565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061435082614498565b915061435b83614498565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143905761438f61454a565b5b828201905092915050565b60006143a682614498565b91506143b183614498565b9250826143c1576143c0614579565b5b828204905092915050565b60006143d782614498565b91506143e283614498565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561441b5761441a61454a565b5b828202905092915050565b600061443182614498565b915061443c83614498565b92508282101561444f5761444e61454a565b5b828203905092915050565b600061446582614478565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006144ba826144c1565b9050919050565b60006144cc82614478565b9050919050565b60006144de82614498565b9050919050565b60005b838110156145035780820151818401526020810190506144e8565b83811115614512576000848401525b50505050565b6000600282049050600182168061453057607f821691505b60208210811415614544576145436145a8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c65742073686f756c64206265206c657373206f722065757160008201527f616c20746f20342520746f74616c537570706c79000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6148bb8161445a565b81146148c657600080fd5b50565b6148d28161446c565b81146148dd57600080fd5b50565b6148e981614498565b81146148f457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e66e5698e26cf397ed99b2089dbce7c2fa7dd8866e23e73959adbac15c030ec664736f6c63430008040033