Token BRUH

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
69,000,000,000,000 BRUH

Holders:
86,480 addresses

Transfers:
-

Contract:
0xb5b5b428e4de365f809ced8271d202449e5c2f720xB5B5b428e4DE365F809CeD8271D202449e5c2F72

Decimals:
6

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
bruhToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 14 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 2 of 14 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

File 3 of 14 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

File 4 of 14 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

File 5 of 14 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 6 of 14 : ArbitrumBlockProvider.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ArbSys {
    function arbBlockNumber() external view returns(uint);
}

library ArbitrumBlockProvider {
    function blockNumber() internal view returns(uint) {
        return ArbSys(address(100)).arbBlockNumber();
    }
}

File 7 of 14 : bruhToken.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./ICamelotRouter.sol";
import "./ICamelotFactory.sol";
import './UsingLiquidityProtectionService.sol';

contract bruhToken is ERC20, Ownable, UsingLiquidityProtectionService(0x545CF6Af0a9090F465E1fBC9aA173a611F29081c) {
    uint8 private constant _decimals = 6;
    uint256 private constant TOTAL_SUPPLY = 69_000_000_000_000 * 10**_decimals ;

    bool private _inSwapAndLiquify;
    bool public swapAndTreasureEnabled = true;

    mapping(address => bool) public excludedFromFee;

    ICamelotRouter public uniswapV2Router;
    address public uniswapV2Pair;

    address payable public treasuryWallet;
    address public marketingWallet;

    uint8 public treasuryFeeOnBuy;
    uint8 public treasuryFeeOnSell;

    uint256 public swapAtAmount;

    event TransferEnabled(uint256 time);
    event FeeUpdated(uint8 buyFee, uint8 sellFee);
    event SwapAtUpdated(uint256 swapAtAmount);
    event SwapAndTreasureEnabled(bool state);

    modifier lockTheSwap() {
        _inSwapAndLiquify = true;
        _;
        _inSwapAndLiquify = false;
    }


    // --------------------- CONSTRUCT ---------------------

    constructor(address _treasure, address _marketing, address _router) ERC20('BRUH', 'BRUH') {
        treasuryWallet = payable(_treasure);
        marketingWallet = _marketing;
        uniswapV2Router = ICamelotRouter(_router);

        excludedFromFee[msg.sender] = true;
        excludedFromFee[address(this)] = true;
        excludedFromFee[treasuryWallet] = true;
        excludedFromFee[marketingWallet] = true;

        _mint(msg.sender, TOTAL_SUPPLY);

        treasuryFeeOnBuy = 3;
        treasuryFeeOnSell = 3;

        swapAtAmount = totalSupply() / 100000; // 0.001%
    }

    // --------------------- VIEWS ---------------------

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

    // --------------------- INTERNAL ---------------------

    function _transfer(address from, address to, uint256 amount ) internal override {
        require(to != address(0), 'Transfer to zero address');
        require(amount != 0, 'Transfer amount must be not zero');

        // swapAndSendTreasure
        if (
            swapAndTreasureEnabled
            && balanceOf(address(this)) >= swapAtAmount
            && !_inSwapAndLiquify
            && to == uniswapV2Pair
            && !excludedFromFee[from]
            && !excludedFromFee[tx.origin]
        ) {
            _swapAndSendTreasure(swapAtAmount);
        }

        // fees
        if (
            (from != uniswapV2Pair && to != uniswapV2Pair)
            || excludedFromFee[from]
            || excludedFromFee[to]
            || excludedFromFee[tx.origin]
        ) {
            super._transfer(from, to, amount);
        } else {
            uint256 fee;
            if (to == uniswapV2Pair) {
                fee = amount / 100 * treasuryFeeOnSell;
                if (fee != 0) {
                    super._transfer(from, marketingWallet, fee);
                }
            } else {
                fee = amount / 100 * treasuryFeeOnBuy;
                if (fee != 0) {
                    super._transfer(from, address(this), fee);
                }
            }

            super._transfer(from, to, amount - fee);
        }
    }

    function _swapAndSendTreasure(uint256 _amount) internal lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), _amount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(_amount, 0, path, address(this), address(0), block.timestamp);

        uint256 ethBalance = address(this).balance;
        if (ethBalance != 0) {
            (bool success,) = treasuryWallet.call{ value: ethBalance }('');
            require(success, "ETH transfer failed");
        }
    }

    // --------------------- OWNER ---------------------
    function setExcludedFromFee(address _account, bool _state) external onlyOwner {
        require(excludedFromFee[_account] != _state, 'Already set');
        excludedFromFee[_account] = _state;
    }

    function setTreasuryFee(uint8 _feeOnBuy, uint8 _feeOnSell) external onlyOwner {
        require(_feeOnBuy <= 5 && _feeOnSell <= 5, 'fee cannot exceed 5%');
        treasuryFeeOnBuy = _feeOnBuy;
        treasuryFeeOnSell = _feeOnSell;

        emit FeeUpdated(_feeOnBuy, _feeOnSell);
    }

    function setTreasury(address payable _treasuryWallet) external onlyOwner {
        treasuryWallet = _treasuryWallet;
        excludedFromFee[treasuryWallet] = true;
    }

    function setMarketingWallet(address _marketing) external onlyOwner {
        marketingWallet = _marketing;
        excludedFromFee[marketingWallet] = true;
    }

    function setSwapAndTreasureEnabled(bool _state) external onlyOwner {
        swapAndTreasureEnabled = _state;

        emit SwapAndTreasureEnabled(_state);
    }

    function setSwapAtAmount(uint256 _amount) external onlyOwner {
        require(_amount > 0, "zero input");
        swapAtAmount = _amount;

        emit SwapAtUpdated(_amount);
    }

    function setPair(address pair) external onlyOwner {
        uniswapV2Pair = pair;
    }

    function recover(address _token, uint256 _amount) external onlyOwner {
        if (_token != address(0)) {
			IERC20(_token).transfer(msg.sender, _amount);
		} else {
			(bool success, ) = payable(msg.sender).call{ value: _amount }("");
			require(success, "Can't send ETH");
		}
	}

    // --------------------- PERIPHERALS ---------------------

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

    function emergencyWithdraw() external onlyOwner {
        (bool success, ) = payable(owner()).call{ value: address(this).balance }('');
        require(success, "Can't send ETH");
    }

    // --------------------- LPS ---------------------

    function token_transfer(address _from, address _to, uint _amount) internal override {
        _transfer(_from, _to, _amount);
    }
    function token_balanceOf(address _holder) internal view override returns(uint) {
        return balanceOf(_holder);
    }
    function protectionAdminCheck() internal view override onlyOwner {} // Must revert to deny access.
    function uniswapVariety() internal pure override returns(bytes32) {
        return CAMELOT;
    }
    function uniswapVersion() internal pure override returns(UniswapVersion) {
        return UniswapVersion.V2;
    }
    // For PancakeV3 factory is the PoolDelpoyer address.
    function uniswapFactory() internal pure override returns(address) {
        return 0x6EcCab422D763aC031210895C81787E87B43A652;
    }
    function _beforeTokenTransfer(address _from, address _to, uint _amount) internal override {
        super._beforeTokenTransfer(_from, _to, _amount);
        LiquidityProtection_beforeTokenTransfer(_from, _to, _amount);
    }
    // All the following overrides are optional, if you want to modify default behavior.

    // How the protection gets disabled.
    function protectionChecker() internal view override returns(bool) {
        return ProtectionSwitch_timestamp(1686268799); // Switch off protection on Thursday, June 8, 2023 11:59:59 PM GMT.
    //    return ProtectionSwitch_block(13000000); // Switch off protection on block 13000000.
    //    return ProtectionSwitch_manual(); // Switch off protection by calling disableProtection(); from owner. Default.
    }
    // How the extra protection (sandwich trap) gets disabled.
    function protectionCheckerExtra() internal view override returns(bool) {
    // return ProtectionSwitch_timestamp(1650644191); // Switch off protection on Friday, April 22, 2022 4:16:31 PM.
    // return ProtectionSwitch_block(13000000); // Switch off protection on block 13000000.
        return ProtectionSwitch_manual_extra(); // Switch off protection by calling disableProtectionExtra(); from owner. Default.
    }

    // This token will be pooled in pair with:
    function counterToken() internal pure override returns(address) {
        return 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; // WETH
    }

    function chain_blockNumber() internal override view returns(uint) {
        return blockNumber_Arbitrum();
    }

    //    // This token will be pooled with fees:
    //    function uniswapV3Fee() internal pure override returns(UniswapV3Fees) {
    //        return UniswapV3Fees._03;
    //    }
}

