Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- MILKYCHEEMS
- Optimization enabled
- true
- Compiler version
- v0.8.9+commit.e5eed63a
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2022-04-05T14:18:42.184905Z
Contract source code
/* * MilkyCheems 100 000 000 supply max buy 1 000 000 max sell 500 000 8% tax https://t.me/milkycheems * */ pragma solidity =0.8.9; // SPDX-License-Identifier: UNLICENSED interface IBEP20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IPancakeERC20 { 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; } interface IPancakeFactory { 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 IPancakeRouter01 { 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 factory() external pure returns (address); function WETH() external pure returns (address); 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 IPancakeRouter02 is IPancakeRouter01 { 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; } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == msg.sender, "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() external onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } //MILKY CHEEMS CONTRACT contract MILKYCHEEMS is IBEP20, Ownable { using Address for address; using EnumerableSet for EnumerableSet.AddressSet; event ContractChanged(uint256 indexed value); event ContractChangedBool(bool indexed value); event ContractChangedAddress(address indexed value); event antiBotBan(address indexed value); mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => uint256) private _buyLock; EnumerableSet.AddressSet private _excluded; EnumerableSet.AddressSet private _isBlacklisted; //Token Info string private constant _name = 'MILKYCHEEMS'; string private constant _symbol = 'MCINU'; uint8 private constant _decimals = 9; uint256 public constant InitialSupply= 100000000 * 10**_decimals; //Amount to Swap variable uint256 currentAmountToSwap = 150000 * 10**_decimals; //Divider for the MaxBalance based on circulating Supply (2%) uint8 public constant BalanceLimitDivider=50; //Divider for sellLimit based on circulating Supply (0.5%) uint16 public constant SellLimitDivider=200; //Buyers get locked for MaxBuyLockTime (put in seconds, works better especially if changing later) so they can't buy repeatedly uint16 public constant MaxBuyLockTime= 5 seconds; //The time Liquidity gets locked at start and prolonged once it gets released uint256 private constant DefaultLiquidityLockTime= 1800; //DevWallets address public TeamWallet=payable(0xC5e1a2854178b152b239068F4DC8d53cC34f26c7); address public walletTwo=payable(0xc07c764A7FbDC76f2373Fac86079F8AB5DF4c949); //TestNet address private PancakeRouter=0x9D2E30C2FB648BeE307EDBaFDb461b09DF79516C; //MainNet //address private PancakeRouter=0x10ED43C718714eb63d5aA57B78B54704E256024E; //variables that track balanceLimit and sellLimit, //can be updated based on circulating supply and Sell- and BalanceLimitDividers uint256 private _circulatingSupply =InitialSupply; uint256 public balanceLimit = _circulatingSupply; uint256 public sellLimit = _circulatingSupply; uint256 private antiWhale = 1000000 * 10**_decimals; //Used for anti-bot autoblacklist uint256 private tradingEnabledAt; //DO NOT CHANGE, THIS IS FOR HOLDING A TIMESTAMP uint256 private autoBanTime = 10; // Set to the amount of time in seconds after enable trading you want addresses to be auto blacklisted if they buy/sell/transfer in this time. uint256 private enableAutoBlacklist = 1; //Leave 1 if using, set to 0 if not using. //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer uint8 private _buyTax; uint8 private _sellTax; uint8 private _transferTax; uint8 private _burnTax; uint8 private _liquidityTax; uint8 private _marketingTax; address private _pancakePairAddress; IPancakeRouter02 private _pancakeRouter; //Constructor/////////// constructor () { //contract creator gets 90% of the token to create LP-Pair uint256 deployerBalance=_circulatingSupply; _balances[msg.sender] = deployerBalance; emit Transfer(address(0), msg.sender, deployerBalance); // Pancake Router _pancakeRouter = IPancakeRouter02(PancakeRouter); //Creates a Pancake Pair _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this), _pancakeRouter.WETH()); //Sets Buy/Sell limits balanceLimit=InitialSupply/BalanceLimitDivider; sellLimit=InitialSupply/SellLimitDivider; //Sets buyLockTime buyLockTime=0; //Set Starting Taxes _buyTax=8; _sellTax=8; _transferTax=0; _burnTax=0; _liquidityTax=20; _marketingTax=80; //Team wallets and deployer are excluded from Taxes _excluded.add(TeamWallet); _excluded.add(walletTwo); _excluded.add(msg.sender); } //Transfer functionality/// //transfer function, every transfer runs through this function function _transfer(address sender, address recipient, uint256 amount) private{ require(sender != address(0), "Transfer from zero"); require(recipient != address(0), "Transfer to zero"); //Manually Excluded adresses are transfering tax and lock free bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient)); //Transactions from and to the contract are always tax and lock free bool isContractTransfer=(sender==address(this) || recipient==address(this)); //transfers between PancakeRouter and PancakePair are tax and lock free address pancakeRouter=address(_pancakeRouter); bool isLiquidityTransfer = ((sender == _pancakePairAddress && recipient == pancakeRouter) || (recipient == _pancakePairAddress && sender == pancakeRouter)); //differentiate between buy/sell/transfer to apply different taxes/restrictions bool isBuy=sender==_pancakePairAddress|| sender == pancakeRouter; bool isSell=recipient==_pancakePairAddress|| recipient == pancakeRouter; //Pick transfer if(isContractTransfer || isLiquidityTransfer || isExcluded){ _feelessTransfer(sender, recipient, amount); } else{ //once trading is enabled, it can't be turned off again require(tradingEnabled,"trading not yet enabled"); _taxedTransfer(sender,recipient,amount,isBuy,isSell); } } //applies taxes, checks for limits, locks generates autoLP function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{ uint256 recipientBalance = _balances[recipient]; uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); uint8 tax; if(isSell){ //Sells can't exceed the sell limit require(amount<=sellLimit,"Dump protection"); require(_isBlacklisted.contains(sender) == false, "Address blacklisted!"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(sender); emit antiBotBan(sender); } tax=_sellTax; } else if(isBuy){ //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit require(recipientBalance+amount<=balanceLimit,"whale protection"); require(amount <= antiWhale,"Tx amount exceeding max buy amount"); require(_isBlacklisted.contains(recipient) == false, "Address blacklisted!"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(recipient); emit antiBotBan(recipient); } tax=_buyTax; } else {//Transfer //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit require(_isBlacklisted.contains(sender) == false, "Sender address blacklisted!"); require(_isBlacklisted.contains(recipient) == false, "Recipient address blacklisted!"); require(recipientBalance+amount<=balanceLimit,"whale protection"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(sender); emit antiBotBan(sender); } tax=_transferTax; } //Swapping AutoLP and MarketingBNB is only possible if sender is not pancake pair, //if its not manually disabled, if its not already swapping and if its a Sell to avoid // people from causing a large price impact from repeatedly transfering when theres a large backlog of Tokens if((sender!=_pancakePairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier)&&isSell) _swapContractToken(); //Calculates the exact token amount for each tax uint256 tokensToBeBurnt=_calculateFee(amount, tax, _burnTax); uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax); //Subtract the Taxed Tokens from the amount uint256 taxedAmount=amount-(tokensToBeBurnt + contractToken); //Removes token _removeToken(sender,amount); //Adds the taxed tokens to the contract wallet _balances[address(this)] += contractToken; //Burns tokens _circulatingSupply-=tokensToBeBurnt; //Adds token _addToken(recipient, taxedAmount); emit Transfer(sender,recipient,taxedAmount); } //Feeless transfer only transfers function _feelessTransfer(address sender, address recipient, uint256 amount) private{ uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); //Removes token _removeToken(sender,amount); //Adds token _addToken(recipient, amount); emit Transfer(sender,recipient,amount); } //Calculates the token that should be taxed function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) { return (amount*tax*taxPercent) / 10000; } //balance that is claimable by the team uint256 public marketingBalance; //adds Token to balances function _addToken(address addr, uint256 amount) private { //the amount of token after transfer uint256 newAmount=_balances[addr]+amount; //sets newBalance _balances[addr]=newAmount; } //removes Token function _removeToken(address addr, uint256 amount) private { //the amount of token after transfer uint256 newAmount=_balances[addr]-amount; //sets newBalance _balances[addr]=newAmount; } //Swap Contract Tokens////////////////////////////////////////////////////////////////////////////////// //tracks auto generated BNB, useful for ticker etc uint256 public totalLPBNB; //Locks the swap if already swapping bool private _isSwappingContractModifier; modifier lockTheSwap { _isSwappingContractModifier = true; _; _isSwappingContractModifier = false; } //swaps the token on the contract for Marketing BNB and LP Token. //always swaps the sellLimit of token to avoid a large price impact function _swapContractToken() private lockTheSwap{ uint256 contractBalance=_balances[address(this)]; uint16 totalTax=_marketingTax+_liquidityTax; uint256 tokenToSwap = currentAmountToSwap; //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0 if(contractBalance<tokenToSwap||totalTax==0){ return; } //splits the token in TokenForLiquidity and tokenForMarketing uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax; uint256 tokenForMarketing= tokenToSwap-tokenForLiquidity; //splits tokenForLiquidity in 2 halves uint256 liqToken=tokenForLiquidity/2; uint256 liqBNBToken=tokenForLiquidity-liqToken; //swaps marktetingToken and the liquidity token half for BNB uint256 swapToken=liqBNBToken+tokenForMarketing; //Gets the initial BNB balance uint256 initialBNBBalance = address(this).balance; _swapTokenForBNB(swapToken); uint256 newBNB=(address(this).balance - initialBNBBalance); //calculates the amount of BNB belonging to the LP-Pair and converts them to LP uint256 liqBNB = (newBNB*liqBNBToken)/swapToken; _addLiquidity(liqToken, liqBNB); //Get the BNB balance after LP generation to get the //exact amount of token left for marketing uint256 distributeBNB=(address(this).balance - initialBNBBalance); //distributes remaining BNB to Marketing marketingBalance+=distributeBNB; } //swaps tokens on the contract for BNB function _swapTokenForBNB(uint256 amount) private { _approve(address(this), address(_pancakeRouter), amount); address[] memory path = new address[](2); path[0] = address(this); path[1] = _pancakeRouter.WETH(); _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amount, 0, path, address(this), block.timestamp ); } //Adds Liquidity directly to the contract where LP are locked(unlike safemoon forks, that transfer it to the owner) function _addLiquidity(uint256 tokenamount, uint256 bnbamount) private returns (uint256 tAmountSent, uint256 bnbAmountSent) { totalLPBNB+=bnbamount; uint256 minBNB = (bnbamount*75) / 100; uint256 minTokens = (tokenamount*75) / 100; _approve(address(this), address(_pancakeRouter), tokenamount); _pancakeRouter.addLiquidityETH{value: bnbamount}( address(this), tokenamount, minTokens, minBNB, address(this), block.timestamp ); tAmountSent = tokenamount; bnbAmountSent = bnbamount; return (tAmountSent, bnbAmountSent); } //public functions ///////////////////////////////////////////////////////////////////////////////////// function getLiquidityReleaseTimeInSeconds() external view returns (uint256){ if(block.timestamp<_liquidityUnlockTime){ return _liquidityUnlockTime-block.timestamp; } return 0; } function getBurnedTokens() external view returns(uint256){ return (InitialSupply-_circulatingSupply)/10**_decimals; } function getLimits() external view returns(uint256 balance, uint256 sell){ return(balanceLimit/10**_decimals, sellLimit/10**_decimals); } function getTaxes() external view returns(uint256 burnTax,uint256 liquidityTax, uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){ return (_burnTax,_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax); } //How long is a given address still locked from buying function getAddressBuyLockTimeInSeconds(address AddressToCheck) external view returns (uint256){ uint256 lockTime=_buyLock[AddressToCheck]; if(lockTime<=block.timestamp) { return 0; } return lockTime-block.timestamp; } function getBuyLockTimeInSeconds() external view returns(uint256){ return buyLockTime; } //Functions every wallet can call //Resets buy lock of caller to the default buyLockTime should something go very wrong function AddressResetBuyLock() external{ _buyLock[msg.sender]=block.timestamp+buyLockTime; } //Settings////////////////////////////////////////////////////////////////////////////////////////////// bool public buyLockDisabled; uint256 public buyLockTime; bool public manualConversion; function TeamWithdrawALLMarketingBNB() external onlyOwner{ uint256 amount=marketingBalance; marketingBalance=0; payable(TeamWallet).transfer((amount*75) / 100); payable(walletTwo).transfer((amount-(amount*75) / 100)); emit Transfer(address(this), TeamWallet, (amount*75) / 100); emit Transfer(address(this), walletTwo, (amount-(amount*75) / 100)); } function TeamWithdrawXMarketingBNB(uint256 amount) external onlyOwner{ require(amount<=marketingBalance, "Error: Amount greater than available balance."); marketingBalance-=amount; payable(TeamWallet).transfer((amount*75) / 100); payable(walletTwo).transfer((amount-(amount*75) / 100)); emit Transfer(address(this), TeamWallet, (amount*75) / 100); emit Transfer(address(this), walletTwo, (amount-(amount*75) / 100)); } //switches autoLiquidity and marketing BNB generation during transfers function TeamSwitchManualBNBConversion(bool manual) external onlyOwner{ manualConversion=manual; emit ContractChangedBool(manualConversion); } function TeamChangeAntiWhale(uint256 newAntiWhale) external onlyOwner{ antiWhale=newAntiWhale * 10**_decimals; emit ContractChanged(antiWhale); } function TeamChangeTeamWallet(address newTeamWallet) external onlyOwner{ require(newTeamWallet != address(0), "Error: Cannot be 0 address."); TeamWallet=payable(newTeamWallet); emit ContractChangedAddress(TeamWallet); } function TeamChangeWalletTwo(address newWalletTwo) external onlyOwner{ require(newWalletTwo != address(0), "Error: Cannot be 0 address."); walletTwo=payable(newWalletTwo); emit ContractChangedAddress(walletTwo); } //Disables the timeLock after buying for everyone function TeamDisableBuyLock(bool disabled) external onlyOwner{ buyLockDisabled=disabled; emit ContractChangedBool(buyLockDisabled); } //Sets BuyLockTime, needs to be lower than MaxBuyLockTime function TeamSetBuyLockTime(uint256 buyLockSeconds) external onlyOwner{ require(buyLockSeconds<=MaxBuyLockTime,"Buy Lock time too high"); buyLockTime=buyLockSeconds; emit ContractChanged(buyLockTime); } //Allows CA owner to change how much the contract sells to prevent massive contract sells as the token grows. function TeamUpdateAmountToSwap(uint256 newSwapAmount) external onlyOwner{ currentAmountToSwap = newSwapAmount; emit ContractChanged(currentAmountToSwap); } //Allows wallet exclusion to be added after launch function addWalletExclusion(address exclusionAdd) external onlyOwner{ _excluded.add(exclusionAdd); emit ContractChangedAddress(exclusionAdd); } //Allows you to remove wallet exclusions after launch function removeWalletExclusion(address exclusionRemove) external onlyOwner{ _excluded.remove(exclusionRemove); emit ContractChangedAddress(exclusionRemove); } //Check if address is blacklisted (can be called by anyone) function checkAddressBlacklist(address submittedAddress) external view returns (bool isBlacklisted) { if (_isBlacklisted.contains(submittedAddress) == true) { isBlacklisted = true; return isBlacklisted; } if (_isBlacklisted.contains(submittedAddress) == false) { isBlacklisted = false; return isBlacklisted; } } //Adds address to blacklist and prevents sells, buys or transfers. function addAddressToBlacklist(address blacklistedAddress) external onlyOwner { _isBlacklisted.add(blacklistedAddress); emit ContractChangedAddress(blacklistedAddress); } //Remove address from blacklist and allow sells, buys or transfers. function removeAddressFromBlacklist(address blacklistedAddress) external onlyOwner { _isBlacklisted.remove(blacklistedAddress); emit ContractChangedAddress(blacklistedAddress); } //Sets Taxes, is limited by MaxTax(20%) to make it impossible to create honeypot function TeamSetTaxes(uint8 burnTaxes, uint8 liquidityTaxes, uint8 marketingTaxes, uint8 buyTax, uint8 sellTax, uint8 transferTax) external onlyOwner{ uint8 totalTax=burnTaxes+liquidityTaxes+marketingTaxes; require(totalTax==100, "burn+liq+marketing needs to equal 100%"); require(buyTax <= 20, "Error: Honeypot prevention prevents buyTax from exceeding 20."); require(sellTax <= 20, "Error: Honeypot prevention prevents sellTax from exceeding 20."); require(transferTax <= 20, "Error: Honeypot prevention prevents transferTax from exceeding 20."); _burnTax=burnTaxes; _liquidityTax=liquidityTaxes; _marketingTax=marketingTaxes; _buyTax=buyTax; _sellTax=sellTax; _transferTax=transferTax; emit ContractChanged(_burnTax); emit ContractChanged(_liquidityTax); emit ContractChanged(_buyTax); emit ContractChanged(_sellTax); emit ContractChanged(_transferTax); } //manually converts contract token to LP function TeamCreateLPandBNB() external onlyOwner{ _swapContractToken(); } function teamUpdatePancakeRouter(address newRouter) external onlyOwner { require(newRouter != address(0), "Error: Cannot be 0 address."); PancakeRouter=newRouter; emit ContractChangedAddress(PancakeRouter); } //Limits need to be at least target, to avoid setting value to 0(avoid potential Honeypot) function TeamUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) external onlyOwner{ //SellLimit needs to be below 1% to avoid a Large Price impact when generating auto LP require(newSellLimit<_circulatingSupply/100, "Error: New sell limit above 1% of circulating supply."); //Adds decimals to limits newBalanceLimit=newBalanceLimit*10**_decimals; newSellLimit=newSellLimit*10**_decimals; //Calculates the target Limits based on supply uint256 targetBalanceLimit=_circulatingSupply/BalanceLimitDivider; uint256 targetSellLimit=_circulatingSupply/SellLimitDivider; require((newBalanceLimit>=targetBalanceLimit), "newBalanceLimit needs to be at least target"); require((newSellLimit>=targetSellLimit), "newSellLimit needs to be at least target"); balanceLimit = newBalanceLimit; sellLimit = newSellLimit; emit ContractChanged(balanceLimit); emit ContractChanged(sellLimit); } //Setup Functions/////////////////////////////////////////////////////////////////////////////////////// bool public tradingEnabled; address private _liquidityTokenAddress; //Enables trading for everyone function SetupEnableTrading() external onlyOwner{ tradingEnabled=true; tradingEnabledAt=block.timestamp; } //Sets up the LP-Token Address required for LP Release function SetupLiquidityTokenAddress(address liquidityTokenAddress) external onlyOwner{ require(liquidityTokenAddress != address(0), "Error: Cannot be 0 address."); _liquidityTokenAddress=liquidityTokenAddress; } //Liquidity Lock//////////////////////////////////////////////////////////////////////////////////////// //the timestamp when Liquidity unlocks uint256 private _liquidityUnlockTime; //Adds time to LP lock in seconds. function TeamProlongLiquidityLockInSeconds(uint256 secondsUntilUnlock) external onlyOwner{ _prolongLiquidityLock(secondsUntilUnlock+block.timestamp); emit ContractChanged(secondsUntilUnlock+block.timestamp); } //Adds time to LP lock based on set time. function _prolongLiquidityLock(uint256 newUnlockTime) private{ // require new unlock time to be longer than old one require(newUnlockTime>_liquidityUnlockTime, "Error: New unlock time is shorter than old one."); _liquidityUnlockTime=newUnlockTime; emit ContractChanged(_liquidityUnlockTime); } //Release Liquidity Tokens once unlock time is over function TeamReleaseLiquidity() external onlyOwner returns (address tWAddress, uint256 amountSent) { //Only callable if liquidity Unlock time is over require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); IPancakeERC20 liquidityToken = IPancakeERC20(_liquidityTokenAddress); uint256 amount = liquidityToken.balanceOf(address(this)); //Liquidity release if something goes wrong at start liquidityToken.transfer(TeamWallet, amount); emit Transfer(address(this), TeamWallet, amount); tWAddress = TeamWallet; amountSent = amount; return (tWAddress, amountSent); } //Removes Liquidity once unlock Time is over, function TeamRemoveLiquidity() external onlyOwner returns (uint256 newBalance) { //Only callable if liquidity Unlock time is over require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); IPancakeERC20 liquidityToken = IPancakeERC20(_liquidityTokenAddress); uint256 amount = liquidityToken.balanceOf(address(this)); liquidityToken.approve(address(_pancakeRouter),amount); //Removes Liquidity and adds it to marketing Balance uint256 initialBNBBalance = address(this).balance; _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens( address(this), amount, (amount*75) / 100, (amount*75) / 100, address(this), block.timestamp ); uint256 newBNBBalance = address(this).balance-initialBNBBalance; marketingBalance+=newBNBBalance; newBalance=newBNBBalance; return newBalance; } //Releases all remaining BNB on the contract wallet, so BNB wont be burned function TeamRemoveRemainingBNB() external onlyOwner{ require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); (bool sent,) =TeamWallet.call{value: (address(this).balance)}(""); require(sent, "Error: Not sent."); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //external////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// receive() external payable {} fallback() external payable {} // IBEP20 function getOwner() external view override returns (address) { return owner(); } function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function decimals() external pure override returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _circulatingSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address _owner, address spender) external view override returns (uint256) { return _allowances[_owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "Approve from zero"); require(spender != address(0), "Approve to zero"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "Transfer > allowance"); _approve(sender, msg.sender, currentAllowance - amount); return true; } // IBEP20 - Helpers function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "<0 allowance"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } }
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":"ContractChanged","inputs":[{"type":"uint256","name":"value","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"ContractChangedAddress","inputs":[{"type":"address","name":"value","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ContractChangedBool","inputs":[{"type":"bool","name":"value","internalType":"bool","indexed":true}],"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":"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":"event","name":"antiBotBan","inputs":[{"type":"address","name":"value","internalType":"address","indexed":true}],"anonymous":false},{"type":"fallback","stateMutability":"payable"},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"AddressResetBuyLock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"BalanceLimitDivider","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"InitialSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"","internalType":"uint16"}],"name":"MaxBuyLockTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint16","name":"","internalType":"uint16"}],"name":"SellLimitDivider","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetupEnableTrading","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetupLiquidityTokenAddress","inputs":[{"type":"address","name":"liquidityTokenAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamChangeAntiWhale","inputs":[{"type":"uint256","name":"newAntiWhale","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamChangeTeamWallet","inputs":[{"type":"address","name":"newTeamWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamChangeWalletTwo","inputs":[{"type":"address","name":"newWalletTwo","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamCreateLPandBNB","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamDisableBuyLock","inputs":[{"type":"bool","name":"disabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamProlongLiquidityLockInSeconds","inputs":[{"type":"uint256","name":"secondsUntilUnlock","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"tWAddress","internalType":"address"},{"type":"uint256","name":"amountSent","internalType":"uint256"}],"name":"TeamReleaseLiquidity","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"newBalance","internalType":"uint256"}],"name":"TeamRemoveLiquidity","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamRemoveRemainingBNB","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamSetBuyLockTime","inputs":[{"type":"uint256","name":"buyLockSeconds","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamSetTaxes","inputs":[{"type":"uint8","name":"burnTaxes","internalType":"uint8"},{"type":"uint8","name":"liquidityTaxes","internalType":"uint8"},{"type":"uint8","name":"marketingTaxes","internalType":"uint8"},{"type":"uint8","name":"buyTax","internalType":"uint8"},{"type":"uint8","name":"sellTax","internalType":"uint8"},{"type":"uint8","name":"transferTax","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamSwitchManualBNBConversion","inputs":[{"type":"bool","name":"manual","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamUpdateAmountToSwap","inputs":[{"type":"uint256","name":"newSwapAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamUpdateLimits","inputs":[{"type":"uint256","name":"newBalanceLimit","internalType":"uint256"},{"type":"uint256","name":"newSellLimit","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"TeamWallet","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamWithdrawALLMarketingBNB","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TeamWithdrawXMarketingBNB","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addAddressToBlacklist","inputs":[{"type":"address","name":"blacklistedAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addWalletExclusion","inputs":[{"type":"address","name":"exclusionAdd","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":"balanceLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"buyLockDisabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"buyLockTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"isBlacklisted","internalType":"bool"}],"name":"checkAddressBlacklist","inputs":[{"type":"address","name":"submittedAddress","internalType":"address"}]},{"type":"function","stateMutability":"pure","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":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getAddressBuyLockTimeInSeconds","inputs":[{"type":"address","name":"AddressToCheck","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getBurnedTokens","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getBuyLockTimeInSeconds","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"},{"type":"uint256","name":"sell","internalType":"uint256"}],"name":"getLimits","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityReleaseTimeInSeconds","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"burnTax","internalType":"uint256"},{"type":"uint256","name":"liquidityTax","internalType":"uint256"},{"type":"uint256","name":"marketingTax","internalType":"uint256"},{"type":"uint256","name":"buyTax","internalType":"uint256"},{"type":"uint256","name":"sellTax","internalType":"uint256"},{"type":"uint256","name":"transferTax","internalType":"uint256"}],"name":"getTaxes","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":"manualConversion","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"marketingBalance","inputs":[]},{"type":"function","stateMutability":"pure","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":"removeAddressFromBlacklist","inputs":[{"type":"address","name":"blacklistedAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeWalletExclusion","inputs":[{"type":"address","name":"exclusionRemove","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sellLimit","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"teamUpdatePancakeRouter","inputs":[{"type":"address","name":"newRouter","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalLPBNB","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingEnabled","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":"walletTwo","inputs":[]},{"type":"receive","stateMutability":"payable"}]
Deployed ByteCode
0x60806040526004361061036b5760003560e01c8063715018a6116101c4578063c3a3c032116100f6578063e803050c1161009a578063f2fde38b1161006c578063f2fde38b14610aad578063f9ab736614610acd578063fa76995414610aed578063ffcfadde14610b0257005b8063e803050c14610a38578063f0590dd114610a58578063f24a1e7014610a78578063f2c816ae14610a8d57005b8063d8902ff5116100d3578063d8902ff514610992578063daf9a47a146109b2578063dd62ed3e146109d2578063e2fd002a14610a1857005b8063c3a3c03214610948578063c3f4f54f1461095d578063d11edf741461097257005b80638d2c5039116101685780639fa62d5f1161013a5780639fa62d5f146108c8578063a457c2d7146108e8578063a9059cbb14610908578063b766a3861461092857005b80638d2c50391461085a5780638da5cb5b1461082657806395d89b411461087a5780639bc845fb146108a857005b8063828e8b7e116101a1578063828e8b7e146107f757806386d0ada81461080c578063893d20e8146108265780638d060d771461084457005b8063715018a6146107b7578063762bb282146107cc5780637b9e987a146107e257005b806335e82f3a1161029d57806357ad67d111610241578063677a887011610213578063677a8870146107175780636eb8c7f1146107375780636f89e4091461075757806370a082311461078157005b806357ad67d1146106ac57806358e55365146106cc5780635c69f690146106e257806361cb2748146106f757005b806344f3c83a1161027a57806344f3c83a146106415780634ada218b146106575780634cdaf0ae146106765780634f91e48c1461069657005b806335e82f3a146105cd57806339509351146105ed5780633c7a309b1461060d57005b80631eb25d131161030f5780632bc47bd1116102e15780632bc47bd1146105535780633054f8a314610573578063311a869714610592578063313ce567146105b957005b80631eb25d131461047b57806323b872dd146104905780632594b343146104b05780632973ef2d146104e857005b80630fa5b215116103485780630fa5b215146104065780630fd99e161461042957806314ddc0951461045157806318160ddd1461046657005b80630200264b1461037457806306fdde03146103a9578063095ea7b3146103e657005b3661037257005b005b34801561038057600080fd5b5061039461038f366004613393565b610b17565b60405190151581526020015b60405180910390f35b3480156103b557600080fd5b5060408051808201909152600b81526a4d494c4b59434845454d5360a81b60208201525b6040516103a091906133b0565b3480156103f257600080fd5b50610394610401366004613405565b610b52565b34801561041257600080fd5b5061041b610b69565b6040519081526020016103a0565b34801561043557600080fd5b5061043e60c881565b60405161ffff90911681526020016103a0565b34801561045d57600080fd5b5060185461041b565b34801561047257600080fd5b50600c5461041b565b34801561048757600080fd5b5061041b610dc4565b34801561049c57600080fd5b506103946104ab366004613431565b610de1565b3480156104bc57600080fd5b50600a546104d0906001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156104f457600080fd5b506013546040805160ff63010000008404811682526401000000008404811660208301526501000000000084048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c0016103a0565b34801561055f57600080fd5b5061037261056e366004613472565b610e78565b34801561057f57600080fd5b5060175461039490610100900460ff1681565b34801561059e57600080fd5b506105a7603281565b60405160ff90911681526020016103a0565b3480156105c557600080fd5b5060096105a7565b3480156105d957600080fd5b506103726105e8366004613393565b61106d565b3480156105f957600080fd5b50610394610608366004613405565b6110d7565b34801561061957600080fd5b5061062261110e565b604080516001600160a01b0390931683526020830191909152016103a0565b34801561064d57600080fd5b5061041b60185481565b34801561066357600080fd5b5060195461039490610100900460ff1681565b34801561068257600080fd5b50610372610691366004613393565b6112c1565b3480156106a257600080fd5b5061041b600e5481565b3480156106b857600080fd5b506103726106c736600461349c565b61134a565b3480156106d857600080fd5b5061041b60155481565b3480156106ee57600080fd5b5061043e600581565b34801561070357600080fd5b50610372610712366004613393565b6116df565b34801561072357600080fd5b506009546104d0906001600160a01b031681565b34801561074357600080fd5b50610372610752366004613472565b611723565b34801561076357600080fd5b5061076c611792565b604080519283526020830191909152016103a0565b34801561078d57600080fd5b5061041b61079c366004613393565b6001600160a01b031660009081526001602052604090205490565b3480156107c357600080fd5b506103726117cf565b3480156107d857600080fd5b5061041b600d5481565b3480156107ee57600080fd5b50610372611852565b34801561080357600080fd5b506103726118a0565b34801561081857600080fd5b506019546103949060ff1681565b34801561083257600080fd5b506000546001600160a01b03166104d0565b34801561085057600080fd5b5061041b60165481565b34801561086657600080fd5b5061037261087536600461351e565b6118c4565b34801561088657600080fd5b506040805180820190915260058152644d43494e5560d81b60208201526103d9565b3480156108b457600080fd5b506103726108c3366004613393565b611942565b3480156108d457600080fd5b506103726108e336600461353b565b6119d9565b3480156108f457600080fd5b50610394610903366004613405565b611bf2565b34801561091457600080fd5b50610394610923366004613405565b611c6e565b34801561093457600080fd5b5061037261094336600461351e565b611c7b565b34801561095457600080fd5b5061041b611d03565b34801561096957600080fd5b5061041b611d23565b34801561097e57600080fd5b5061037261098d366004613472565b611d62565b34801561099e57600080fd5b506103726109ad366004613393565b611dbc565b3480156109be57600080fd5b506103726109cd366004613472565b611e53565b3480156109de57600080fd5b5061041b6109ed36600461355d565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a2457600080fd5b50610372610a33366004613472565b611ec1565b348015610a4457600080fd5b5061041b610a53366004613393565b611f65565b348015610a6457600080fd5b50610372610a73366004613393565b611f9f565b348015610a8457600080fd5b50610372612036565b348015610a9957600080fd5b50610372610aa8366004613393565b61212a565b348015610ab957600080fd5b50610372610ac8366004613393565b61216e565b348015610ad957600080fd5b50610372610ae8366004613393565b612267565b348015610af957600080fd5b506103726122ab565b348015610b0e57600080fd5b50610372612309565b6000610b24600683612361565b151560011415610b3657506001919050565b610b41600683612361565b610b4d57506000919050565b919050565b6000610b5f338484612383565b5060015b92915050565b600033610b7e6000546001600160a01b031690565b6001600160a01b031614610bad5760405162461bcd60e51b8152600401610ba490613596565b60405180910390fd5b601a54421015610bcf5760405162461bcd60e51b8152600401610ba4906135cb565b6019546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b158015610c1c57600080fd5b505afa158015610c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5491906135f5565b60145460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b390604401602060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc919061360e565b5060145447906001600160a01b031663af2979eb30846064610cff82604b613641565b610d099190613660565b6064610d1688604b613641565b610d209190613660565b30426040518763ffffffff1660e01b8152600401610d4396959493929190613682565b602060405180830381600087803b158015610d5d57600080fd5b505af1158015610d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9591906135f5565b506000610da282476136bd565b90508060156000828254610db691906136d4565b909155509094505050505090565b610dd06009600a6137d0565b610dde906305f5e100613641565b81565b6000610dee848484612476565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610e595760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610ba4565b610e6d8533610e6886856136bd565b612383565b506001949350505050565b33610e8b6000546001600160a01b031690565b6001600160a01b031614610eb15760405162461bcd60e51b8152600401610ba490613596565b601554811115610f195760405162461bcd60e51b815260206004820152602d60248201527f4572726f723a20416d6f756e742067726561746572207468616e20617661696c60448201526c30b13632903130b630b731b29760991b6064820152608401610ba4565b8060156000828254610f2b91906136bd565b90915550506009546001600160a01b03166108fc6064610f4c84604b613641565b610f569190613660565b6040518115909202916000818181858888f19350505050158015610f7e573d6000803e3d6000fd5b50600a546001600160a01b03166108fc6064610f9b84604b613641565b610fa59190613660565b610faf90846136bd565b6040518115909202916000818181858888f19350505050158015610fd7573d6000803e3d6000fd5b506009546001600160a01b031630600080516020613944833981519152606461100185604b613641565b61100b9190613660565b60405190815260200160405180910390a3600a546001600160a01b031630600080516020613944833981519152606461104585604b613641565b61104f9190613660565b61105990856136bd565b60405190815260200160405180910390a350565b336110806000546001600160a01b031690565b6001600160a01b0316146110a65760405162461bcd60e51b8152600401610ba490613596565b6110b16006826126d3565b506040516001600160a01b0382169060008051602061396483398151915290600090a250565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610b5f918590610e689086906136d4565b600080336111246000546001600160a01b031690565b6001600160a01b03161461114a5760405162461bcd60e51b8152600401610ba490613596565b601a5442101561116c5760405162461bcd60e51b8152600401610ba4906135cb565b6019546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b1580156111b957600080fd5b505afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f191906135f5565b60095460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb90604401602060405180830381600087803b15801561124157600080fd5b505af1158015611255573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611279919061360e565b506009546040518281526001600160a01b039091169030906000805160206139448339815191529060200160405180910390a36009546001600160a01b031693509150509091565b336112d46000546001600160a01b031690565b6001600160a01b0316146112fa5760405162461bcd60e51b8152600401610ba490613596565b6001600160a01b0381166113205760405162461bcd60e51b8152600401610ba4906137df565b601980546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b3361135d6000546001600160a01b031690565b6001600160a01b0316146113835760405162461bcd60e51b8152600401610ba490613596565b6000846113908789613816565b61139a9190613816565b90508060ff166064146113fe5760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610ba4565b60148460ff1611156114785760405162461bcd60e51b815260206004820152603d60248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e7473206275795461782066726f6d20657863656564696e672032302e0000006064820152608401610ba4565b60148360ff1611156114f25760405162461bcd60e51b815260206004820152603e60248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e74732073656c6c5461782066726f6d20657863656564696e672032302e00006064820152608401610ba4565b60148260ff1611156115775760405162461bcd60e51b815260206004820152604260248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e7473207472616e736665725461782066726f6d20657863656564696e672032606482015261181760f11b608482015260a401610ba4565b86601360036101000a81548160ff021916908360ff16021790555085601360046101000a81548160ff021916908360ff16021790555084601360056101000a81548160ff021916908360ff16021790555083601360006101000a81548160ff021916908360ff16021790555082601360016101000a81548160ff021916908360ff16021790555081601360026101000a81548160ff021916908360ff160217905550601360039054906101000a900460ff1660ff1660008051602061392483398151915260405160405180910390a260135460405164010000000090910460ff169060008051602061392483398151915290600090a260135460405160ff9091169060008051602061392483398151915290600090a260135460405161010090910460ff169060008051602061392483398151915290600090a26013546040516201000090910460ff169060008051602061392483398151915290600090a250505050505050565b336116f26000546001600160a01b031690565b6001600160a01b0316146117185760405162461bcd60e51b8152600401610ba490613596565b6110b16004826126d3565b336117366000546001600160a01b031690565b6001600160a01b03161461175c5760405162461bcd60e51b8152600401610ba490613596565b61176e61176942836136d4565b6126e8565b61177842826136d4565b60405160008051602061392483398151915290600090a250565b6000806117a16009600a6137d0565b600d546117ae9190613660565b6117ba6009600a6137d0565b600e546117c79190613660565b915091509091565b336117e26000546001600160a01b031690565b6001600160a01b0316146118085760405162461bcd60e51b8152600401610ba490613596565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336118656000546001600160a01b031690565b6001600160a01b03161461188b5760405162461bcd60e51b8152600401610ba490613596565b6019805461ff00191661010017905542601055565b6018546118ad90426136d4565b33600090815260036020526040902055565b905090565b336118d76000546001600160a01b031690565b6001600160a01b0316146118fd5760405162461bcd60e51b8152600401610ba490613596565b6019805460ff191682151590811790915560405160ff9091161515907f669a6418e904a59fab89972d5ce42429cb380f287efcaef65dace33212fda0d990600090a250565b336119556000546001600160a01b031690565b6001600160a01b03161461197b5760405162461bcd60e51b8152600401610ba490613596565b6001600160a01b0381166119a15760405162461bcd60e51b8152600401610ba4906137df565b600980546001600160a01b0319166001600160a01b03831690811790915560405160008051602061396483398151915290600090a250565b336119ec6000546001600160a01b031690565b6001600160a01b031614611a125760405162461bcd60e51b8152600401610ba490613596565b6064600c54611a219190613660565b8110611a8d5760405162461bcd60e51b815260206004820152603560248201527f4572726f723a204e65772073656c6c206c696d69742061626f7665203125206f604482015274331031b4b931bab630ba34b7339039bab838363c9760591b6064820152608401610ba4565b611a996009600a6137d0565b611aa39083613641565b9150611ab16009600a6137d0565b611abb9082613641565b90506000603260ff16600c54611ad19190613660565b9050600060c861ffff16600c54611ae89190613660565b905081841015611b4e5760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401610ba4565b80831015611baf5760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610ba4565b600d849055600e839055604051849060008051602061392483398151915290600090a2600e5460405160008051602061392483398151915290600090a250505050565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611c555760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610ba4565b611c643385610e6886856136bd565b5060019392505050565b6000610b5f338484612476565b33611c8e6000546001600160a01b031690565b6001600160a01b031614611cb45760405162461bcd60e51b8152600401610ba490613596565b6017805461ff0019166101008315158102919091179182905560405160ff91909204161515907f669a6418e904a59fab89972d5ce42429cb380f287efcaef65dace33212fda0d990600090a250565b6000601a54421015611d1d5742601a546118bf91906136bd565b50600090565b6000611d316009600a6137d0565b600c54611d406009600a6137d0565b611d4e906305f5e100613641565b611d5891906136bd565b6118bf9190613660565b33611d756000546001600160a01b031690565b6001600160a01b031614611d9b5760405162461bcd60e51b8152600401610ba490613596565b6008819055604051819060008051602061392483398151915290600090a250565b33611dcf6000546001600160a01b031690565b6001600160a01b031614611df55760405162461bcd60e51b8152600401610ba490613596565b6001600160a01b038116611e1b5760405162461bcd60e51b8152600401610ba4906137df565b600a80546001600160a01b0319166001600160a01b03831690811790915560405160008051602061396483398151915290600090a250565b33611e666000546001600160a01b031690565b6001600160a01b031614611e8c5760405162461bcd60e51b8152600401610ba490613596565b611e986009600a6137d0565b611ea29082613641565b600f81905560405160008051602061392483398151915290600090a250565b33611ed46000546001600160a01b031690565b6001600160a01b031614611efa5760405162461bcd60e51b8152600401610ba490613596565b6005811115611f445760405162461bcd60e51b8152602060048201526016602482015275084eaf24098dec6d640e8d2daca40e8dede40d0d2ced60531b6044820152606401610ba4565b6018819055604051819060008051602061392483398151915290600090a250565b6001600160a01b038116600090815260036020526040812054428111611f8e5750600092915050565b611f9842826136bd565b9392505050565b33611fb26000546001600160a01b031690565b6001600160a01b031614611fd85760405162461bcd60e51b8152600401610ba490613596565b6001600160a01b038116611ffe5760405162461bcd60e51b8152600401610ba4906137df565b600b80546001600160a01b0319166001600160a01b03831690811790915560405160008051602061396483398151915290600090a250565b336120496000546001600160a01b031690565b6001600160a01b03161461206f5760405162461bcd60e51b8152600401610ba490613596565b601a544210156120915760405162461bcd60e51b8152600401610ba4906135cb565b6009546040516000916001600160a01b03169047908381818185875af1925050503d80600081146120de576040519150601f19603f3d011682016040523d82523d6000602084013e6120e3565b606091505b50509050806121275760405162461bcd60e51b815260206004820152601060248201526f22b93937b91d102737ba1039b2b73a1760811b6044820152606401610ba4565b50565b3361213d6000546001600160a01b031690565b6001600160a01b0316146121635760405162461bcd60e51b8152600401610ba490613596565b6110b160068261234c565b336121816000546001600160a01b031690565b6001600160a01b0316146121a75760405162461bcd60e51b8152600401610ba490613596565b6001600160a01b03811661220c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3361227a6000546001600160a01b031690565b6001600160a01b0316146122a05760405162461bcd60e51b8152600401610ba490613596565b6110b160048261234c565b336122be6000546001600160a01b031690565b6001600160a01b0316146122e45760405162461bcd60e51b8152600401610ba490613596565b6015805460009091556009546001600160a01b03166108fc6064610f4c84604b613641565b3361231c6000546001600160a01b031690565b6001600160a01b0316146123425760405162461bcd60e51b8152600401610ba490613596565b61234a612772565b565b6000611f98836001600160a01b0384166128c5565b6001600160a01b03811660009081526001830160205260408120541515611f98565b6001600160a01b0383166123cd5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610ba4565b6001600160a01b0382166124155760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610ba4565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124c15760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610ba4565b6001600160a01b03821661250a5760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610ba4565b6000612517600485612361565b806125285750612528600484612361565b905060006001600160a01b03851630148061254b57506001600160a01b03841630145b6014546013549192506001600160a01b0390811691600091888116600160301b9092041614801561258d5750816001600160a01b0316866001600160a01b0316145b806125c857506013546001600160a01b03878116600160301b909204161480156125c85750816001600160a01b0316876001600160a01b0316145b6013549091506000906001600160a01b03898116600160301b9092041614806126025750826001600160a01b0316886001600160a01b0316145b6013549091506000906001600160a01b03898116600160301b90920416148061263c5750836001600160a01b0316886001600160a01b0316145b905084806126475750825b8061264f5750855b156126645761265f898989612914565b6126c8565b601954610100900460ff166126bb5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610ba4565b6126c889898985856129cd565b505050505050505050565b6000611f98836001600160a01b038416612f87565b601a5481116127515760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a204e657720756e6c6f636b2074696d652069732073686f72746560448201526e39103a3430b71037b6321037b7329760891b6064820152608401610ba4565b601a819055604051819060008051602061392483398151915290600090a250565b6017805460ff1916600190811790915530600090815260209190915260408120546013549091906127ba90640100000000810460ff9081169165010000000000900416613816565b60ff16905060006008549050808310806127d6575061ffff8216155b156127e3575050506128b9565b60135460009061ffff84169061280490640100000000900460ff1684613641565b61280e9190613660565b9050600061281c82846136bd565b9050600061282b600284613660565b9050600061283982856136bd565b9050600061284784836136d4565b90504761285382613074565b600061285f82476136bd565b905060008361286e8684613641565b6128789190613660565b905061288486826131dc565b506000905061289384476136bd565b905080601560008282546128a791906136d4565b90915550505050505050505050505050505b6017805460ff19169055565b600081815260018301602052604081205461290c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b63565b506000610b63565b6001600160a01b038316600090815260016020526040902054818110156129785760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ba4565b61298284836132e1565b61298c8383613326565b826001600160a01b0316846001600160a01b0316600080516020613944833981519152846040516129bf91815260200190565b60405180910390a350505050565b6001600160a01b0380851660009081526001602052604080822054928816825290205484811015612a3b5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610ba4565b60008315612b4e57600e54861115612a875760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610ba4565b612a92600689612361565b15612ad65760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610ba4565b601154601054612ae691906136d4565b4211158015612af757506012546001145b15612b3d57612b0760068961234c565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b50601354610100900460ff16612e34565b8415612cc157600d54612b6187856136d4565b1115612ba25760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610ba4565b600f54861115612bff5760405162461bcd60e51b815260206004820152602260248201527f547820616d6f756e7420657863656564696e67206d61782062757920616d6f756044820152611b9d60f21b6064820152608401610ba4565b612c0a600688612361565b15612c4e5760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610ba4565b601154601054612c5e91906136d4565b4211158015612c6f57506012546001145b15612cb557612c7f60068861234c565b506040516001600160a01b038816907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060135460ff16612e34565b612ccc600689612361565b15612d195760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206164647265737320626c61636b6c69737465642100000000006044820152606401610ba4565b612d24600688612361565b15612d715760405162461bcd60e51b815260206004820152601e60248201527f526563697069656e74206164647265737320626c61636b6c69737465642100006044820152606401610ba4565b600d54612d7e87856136d4565b1115612dbf5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610ba4565b601154601054612dcf91906136d4565b4211158015612de057506012546001145b15612e2657612df060068961234c565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060135462010000900460ff165b6013546001600160a01b03898116600160301b9092041614801590612e5c575060195460ff16155b8015612e6b575060175460ff16155b8015612e745750835b15612e8157612e81612772565b6000612e9d8783601360039054906101000a900460ff1661334a565b601354909150600090612ed39089908590612ece9060ff640100000000820481169165010000000000900416613816565b61334a565b90506000612ee182846136d4565b612eeb908a6136bd565b9050612ef78b8a6132e1565b3060009081526001602052604081208054849290612f169084906136d4565b9250508190555082600c6000828254612f2f91906136bd565b90915550612f3f90508a82613326565b896001600160a01b03168b6001600160a01b031660008051602061394483398151915283604051612f7291815260200190565b60405180910390a35050505050505050505050565b6000818152600183016020526040812054801561306a576000612fab6001836136bd565b8554909150600090612fbf906001906136bd565b90506000866000018281548110612fd857612fd861383b565b9060005260206000200154905080876000018481548110612ffb57612ffb61383b565b60009182526020808320909101929092558281526001890190915260409020849055865487908061302e5761302e613851565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610b63565b6000915050610b63565b60145461308c9030906001600160a01b031683612383565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106130c1576130c161383b565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561311557600080fd5b505afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d9190613867565b816001815181106131605761316061383b565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac947906131a6908590600090869030904290600401613884565b600060405180830381600087803b1580156131c057600080fd5b505af11580156131d4573d6000803e3d6000fd5b505050505050565b60008082601660008282546131f191906136d4565b9091555060009050606461320685604b613641565b6132109190613660565b90506000606461322187604b613641565b61322b9190613660565b6014549091506132469030906001600160a01b031688612383565b60145460405163f305d71960e01b81526001600160a01b039091169063f305d7199087906132829030908b908790899084904290600401613682565b6060604051808303818588803b15801561329b57600080fd5b505af11580156132af573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132d491906138f5565b5096979596505050505050565b6001600160a01b0382166000908152600160205260408120546133059083906136bd565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b0382166000908152600160205260408120546133059083906136d4565b60006127108260ff168460ff16866133629190613641565b61336c9190613641565b6133769190613660565b949350505050565b6001600160a01b038116811461212757600080fd5b6000602082840312156133a557600080fd5b8135611f988161337e565b600060208083528351808285015260005b818110156133dd578581018301518582016040015282016133c1565b818111156133ef576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561341857600080fd5b82356134238161337e565b946020939093013593505050565b60008060006060848603121561344657600080fd5b83356134518161337e565b925060208401356134618161337e565b929592945050506040919091013590565b60006020828403121561348457600080fd5b5035919050565b803560ff81168114610b4d57600080fd5b60008060008060008060c087890312156134b557600080fd5b6134be8761348b565b95506134cc6020880161348b565b94506134da6040880161348b565b93506134e86060880161348b565b92506134f66080880161348b565b915061350460a0880161348b565b90509295509295509295565b801515811461212757600080fd5b60006020828403121561353057600080fd5b8135611f9881613510565b6000806040838503121561354e57600080fd5b50508035926020909101359150565b6000806040838503121561357057600080fd5b823561357b8161337e565b9150602083013561358b8161337e565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b60006020828403121561360757600080fd5b5051919050565b60006020828403121561362057600080fd5b8151611f9881613510565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561365b5761365b61362b565b500290565b60008261367d57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000828210156136cf576136cf61362b565b500390565b600082198211156136e7576136e761362b565b500190565b600181815b8085111561372757816000190482111561370d5761370d61362b565b8085161561371a57918102915b93841c93908002906136f1565b509250929050565b60008261373e57506001610b63565b8161374b57506000610b63565b8160018114613761576002811461376b57613787565b6001915050610b63565b60ff84111561377c5761377c61362b565b50506001821b610b63565b5060208310610133831016604e8410600b84101617156137aa575081810a610b63565b6137b483836136ec565b80600019048211156137c8576137c861362b565b029392505050565b6000611f9860ff84168361372f565b6020808252601b908201527f4572726f723a2043616e6e6f74206265203020616464726573732e0000000000604082015260600190565b600060ff821660ff84168060ff038211156138335761383361362b565b019392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561387957600080fd5b8151611f988161337e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138d45784516001600160a01b0316835293830193918301916001016138af565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561390a57600080fd5b835192506020840151915060408401519050925092509256fefb60e050a21ad73ac014de3ac7e8beec47ce0426c74545f9eded8135493e8e02ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef156f82350b7972f1821f0b3cc744ecec05d5c0893150eccf16174dbc4bf8d8dda26469706673582212204bf26e0cf2df20e2832920ae748deb7b0280adaffe3c161ae0ac0c90625e00ae64736f6c63430008090033