File 8 of 14 : UniswapV2Library.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

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

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

File 9 of 14 : UniswapV3Library.sol
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity ^0.8.0;

/// @notice based on https://github.com/Uniswap/uniswap-v3-periphery/blob/v1.0.0/contracts/libraries/PoolAddress.sol
/// @notice changed compiler version and lib name and added POOL_INIT_CODE_HASH as a parameter to computeAddress().

/// @title Provides functions for deriving a pool address from the factory, tokens, and the fee
library UniswapV3Library {
    /// @notice The identifying key of the pool
    struct PoolKey {
        address token0;
        address token1;
        uint24 fee;
    }

    /// @notice Returns PoolKey: the ordered tokens with the matched fee levels
    /// @param tokenA The first token of a pool, unsorted
    /// @param tokenB The second token of a pool, unsorted
    /// @param fee The fee level of the pool
    /// @return Poolkey The pool details with ordered token0 and token1 assignments
    function getPoolKey(
        address tokenA,
        address tokenB,
        uint24 fee
    ) internal pure returns (PoolKey memory) {
        if (tokenA > tokenB) (tokenA, tokenB) = (tokenB, tokenA);
        return PoolKey({token0: tokenA, token1: tokenB, fee: fee});
    }

    /// @notice Deterministically computes the pool address given the factory and PoolKey
    /// @param factory The Uniswap V3 factory contract address
    /// @param key The PoolKey
    /// @return pool The contract address of the V3 pool
    function computeAddress(bytes32 POOL_INIT_CODE_HASH, address factory, PoolKey memory key) internal pure returns (address pool) {
        require(key.token0 < key.token1);
        pool = address(
            uint160(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            hex'ff',
                            factory,
                            keccak256(abi.encode(key.token0, key.token1, key.fee)),
                            POOL_INIT_CODE_HASH
                        )
                    )
                )
            )
        );
    }
}

File 10 of 14 : ICamelotFactory.sol
pragma solidity >=0.5.0;

interface ICamelotFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    function owner() external view returns (address);
    function feePercentOwner() external view returns (address);
    function setStableOwner() external view returns (address);
    function feeTo() external view returns (address);

    function ownerFeeShare() external view returns (uint256);
    function referrersFeeShare(address) external view returns (uint256);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function feeInfo() external view returns (uint _ownerFeeShare, address _feeTo);
}

File 11 of 14 : ICamelotRouter.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface ICamelotRouter 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,
    address referrer,
    uint deadline
  ) external;

  function swapExactETHForTokensSupportingFeeOnTransferTokens(
    uint amountOutMin,
    address[] calldata path,
    address to,
    address referrer,
    uint deadline
  ) external payable;

  function swapExactTokensForETHSupportingFeeOnTransferTokens(
    uint amountIn,
    uint amountOutMin,
    address[] calldata path,
    address to,
    address referrer,
    uint deadline
  ) external;


}

File 12 of 14 : IPLPS.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IPLPS {
    function LiquidityProtection_beforeTokenTransfer(
        address _pool, address _from, address _to, uint _amount) external;
    function LiquidityProtection_beforeTokenTransfer_extra(
        address _pool, address _from, address _to, uint _amount) external;
    function isBlocked(address _pool, address _who) external view returns(bool);
    function unblock(address _pool, address[] calldata _whos) external;
    function manualBlock(address _pool, address[] calldata _whos) external;
    function setWhitelist(address[] calldata _whos, bool _value) external;
}

File 13 of 14 : IUniswapV2Router01.sol
pragma solidity >=0.6.2;

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 quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

}

File 14 of 14 : UsingLiquidityProtectionService.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import './external/UniswapV2Library.sol';
import './external/UniswapV3Library.sol';
import './IPLPS.sol';
import './ArbitrumBlockProvider.sol';

abstract contract UsingLiquidityProtectionService {
    bool private unProtected = false;
    bool private unProtectedExtra = false;
    IPLPS private plps;
    uint64 internal constant HUNDRED_PERCENT = 1e18;
    bytes32 internal constant UNISWAP = 0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f;
    bytes32 internal constant UNISWAP_V3 = 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54;
    bytes32 internal constant PANCAKESWAP = 0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5;
    bytes32 internal constant PANCAKESWAP_V3 = 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2;
    bytes32 internal constant QUICKSWAP = UNISWAP;
    bytes32 internal constant SUSHISWAP = 0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303;
    bytes32 internal constant PANGOLIN = 0x40231f6b438bce0797c9ada29b718a87ea0a5cea3fe9a771abdd76bd41a3e545;
    bytes32 internal constant TRADERJOE = 0x0bbca9af0511ad1a1da383135cf3a8d2ac620e549ef9f6ae3a4c33c2fed0af91;
    bytes32 internal constant CAMELOT = 0xa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1;
    bytes32 internal constant UNISWAP_ARBITRUM_V3 = UNISWAP_V3;

    enum UniswapVersion {
        V2,
        V3
    }

    enum UniswapV3Fees {
        _001, // 0.01%
        _005, // 0.05%
        _025, // 0.25%
        _03, // 0.3%
        _1 // 1%
    }

    modifier onlyProtectionAdmin() {
        protectionAdminCheck();
        _;
    }

    constructor (address _plps) {
        plps = IPLPS(_plps);
    }

    function LiquidityProtection_setLiquidityProtectionService(IPLPS _plps) external onlyProtectionAdmin() {
        require(token_balanceOf(getLiquidityPool()) == 0, 'UsingLiquidityProtectionService: liquidity already added');
        plps = _plps;
    }

    function chain_blockNumber() internal virtual view returns(uint);
    function token_transfer(address from, address to, uint amount) internal virtual;
    function token_balanceOf(address holder) internal view virtual returns(uint);
    function protectionAdminCheck() internal view virtual;
    function uniswapVariety() internal pure virtual returns(bytes32);
    function uniswapVersion() internal pure virtual returns(UniswapVersion);
    // For PancakeV3 factory is the PoolDelpoyer address.
    function uniswapFactory() internal pure virtual returns(address);
    function counterToken() internal pure virtual returns(address) {
        return 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH
    }
    function uniswapV3Fee() internal pure virtual returns(UniswapV3Fees) {
        return UniswapV3Fees._03;
    }
    function protectionChecker() internal view virtual returns(bool) {
        return ProtectionSwitch_manual();
    }
    function protectionCheckerExtra() internal view virtual returns(bool) {
        return ProtectionSwitch_manual_extra();
    }

    function lps() private view returns(IPLPS) {
        return plps;
    }

    function LiquidityProtection_beforeTokenTransfer(address _from, address _to, uint _amount) internal virtual {
        if (protectionChecker()) {
            if (not(unProtected)) {
                lps().LiquidityProtection_beforeTokenTransfer(getLiquidityPool(), _from, _to, _amount);
            }
            if (not(unProtectedExtra)) {
                lps().LiquidityProtection_beforeTokenTransfer_extra(getLiquidityPool(), _from, _to, _amount);
            }
        } else if (protectionCheckerExtra() && not(unProtectedExtra)) {
            lps().LiquidityProtection_beforeTokenTransfer_extra(getLiquidityPool(), _from, _to, _amount);
        }
    }

    function revokeBlocked(address[] calldata _holders, address _revokeTo) external onlyProtectionAdmin() {
        require(protectionChecker(), 'UsingLiquidityProtectionService: protection removed');
        bool unProtectedOld = unProtected;
        bool unProtectedExtraOld = unProtectedExtra;
        unProtected = true;
        unProtectedExtra = true;
        address pool = getLiquidityPool();
        for (uint i = 0; i < _holders.length; i++) {
            address holder = _holders[i];
            if (lps().isBlocked(pool, holder)) {
                token_transfer(holder, _revokeTo, token_balanceOf(holder));
            }
        }
        unProtected = unProtectedOld;
        unProtectedExtra = unProtectedExtraOld;
    }

    function LiquidityProtection_unblock(address[] calldata _holders) external onlyProtectionAdmin() {
        require(protectionChecker(), 'UsingLiquidityProtectionService: protection removed');
        address pool = getLiquidityPool();
        lps().unblock(pool, _holders);
    }

    function LiquidityProtection_manualBlock(address[] calldata _holders) external onlyProtectionAdmin() {
        require(protectionChecker(), 'UsingLiquidityProtectionService: protection removed');
        address pool = getLiquidityPool();
        lps().manualBlock(pool, _holders);
    }

    function LiquidityProtection_setWhitelist(address[] calldata _holders, bool _value) external onlyProtectionAdmin() {
        lps().setWhitelist(_holders, _value);
    }

    function disableProtection() external onlyProtectionAdmin() {
        unProtected = true;
    }

    function disableProtectionExtra() external onlyProtectionAdmin() {
        unProtectedExtra = true;
    }

    function isProtected() public view returns(bool) {
        return not(unProtected);
    }

    function isProtectedExtra() public view returns(bool) {
        return not(unProtectedExtra);
    }

    function ProtectionSwitch_manual() internal view returns(bool) {
        return isProtected();
    }

    function ProtectionSwitch_manual_extra() internal view returns(bool) {
        return isProtectedExtra();
    }

    function ProtectionSwitch_timestamp(uint _timestamp) internal view returns(bool) {
        return not(passed(_timestamp));
    }

    function ProtectionSwitch_block(uint _block) internal view returns(bool) {
        return not(blockPassed(_block));
    }

    function blockNumber_Native() internal view returns(uint) {
        return block.number;
    }

    function blockNumber_Arbitrum() internal view returns(uint) {
        return ArbitrumBlockProvider.blockNumber();
    }

    function blockPassed(uint _block) internal virtual view returns(bool) {
        return _block < chain_blockNumber();
    }

    function passed(uint _timestamp) internal view returns(bool) {
        return _timestamp < block.timestamp;
    }

    function not(bool _condition) internal pure returns(bool) {
        return !_condition;
    }

    function feeToUint24(UniswapV3Fees _fee) internal pure returns(uint24) {
        if (_fee == UniswapV3Fees._03) return 3000;
        if (_fee == UniswapV3Fees._025) return 2500;
        if (_fee == UniswapV3Fees._005) return 500;
        if (_fee == UniswapV3Fees._001) return 100;
        return 10000;
    }

    function getLiquidityPool() public view returns(address) {
        if (uniswapVersion() == UniswapVersion.V2) {
            return UniswapV2Library.pairFor(uniswapVariety(), uniswapFactory(), address(this), counterToken());
        }
        require(uniswapVariety() == UNISWAP_V3 || uniswapVariety() == PANCAKESWAP_V3, 'LiquidityProtection: uniswapVariety() can only be UNISWAP for V3.');
        return UniswapV3Library.computeAddress(uniswapVariety(), uniswapFactory(),
            UniswapV3Library.getPoolKey(address(this), counterToken(), feeToUint24(uniswapV3Fee())));
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_treasure","type":"address"},{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"buyFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"sellFee","type":"uint8"}],"name":"FeeUpdated","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":"bool","name":"state","type":"bool"}],"name":"SwapAndTreasureEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapAtAmount","type":"uint256"}],"name":"SwapAtUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TransferEnabled","type":"event"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"}],"name":"LiquidityProtection_manualBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPLPS","name":"_plps","type":"address"}],"name":"LiquidityProtection_setLiquidityProtectionService","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"LiquidityProtection_setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"}],"name":"LiquidityProtection_unblock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableProtectionExtra","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isProtected","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isProtectedExtra","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"},{"internalType":"address","name":"_revokeTo","type":"address"}],"name":"revokeBlocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setSwapAndTreasureEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasuryWallet","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_feeOnSell","type":"uint8"}],"name":"setTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndTreasureEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeOnBuy","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFeeOnSell","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract ICamelotRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526005805461ffff60a01b191690556006805460ff60a81b1916600160a81b1790553480156200003257600080fd5b506040516200345e3803806200345e83398101604081905262000055916200073e565b604080518082018252600480825263084a4aa960e31b602080840182905284518086019095529184529083015273545cf6af0a9090f465e1fbc9aa173a611f29081c916003620000a683826200082c565b506004620000b582826200082c565b505050620000d2620000cc620001ce60201b60201c565b620001d2565b600680546001600160a01b03199081166001600160a01b03938416178255600a80548216878516178155600b80548316878616178155600880549093168686161790925533600081815260076020526040808220805460ff1990811660019081179092553084528284208054821683179055855489168452828420805482168317905595549097168252902080549093169094179091556200019292916200017a9162000a0b565b6200018c90653ec1507d500062000a23565b62000224565b600b805461ffff60a01b191661030360a01b179055620186a0620001b560025490565b620001c1919062000a3d565b600c555062000a76915050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b6200028e60008383620002f9565b8060026000828254620002a2919062000a60565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b620003118383836200031e60201b62000b851760201c565b6200031e83838362000323565b505050565b6200032d620004a0565b156200047a57600554600160a01b900460ff16620003d3576006546001600160a01b0316630336a33062000360620004b6565b6040516001600160e01b031960e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b158015620003b957600080fd5b505af1158015620003ce573d6000803e3d6000fd5b505050505b600554600160a81b900460ff16155b156200031e576006546001600160a01b0316635434e55962000403620004b6565b6040516001600160e01b031960e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b1580156200045c57600080fd5b505af115801562000471573d6000803e3d6000fd5b50505050505050565b6200048462000519565b8015620003e25750600554600160a81b900460ff1615620003e2565b6000620004b16364826b7f62000525565b905090565b6000620004b17fa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1736eccab422d763ac031210895c81787e87b43a652307382af49447d8a07e3bd95bd0d56f35241523fbab16200053f60201b620015571760201c565b6000620004b16200060d565b6000620005396200053583421190565b1590565b92915050565b600080806200054f858562000624565b6040516001600160601b0319606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012088604051602001620005ea939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6001600160601b03191660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b6000620004b1600554600160a81b900460ff161590565b600080826001600160a01b0316846001600160a01b031603620006985760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604482015264455353455360d81b606482015260840162000277565b826001600160a01b0316846001600160a01b031610620006ba578284620006bd565b83835b90925090506001600160a01b0382166200071a5760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015260640162000277565b9250929050565b80516001600160a01b03811681146200073957600080fd5b919050565b6000806000606084860312156200075457600080fd5b6200075f8462000721565b92506200076f6020850162000721565b91506200077f6040850162000721565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007b357607f821691505b602082108103620007d457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031e57600081815260208120601f850160051c81016020861015620008035750805b601f850160051c820191505b8181101562000824578281556001016200080f565b505050505050565b81516001600160401b0381111562000848576200084862000788565b62000860816200085984546200079e565b84620007da565b602080601f8311600181146200089857600084156200087f5750858301515b600019600386901b1c1916600185901b17855562000824565b600085815260208120601f198616915b82811015620008c957888601518255948401946001909101908401620008a8565b5085821015620008e85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200094f578160001904821115620009335762000933620008f8565b808516156200094157918102915b93841c939080029062000913565b509250929050565b600082620009685750600162000539565b81620009775750600062000539565b81600181146200099057600281146200099b57620009bb565b600191505062000539565b60ff841115620009af57620009af620008f8565b50506001821b62000539565b5060208310610133831016604e8410600b8410161715620009e0575081810a62000539565b620009ec83836200090e565b806000190482111562000a035762000a03620008f8565b029392505050565b600062000a1c60ff84168362000957565b9392505050565b8082028115828204841417620005395762000539620008f8565b60008262000a5b57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620005395762000539620008f8565b6129d88062000a866000396000f3fe6080604052600436106102d55760003560e01c806375ee838911610179578063a457c2d7116100d6578063dd62ed3e1161008a578063f2fde38b11610064578063f2fde38b146107f7578063fc1a222914610817578063fd1e467f1461083757600080fd5b8063dd62ed3e14610771578063e1b9ae61146107b7578063f0f44260146107d757600080fd5b8063c75c136d116100bb578063c75c136d1461071b578063cdd4bd791461073b578063db2e21bc1461075c57600080fd5b8063a457c2d7146106db578063a9059cbb146106fb57600080fd5b8063869175241161012d5780638da5cb5b116101125780638da5cb5b1461069357806395d89b41146106b157806395ddbe89146106c657600080fd5b8063869175241461065d5780638953c7701461067357600080fd5b80638187f5161161015e5780638187f516146105ec578063824e46051461060c57806385ecafd71461062d57600080fd5b806375ee8389146105ac57806375f0a874146105cc57600080fd5b8063421dd7c7116102325780635d098b38116101e65780636612e66f116101c05780636612e66f1461054157806370a0823114610561578063715018a61461059757600080fd5b80635d098b38146104e15780635fdb86f9146105015780636402511e1461052157600080fd5b806349bd5a5e1161021757806349bd5a5e146104815780635300f82b146104a15780635705ae43146104c157600080fd5b8063421dd7c71461044c5780634626402b1461046157600080fd5b806318160ddd1161028957806323b872dd1161026e57806323b872dd146103ea578063313ce5671461040a578063395093511461042c57600080fd5b806318160ddd146103ab5780631f69fcb9146103ca57600080fd5b80630c3dda54116102ba5780630c3dda541461033c578063110a599f1461035e5780631694505e1461037357600080fd5b806306fdde03146102e1578063095ea7b31461030c57600080fd5b366102dc57005b600080fd5b3480156102ed57600080fd5b506102f6610858565b6040516103039190612464565b60405180910390f35b34801561031857600080fd5b5061032c6103273660046124c7565b6108ea565b6040519015158152602001610303565b34801561034857600080fd5b5061035c610357366004612546565b610904565b005b34801561036a57600080fd5b5061035c610990565b34801561037f57600080fd5b50600854610393906001600160a01b031681565b6040516001600160a01b039091168152602001610303565b3480156103b757600080fd5b506002545b604051908152602001610303565b3480156103d657600080fd5b5061035c6103e536600461259d565b6109ad565b3480156103f657600080fd5b5061032c6104053660046125c1565b610a5f565b34801561041657600080fd5b5060065b60405160ff9091168152602001610303565b34801561043857600080fd5b5061032c6104473660046124c7565b610a83565b34801561045857600080fd5b5061035c610ac2565b34801561046d57600080fd5b50600a54610393906001600160a01b031681565b34801561048d57600080fd5b50600954610393906001600160a01b031681565b3480156104ad57600080fd5b50600554600160a01b900460ff161561032c565b3480156104cd57600080fd5b5061035c6104dc3660046124c7565b610ae4565b3480156104ed57600080fd5b5061035c6104fc36600461259d565b610c22565b34801561050d57600080fd5b5061035c61051c366004612602565b610c64565b34801561052d57600080fd5b5061035c61053c366004612644565b610d33565b34801561054d57600080fd5b5061035c61055c36600461265d565b610dc7565b34801561056d57600080fd5b506103bc61057c36600461259d565b6001600160a01b031660009081526020819052604090205490565b3480156105a357600080fd5b5061035c610e6a565b3480156105b857600080fd5b5061035c6105c7366004612696565b610e7e565b3480156105d857600080fd5b50600b54610393906001600160a01b031681565b3480156105f857600080fd5b5061035c61060736600461259d565b611081565b34801561061857600080fd5b50600b5461041a90600160a01b900460ff1681565b34801561063957600080fd5b5061032c61064836600461259d565b60076020526000908152604090205460ff1681565b34801561066957600080fd5b506103bc600c5481565b34801561067f57600080fd5b50600554600160a81b900460ff161561032c565b34801561069f57600080fd5b506005546001600160a01b0316610393565b3480156106bd57600080fd5b506102f66110ab565b3480156106d257600080fd5b506103936110ba565b3480156106e757600080fd5b5061032c6106f63660046124c7565b611110565b34801561070757600080fd5b5061032c6107163660046124c7565b6111ba565b34801561072757600080fd5b5061035c6107363660046126e2565b6111c8565b34801561074757600080fd5b50600b5461041a90600160a81b900460ff1681565b34801561076857600080fd5b5061035c61121d565b34801561077d57600080fd5b506103bc61078c3660046126ff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107c357600080fd5b5061035c6107d2366004612743565b6112dc565b3480156107e357600080fd5b5061035c6107f236600461259d565b6113b9565b34801561080357600080fd5b5061035c61081236600461259d565b6113fb565b34801561082357600080fd5b5061035c610832366004612602565b611488565b34801561084357600080fd5b5060065461032c90600160a81b900460ff1681565b60606003805461086790612776565b80601f016020809104026020016040519081016040528092919081815260200182805461089390612776565b80156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b5050505050905090565b6000336108f8818585611770565b60019150505b92915050565b61090c6118c8565b6006546040517f3c271a050000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633c271a0590610959908690869086906004016127f9565b600060405180830381600087803b15801561097357600080fd5b505af1158015610987573d6000803e3d6000fd5b50505050505050565b6109986118c8565b6005805460ff60a81b1916600160a81b179055565b6109b56118c8565b6109c56109c06110ba565b6118d0565b15610a3d5760405162461bcd60e51b815260206004820152603860248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f206c697175696469747920616c7265616479206164646564000000000000000060648201526084015b60405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600033610a6d8582856118ee565b610a78858585611980565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906108f89082908690610abd908790612835565b611770565b610aca6118c8565b6005805460ff60a01b1916600160a01b179055565b905090565b610aec611c15565b6001600160a01b03821615610b8a576040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190612848565b505050565b604051600090339083908381818185875af1925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5050905080610b855760405162461bcd60e51b815260206004820152600e60248201527f43616e27742073656e64204554480000000000000000000000000000000000006044820152606401610a34565b610c2a611c15565b600b80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b610c6c6118c8565b610c74611c6f565b610ce65760405162461bcd60e51b815260206004820152603360248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f2070726f74656374696f6e2072656d6f766564000000000000000000000000006064820152608401610a34565b6000610cf06110ba565b9050610d046006546001600160a01b031690565b6001600160a01b0316634a2ae6658285856040518463ffffffff1660e01b815260040161095993929190612865565b610d3b611c15565b60008111610d8b5760405162461bcd60e51b815260206004820152600a60248201527f7a65726f20696e707574000000000000000000000000000000000000000000006044820152606401610a34565b600c8190556040518181527fb14ddfdd5c94bf0d7d69390393cb2bc7d021afb88860db1dac41c84b096e2b1e906020015b60405180910390a150565b610dcf611c15565b6001600160a01b03821660009081526007602052604090205481151560ff909116151503610e3f5760405162461bcd60e51b815260206004820152600b60248201527f416c7265616479207365740000000000000000000000000000000000000000006044820152606401610a34565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610e72611c15565b610e7c6000611c7e565b565b610e866118c8565b610e8e611c6f565b610f005760405162461bcd60e51b815260206004820152603360248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f2070726f74656374696f6e2072656d6f766564000000000000000000000000006064820152608401610a34565b60058054750101000000000000000000000000000000000000000061ffff60a01b1982161790915560ff600160a01b8204811691600160a81b9004166000610f466110ba565b905060005b85811015611048576000878783818110610f6757610f67612891565b9050602002016020810190610f7c919061259d565b9050610f906006546001600160a01b031690565b6040517f86c58d3e0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152838116602483015291909116906386c58d3e90604401602060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612848565b15611035576110358187611030846118d0565b611cd0565b5080611040816128a7565b915050610f4b565b50506005805461ffff60a01b1916600160a01b9315159390930260ff60a81b191692909217600160a81b91151591909102179055505050565b611089611c15565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805461086790612776565b6000610adf7fa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1736eccab422d763ac031210895c81787e87b43a652307382af49447d8a07e3bd95bd0d56f35241523fbab1611557565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156111ad5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a34565b610a788286868403611770565b6000336108f8818585611980565b6111d0611c15565b60068054821515600160a81b0260ff60a81b199091161790556040517fceff56cd622d5b26b342d77190ef13c171df769ad7934e7a0a9efec5e23f71bc90610dbc90831515815260200190565b611225611c15565b60006112396005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611283576040519150601f19603f3d011682016040523d82523d6000602084013e611288565b606091505b50509050806112d95760405162461bcd60e51b815260206004820152600e60248201527f43616e27742073656e64204554480000000000000000000000000000000000006044820152606401610a34565b50565b6112e4611c15565b60058260ff16111580156112fc575060058160ff1611155b6113485760405162461bcd60e51b815260206004820152601460248201527f6665652063616e6e6f74206578636565642035250000000000000000000000006044820152606401610a34565b600b805461ffff60a01b1916600160a01b60ff85811691820260ff60a81b191692909217600160a81b928516928302179092556040805192835260208301919091527fe571e341b13404d4dee0ea343f7297a822ff73545da5cf373d8bd80a57d2359d910160405180910390a15050565b6113c1611c15565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b611403611c15565b6001600160a01b03811661147f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a34565b6112d981611c7e565b6114906118c8565b611498611c6f565b61150a5760405162461bcd60e51b815260206004820152603360248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f2070726f74656374696f6e2072656d6f766564000000000000000000000000006064820152608401610a34565b60006115146110ba565b90506115286006546001600160a01b031690565b6001600160a01b03166344a712438285856040518463ffffffff1660e01b815260040161095993929190612865565b60008060006115668585611cdb565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001208860405160200161160a939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b6040805160608101825260008082526020820181905291810191909152826001600160a01b0316846001600160a01b03161115611668579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600081602001516001600160a01b031682600001516001600160a01b0316106116c057600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b582019390935260d5808201949094528151808203909401845260f5019052815191012090565b6001600160a01b0383166117eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b0382166118675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610e7c611c15565b6001600160a01b0381166000908152602081905260408120546108fe565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461197a578181101561196d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a34565b61197a8484848403611770565b50505050565b6001600160a01b0382166119d65760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610a34565b80600003611a265760405162461bcd60e51b815260206004820181905260248201527f5472616e7366657220616d6f756e74206d757374206265206e6f74207a65726f6044820152606401610a34565b600654600160a81b900460ff168015611a505750600c543060009081526020819052604090205410155b8015611a665750600654600160a01b900460ff16155b8015611a7f57506009546001600160a01b038381169116145b8015611aa457506001600160a01b03831660009081526007602052604090205460ff16155b8015611ac057503260009081526007602052604090205460ff16155b15611ad057611ad0600c54611dea565b6009546001600160a01b03848116911614801590611afc57506009546001600160a01b03838116911614155b80611b1f57506001600160a01b03831660009081526007602052604090205460ff165b80611b4257506001600160a01b03821660009081526007602052604090205460ff165b80611b5c57503260009081526007602052604090205460ff165b15611b6c57610b85838383612047565b6009546000906001600160a01b0390811690841603611bcc57600b54600160a81b900460ff16611b9d6064846128c0565b611ba791906128e2565b90508015611bc757600b54611bc79085906001600160a01b031683612047565b611c01565b600b54600160a01b900460ff16611be46064846128c0565b611bee91906128e2565b90508015611c0157611c01843083612047565b61197a8484611c1084866128f9565b612047565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a34565b6000610adf6364826b7f61223f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b85838383611980565b600080826001600160a01b0316846001600160a01b031603611d655760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f4144445260448201527f45535345530000000000000000000000000000000000000000000000000000006064820152608401610a34565b826001600160a01b0316846001600160a01b031610611d85578284611d88565b83835b90925090506001600160a01b038216611de35760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f4144445245535300006044820152606401610a34565b9250929050565b6006805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e3257611e32612891565b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec8919061290c565b81600181518110611edb57611edb612891565b6001600160a01b039283166020918202929092010152600854611f019130911684611770565b6008546040517f52aa4c220000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906352aa4c2290611f559085906000908690309083904290600401612929565b600060405180830381600087803b158015611f6f57600080fd5b505af1158015611f83573d6000803e3d6000fd5b50479250508115905061203557600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611fdd576040519150601f19603f3d011682016040523d82523d6000602084013e611fe2565b606091505b50509050806120335760405162461bcd60e51b815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606401610a34565b505b50506006805460ff60a01b1916905550565b6001600160a01b0383166120c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b03821661213f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a34565b61214a838383612251565b6001600160a01b038316600090815260208190526040902054818110156121d95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361197a565b60006108fe61224d83421190565b1590565b610b8583838361225f611c6f565b156123b157600554600160a01b900460ff16612317576006546001600160a01b0316630336a33061228e6110ba565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b1580156122fe57600080fd5b505af1158015612312573d6000803e3d6000fd5b505050505b600554600160a81b900460ff16610b85576006546001600160a01b0316635434e5596123416110ba565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b15801561097357600080fd5b6123b9612448565b80156123cf5750600554600160a81b900460ff16155b15610b85576006546001600160a01b0316635434e5596123ed6110ba565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401610959565b6000610adf6000610adf60055460ff600160a81b909104161590565b600060208083528351808285015260005b8181101561249157858101830151858201604001528201612475565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112d957600080fd5b600080604083850312156124da57600080fd5b82356124e5816124b2565b946020939093013593505050565b60008083601f84011261250557600080fd5b50813567ffffffffffffffff81111561251d57600080fd5b6020830191508360208260051b8501011115611de357600080fd5b80151581146112d957600080fd5b60008060006040848603121561255b57600080fd5b833567ffffffffffffffff81111561257257600080fd5b61257e868287016124f3565b909450925050602084013561259281612538565b809150509250925092565b6000602082840312156125af57600080fd5b81356125ba816124b2565b9392505050565b6000806000606084860312156125d657600080fd5b83356125e1816124b2565b925060208401356125f1816124b2565b929592945050506040919091013590565b6000806020838503121561261557600080fd5b823567ffffffffffffffff81111561262c57600080fd5b612638858286016124f3565b90969095509350505050565b60006020828403121561265657600080fd5b5035919050565b6000806040838503121561267057600080fd5b823561267b816124b2565b9150602083013561268b81612538565b809150509250929050565b6000806000604084860312156126ab57600080fd5b833567ffffffffffffffff8111156126c257600080fd5b6126ce868287016124f3565b9094509250506020840135612592816124b2565b6000602082840312156126f457600080fd5b81356125ba81612538565b6000806040838503121561271257600080fd5b823561271d816124b2565b9150602083013561268b816124b2565b803560ff8116811461273e57600080fd5b919050565b6000806040838503121561275657600080fd5b61275f8361272d565b915061276d6020840161272d565b90509250929050565b600181811c9082168061278a57607f821691505b6020821081036127aa57634e487b7160e01b600052602260045260246000fd5b50919050565b8183526000602080850194508260005b858110156127ee5781356127d3816124b2565b6001600160a01b0316875295820195908201906001016127c0565b509495945050505050565b60408152600061280d6040830185876127b0565b90508215156020830152949350505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108fe576108fe61281f565b60006020828403121561285a57600080fd5b81516125ba81612538565b6001600160a01b03841681526040602082015260006128886040830184866127b0565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128b9576128b961281f565b5060010190565b6000826128dd57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108fe576108fe61281f565b818103818111156108fe576108fe61281f565b60006020828403121561291e57600080fd5b81516125ba816124b2565b600060c082018883526020888185015260c0604085015281885180845260e086019150828a01935060005b818110156129795784516001600160a01b031683529383019391830191600101612954565b50506001600160a01b039788166060860152959096166080840152505060a0015294935050505056fea264697066735822122048b6aac0a09571cae182a3ff36b7c7f8a27d612be42a8e98797efb716c4f25b664736f6c634300081100330000000000000000000000005e6a900c97d7ef8086a96f3854c9398205d228d9000000000000000000000000fbba67a042dc9e3e9f695a655ed9598dcd9f6e61000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d

Deployed Bytecode

0x6080604052600436106102d55760003560e01c806375ee838911610179578063a457c2d7116100d6578063dd62ed3e1161008a578063f2fde38b11610064578063f2fde38b146107f7578063fc1a222914610817578063fd1e467f1461083757600080fd5b8063dd62ed3e14610771578063e1b9ae61146107b7578063f0f44260146107d757600080fd5b8063c75c136d116100bb578063c75c136d1461071b578063cdd4bd791461073b578063db2e21bc1461075c57600080fd5b8063a457c2d7146106db578063a9059cbb146106fb57600080fd5b8063869175241161012d5780638da5cb5b116101125780638da5cb5b1461069357806395d89b41146106b157806395ddbe89146106c657600080fd5b8063869175241461065d5780638953c7701461067357600080fd5b80638187f5161161015e5780638187f516146105ec578063824e46051461060c57806385ecafd71461062d57600080fd5b806375ee8389146105ac57806375f0a874146105cc57600080fd5b8063421dd7c7116102325780635d098b38116101e65780636612e66f116101c05780636612e66f1461054157806370a0823114610561578063715018a61461059757600080fd5b80635d098b38146104e15780635fdb86f9146105015780636402511e1461052157600080fd5b806349bd5a5e1161021757806349bd5a5e146104815780635300f82b146104a15780635705ae43146104c157600080fd5b8063421dd7c71461044c5780634626402b1461046157600080fd5b806318160ddd1161028957806323b872dd1161026e57806323b872dd146103ea578063313ce5671461040a578063395093511461042c57600080fd5b806318160ddd146103ab5780631f69fcb9146103ca57600080fd5b80630c3dda54116102ba5780630c3dda541461033c578063110a599f1461035e5780631694505e1461037357600080fd5b806306fdde03146102e1578063095ea7b31461030c57600080fd5b366102dc57005b600080fd5b3480156102ed57600080fd5b506102f6610858565b6040516103039190612464565b60405180910390f35b34801561031857600080fd5b5061032c6103273660046124c7565b6108ea565b6040519015158152602001610303565b34801561034857600080fd5b5061035c610357366004612546565b610904565b005b34801561036a57600080fd5b5061035c610990565b34801561037f57600080fd5b50600854610393906001600160a01b031681565b6040516001600160a01b039091168152602001610303565b3480156103b757600080fd5b506002545b604051908152602001610303565b3480156103d657600080fd5b5061035c6103e536600461259d565b6109ad565b3480156103f657600080fd5b5061032c6104053660046125c1565b610a5f565b34801561041657600080fd5b5060065b60405160ff9091168152602001610303565b34801561043857600080fd5b5061032c6104473660046124c7565b610a83565b34801561045857600080fd5b5061035c610ac2565b34801561046d57600080fd5b50600a54610393906001600160a01b031681565b34801561048d57600080fd5b50600954610393906001600160a01b031681565b3480156104ad57600080fd5b50600554600160a01b900460ff161561032c565b3480156104cd57600080fd5b5061035c6104dc3660046124c7565b610ae4565b3480156104ed57600080fd5b5061035c6104fc36600461259d565b610c22565b34801561050d57600080fd5b5061035c61051c366004612602565b610c64565b34801561052d57600080fd5b5061035c61053c366004612644565b610d33565b34801561054d57600080fd5b5061035c61055c36600461265d565b610dc7565b34801561056d57600080fd5b506103bc61057c36600461259d565b6001600160a01b031660009081526020819052604090205490565b3480156105a357600080fd5b5061035c610e6a565b3480156105b857600080fd5b5061035c6105c7366004612696565b610e7e565b3480156105d857600080fd5b50600b54610393906001600160a01b031681565b3480156105f857600080fd5b5061035c61060736600461259d565b611081565b34801561061857600080fd5b50600b5461041a90600160a01b900460ff1681565b34801561063957600080fd5b5061032c61064836600461259d565b60076020526000908152604090205460ff1681565b34801561066957600080fd5b506103bc600c5481565b34801561067f57600080fd5b50600554600160a81b900460ff161561032c565b34801561069f57600080fd5b506005546001600160a01b0316610393565b3480156106bd57600080fd5b506102f66110ab565b3480156106d257600080fd5b506103936110ba565b3480156106e757600080fd5b5061032c6106f63660046124c7565b611110565b34801561070757600080fd5b5061032c6107163660046124c7565b6111ba565b34801561072757600080fd5b5061035c6107363660046126e2565b6111c8565b34801561074757600080fd5b50600b5461041a90600160a81b900460ff1681565b34801561076857600080fd5b5061035c61121d565b34801561077d57600080fd5b506103bc61078c3660046126ff565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107c357600080fd5b5061035c6107d2366004612743565b6112dc565b3480156107e357600080fd5b5061035c6107f236600461259d565b6113b9565b34801561080357600080fd5b5061035c61081236600461259d565b6113fb565b34801561082357600080fd5b5061035c610832366004612602565b611488565b34801561084357600080fd5b5060065461032c90600160a81b900460ff1681565b60606003805461086790612776565b80601f016020809104026020016040519081016040528092919081815260200182805461089390612776565b80156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b5050505050905090565b6000336108f8818585611770565b60019150505b92915050565b61090c6118c8565b6006546040517f3c271a050000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633c271a0590610959908690869086906004016127f9565b600060405180830381600087803b15801561097357600080fd5b505af1158015610987573d6000803e3d6000fd5b50505050505050565b6109986118c8565b6005805460ff60a81b1916600160a81b179055565b6109b56118c8565b6109c56109c06110ba565b6118d0565b15610a3d5760405162461bcd60e51b815260206004820152603860248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f206c697175696469747920616c7265616479206164646564000000000000000060648201526084015b60405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600033610a6d8582856118ee565b610a78858585611980565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906108f89082908690610abd908790612835565b611770565b610aca6118c8565b6005805460ff60a01b1916600160a01b179055565b905090565b610aec611c15565b6001600160a01b03821615610b8a576040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190612848565b505050565b604051600090339083908381818185875af1925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5050905080610b855760405162461bcd60e51b815260206004820152600e60248201527f43616e27742073656e64204554480000000000000000000000000000000000006044820152606401610a34565b610c2a611c15565b600b80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b610c6c6118c8565b610c74611c6f565b610ce65760405162461bcd60e51b815260206004820152603360248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f2070726f74656374696f6e2072656d6f766564000000000000000000000000006064820152608401610a34565b6000610cf06110ba565b9050610d046006546001600160a01b031690565b6001600160a01b0316634a2ae6658285856040518463ffffffff1660e01b815260040161095993929190612865565b610d3b611c15565b60008111610d8b5760405162461bcd60e51b815260206004820152600a60248201527f7a65726f20696e707574000000000000000000000000000000000000000000006044820152606401610a34565b600c8190556040518181527fb14ddfdd5c94bf0d7d69390393cb2bc7d021afb88860db1dac41c84b096e2b1e906020015b60405180910390a150565b610dcf611c15565b6001600160a01b03821660009081526007602052604090205481151560ff909116151503610e3f5760405162461bcd60e51b815260206004820152600b60248201527f416c7265616479207365740000000000000000000000000000000000000000006044820152606401610a34565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b610e72611c15565b610e7c6000611c7e565b565b610e866118c8565b610e8e611c6f565b610f005760405162461bcd60e51b815260206004820152603360248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f2070726f74656374696f6e2072656d6f766564000000000000000000000000006064820152608401610a34565b60058054750101000000000000000000000000000000000000000061ffff60a01b1982161790915560ff600160a01b8204811691600160a81b9004166000610f466110ba565b905060005b85811015611048576000878783818110610f6757610f67612891565b9050602002016020810190610f7c919061259d565b9050610f906006546001600160a01b031690565b6040517f86c58d3e0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152838116602483015291909116906386c58d3e90604401602060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612848565b15611035576110358187611030846118d0565b611cd0565b5080611040816128a7565b915050610f4b565b50506005805461ffff60a01b1916600160a01b9315159390930260ff60a81b191692909217600160a81b91151591909102179055505050565b611089611c15565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805461086790612776565b6000610adf7fa856464ae65f7619087bc369daaf7e387dae1e5af69cfa7935850ebf754b04c1736eccab422d763ac031210895c81787e87b43a652307382af49447d8a07e3bd95bd0d56f35241523fbab1611557565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156111ad5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610a34565b610a788286868403611770565b6000336108f8818585611980565b6111d0611c15565b60068054821515600160a81b0260ff60a81b199091161790556040517fceff56cd622d5b26b342d77190ef13c171df769ad7934e7a0a9efec5e23f71bc90610dbc90831515815260200190565b611225611c15565b60006112396005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114611283576040519150601f19603f3d011682016040523d82523d6000602084013e611288565b606091505b50509050806112d95760405162461bcd60e51b815260206004820152600e60248201527f43616e27742073656e64204554480000000000000000000000000000000000006044820152606401610a34565b50565b6112e4611c15565b60058260ff16111580156112fc575060058160ff1611155b6113485760405162461bcd60e51b815260206004820152601460248201527f6665652063616e6e6f74206578636565642035250000000000000000000000006044820152606401610a34565b600b805461ffff60a01b1916600160a01b60ff85811691820260ff60a81b191692909217600160a81b928516928302179092556040805192835260208301919091527fe571e341b13404d4dee0ea343f7297a822ff73545da5cf373d8bd80a57d2359d910160405180910390a15050565b6113c1611c15565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600760205260409020805460ff19166001179055565b611403611c15565b6001600160a01b03811661147f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a34565b6112d981611c7e565b6114906118c8565b611498611c6f565b61150a5760405162461bcd60e51b815260206004820152603360248201527f5573696e674c697175696469747950726f74656374696f6e536572766963653a60448201527f2070726f74656374696f6e2072656d6f766564000000000000000000000000006064820152608401610a34565b60006115146110ba565b90506115286006546001600160a01b031690565b6001600160a01b03166344a712438285856040518463ffffffff1660e01b815260040161095993929190612865565b60008060006115668585611cdb565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001208860405160200161160a939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f198184030181529190528051602090910120979650505050505050565b6040805160608101825260008082526020820181905291810191909152826001600160a01b0316846001600160a01b03161115611668579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600081602001516001600160a01b031682600001516001600160a01b0316106116c057600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301207fff0000000000000000000000000000000000000000000000000000000000000060a085015294901b6bffffffffffffffffffffffff191660a183015260b582019390935260d5808201949094528151808203909401845260f5019052815191012090565b6001600160a01b0383166117eb5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b0382166118675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610e7c611c15565b6001600160a01b0381166000908152602081905260408120546108fe565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461197a578181101561196d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a34565b61197a8484848403611770565b50505050565b6001600160a01b0382166119d65760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220746f207a65726f206164647265737300000000000000006044820152606401610a34565b80600003611a265760405162461bcd60e51b815260206004820181905260248201527f5472616e7366657220616d6f756e74206d757374206265206e6f74207a65726f6044820152606401610a34565b600654600160a81b900460ff168015611a505750600c543060009081526020819052604090205410155b8015611a665750600654600160a01b900460ff16155b8015611a7f57506009546001600160a01b038381169116145b8015611aa457506001600160a01b03831660009081526007602052604090205460ff16155b8015611ac057503260009081526007602052604090205460ff16155b15611ad057611ad0600c54611dea565b6009546001600160a01b03848116911614801590611afc57506009546001600160a01b03838116911614155b80611b1f57506001600160a01b03831660009081526007602052604090205460ff165b80611b4257506001600160a01b03821660009081526007602052604090205460ff165b80611b5c57503260009081526007602052604090205460ff165b15611b6c57610b85838383612047565b6009546000906001600160a01b0390811690841603611bcc57600b54600160a81b900460ff16611b9d6064846128c0565b611ba791906128e2565b90508015611bc757600b54611bc79085906001600160a01b031683612047565b611c01565b600b54600160a01b900460ff16611be46064846128c0565b611bee91906128e2565b90508015611c0157611c01843083612047565b61197a8484611c1084866128f9565b612047565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a34565b6000610adf6364826b7f61223f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b85838383611980565b600080826001600160a01b0316846001600160a01b031603611d655760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a204944454e544943414c5f4144445260448201527f45535345530000000000000000000000000000000000000000000000000000006064820152608401610a34565b826001600160a01b0316846001600160a01b031610611d85578284611d88565b83835b90925090506001600160a01b038216611de35760405162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f4144445245535300006044820152606401610a34565b9250929050565b6006805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e3257611e32612891565b6001600160a01b03928316602091820292909201810191909152600854604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec8919061290c565b81600181518110611edb57611edb612891565b6001600160a01b039283166020918202929092010152600854611f019130911684611770565b6008546040517f52aa4c220000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906352aa4c2290611f559085906000908690309083904290600401612929565b600060405180830381600087803b158015611f6f57600080fd5b505af1158015611f83573d6000803e3d6000fd5b50479250508115905061203557600a546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611fdd576040519150601f19603f3d011682016040523d82523d6000602084013e611fe2565b606091505b50509050806120335760405162461bcd60e51b815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606401610a34565b505b50506006805460ff60a01b1916905550565b6001600160a01b0383166120c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b03821661213f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610a34565b61214a838383612251565b6001600160a01b038316600090815260208190526040902054818110156121d95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610a34565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361197a565b60006108fe61224d83421190565b1590565b610b8583838361225f611c6f565b156123b157600554600160a01b900460ff16612317576006546001600160a01b0316630336a33061228e6110ba565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b1580156122fe57600080fd5b505af1158015612312573d6000803e3d6000fd5b505050505b600554600160a81b900460ff16610b85576006546001600160a01b0316635434e5596123416110ba565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401600060405180830381600087803b15801561097357600080fd5b6123b9612448565b80156123cf5750600554600160a81b900460ff16155b15610b85576006546001600160a01b0316635434e5596123ed6110ba565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0391821660048201528187166024820152908516604482015260648101849052608401610959565b6000610adf6000610adf60055460ff600160a81b909104161590565b600060208083528351808285015260005b8181101561249157858101830151858201604001528201612475565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146112d957600080fd5b600080604083850312156124da57600080fd5b82356124e5816124b2565b946020939093013593505050565b60008083601f84011261250557600080fd5b50813567ffffffffffffffff81111561251d57600080fd5b6020830191508360208260051b8501011115611de357600080fd5b80151581146112d957600080fd5b60008060006040848603121561255b57600080fd5b833567ffffffffffffffff81111561257257600080fd5b61257e868287016124f3565b909450925050602084013561259281612538565b809150509250925092565b6000602082840312156125af57600080fd5b81356125ba816124b2565b9392505050565b6000806000606084860312156125d657600080fd5b83356125e1816124b2565b925060208401356125f1816124b2565b929592945050506040919091013590565b6000806020838503121561261557600080fd5b823567ffffffffffffffff81111561262c57600080fd5b612638858286016124f3565b90969095509350505050565b60006020828403121561265657600080fd5b5035919050565b6000806040838503121561267057600080fd5b823561267b816124b2565b9150602083013561268b81612538565b809150509250929050565b6000806000604084860312156126ab57600080fd5b833567ffffffffffffffff8111156126c257600080fd5b6126ce868287016124f3565b9094509250506020840135612592816124b2565b6000602082840312156126f457600080fd5b81356125ba81612538565b6000806040838503121561271257600080fd5b823561271d816124b2565b9150602083013561268b816124b2565b803560ff8116811461273e57600080fd5b919050565b6000806040838503121561275657600080fd5b61275f8361272d565b915061276d6020840161272d565b90509250929050565b600181811c9082168061278a57607f821691505b6020821081036127aa57634e487b7160e01b600052602260045260246000fd5b50919050565b8183526000602080850194508260005b858110156127ee5781356127d3816124b2565b6001600160a01b0316875295820195908201906001016127c0565b509495945050505050565b60408152600061280d6040830185876127b0565b90508215156020830152949350505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108fe576108fe61281f565b60006020828403121561285a57600080fd5b81516125ba81612538565b6001600160a01b03841681526040602082015260006128886040830184866127b0565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016128b9576128b961281f565b5060010190565b6000826128dd57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108fe576108fe61281f565b818103818111156108fe576108fe61281f565b60006020828403121561291e57600080fd5b81516125ba816124b2565b600060c082018883526020888185015260c0604085015281885180845260e086019150828a01935060005b818110156129795784516001600160a01b031683529383019391830191600101612954565b50506001600160a01b039788166060860152959096166080840152505060a0015294935050505056fea264697066735822122048b6aac0a09571cae182a3ff36b7c7f8a27d612be42a8e98797efb716c4f25b664736f6c63430008110033

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

0000000000000000000000005e6a900c97d7ef8086a96f3854c9398205d228d9000000000000000000000000fbba67a042dc9e3e9f695a655ed9598dcd9f6e61000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d

-----Decoded View---------------
Arg [0] : _treasure (address): 0x5E6a900c97D7ef8086a96f3854C9398205D228D9
Arg [1] : _marketing (address): 0xFBBA67A042dc9E3E9F695A655Ed9598dcD9F6e61
Arg [2] : _router (address): 0xc873fEcbd354f5A56E00E710B90EF4201db2448d

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005e6a900c97d7ef8086a96f3854c9398205d228d9
Arg [1] : 000000000000000000000000fbba67a042dc9e3e9f695a655ed9598dcd9f6e61
Arg [2] : 000000000000000000000000c873fecbd354f5a56e00e710b90ef4201db2448d


Loading