false
true
0

Contract Address Details

0x0888c06DdE834516B9988c0AB74D84fd2591EB77

Token
XYZ (XYZ)
Creator
0x82b7c5–4c62f4 at 0xb74dab–b623cf
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
27 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25873297
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
XYZ




Optimization enabled
true
Compiler version
v0.8.20+commit.a1b79de6




Optimization runs
200
EVM Version
paris




Verified at
2025-12-24T14:58:42.739201Z

Constructor Arguments

0x0000000000000000000000009fab1ecf7dced2aeea960ee79d2036ab0d28fb7c000000000000000000000000df9ee0dfa09e448fc8a8f5e891414f5ca8fb3c55

Arg [0] (address) : 0x9fab1ecf7dced2aeea960ee79d2036ab0d28fb7c
Arg [1] (address) : 0xdf9ee0dfa09e448fc8a8f5e891414f5ca8fb3c55

              

contracts/XYZ.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WPLS() external pure returns (address);
	
	function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
	
	function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IDEXPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
}

contract XYZ is ERC20, Ownable {

    address public immutable PAIR;
    address public immutable UFO;
    address public immutable BURN;

    address public development;

    uint256 public immutable developmentFee;
    uint256 public immutable UFOBurnFee;
    uint256 public immutable totalFee;
	uint256 public immutable divider;
	
    uint256 public swapThreshold;

    bool private swapping;

    IDEXRouter public router;

    mapping(address => bool) public isWalletExemptFromFee;
    mapping(address => bool) public isLiquidityPair;

    event SwappingThresholdUpdated(uint256 amount);
    event LiquidityPairUpdated(address indexed pair, bool value);
    event WalletExemptFromFee(address indexed wallet, bool value);
    event DevelopmentWalletUpdated(address indexed wallet);
    event SwapFailed(uint256 tokens);
	
    constructor(address _owner, address _development) ERC20("XYZ", "XYZ") {
        require(_owner != address(0), "Owner:: zero address");
        require(_development != address(0), "Development:: zero address");

        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);

        PAIR = IDEXFactory(router.factory()).createPair(address(this), router.WPLS());
        UFO = address(0x456548A9B56eFBbD89Ca0309edd17a9E20b04018);
        BURN = address(0x0000000000000000000000000000000000000369);

        development = _development;

        developmentFee = 200;
        UFOBurnFee = 50;
        totalFee = developmentFee + UFOBurnFee;
		divider = 10000;

        isLiquidityPair[PAIR] = true;

        isWalletExemptFromFee[address(this)] = true;
        isWalletExemptFromFee[_owner] = true;
		isWalletExemptFromFee[_development] = true;
		
        swapThreshold = 100 * 1e18;
		
        _mint(_owner, 1_000_000 * 1e18);
        _transferOwnership(_owner);
    }

    receive() external payable {}

    function exemptWalletFromFee(address wallet, bool status) external onlyOwner {
        require(wallet != address(0), "Zero address");
        require(isWalletExemptFromFee[wallet] != status, "Wallet is already the value of 'status'");

        isWalletExemptFromFee[wallet] = status;
        emit WalletExemptFromFee(wallet, status);
    }

    function updateSwappingThreshold(uint256 amount) external onlyOwner {
        require(amount <= totalSupply(), "Amount cannot be over the total supply.");
        require(amount >= (10 * 1e18), "Amount cannot be less than `10` token.");

        swapThreshold = amount;
        emit SwappingThresholdUpdated(amount);
    }

    function updateLiquidityPair(address newPair, bool value) external onlyOwner {
        require(isValidLiquidityPair(newPair), "Invalid liquidity pair");
        require(isLiquidityPair[newPair] != value, "Pair is already the value of 'value'");

        isLiquidityPair[newPair] = value;
        emit LiquidityPairUpdated(newPair, value);
    }

    function updateDevelopmentWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "Zero address");
		require(!isContract(newWallet), "Contract address is not allowed");
		
        development = newWallet;
        emit DevelopmentWalletUpdated(newWallet);
    }

    function isValidLiquidityPair(address _pair) private view returns (bool) {
        try IDEXPair(_pair).token0() returns (address token0) {
            address token1 = IDEXPair(_pair).token1();
            return (token0 == address(this) || token1 == address(this));
        } catch {
            return false;
        }
    }

    function _transfer(address sender, address recipient, uint256 amount) internal override(ERC20) {
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapThreshold;
		
        if (!swapping && canSwap && isLiquidityPair[recipient]) {
            uint256 tokenToDevelopment = (swapThreshold * developmentFee) / (totalFee);
            uint256 tokenToUFOBurn = swapThreshold - tokenToDevelopment;

            swapping = true;
            swapTokensForPLS(tokenToDevelopment);
            swapTokensForUFOBurn(tokenToUFOBurn);
            swapping = false;
        }

        if (isWalletExemptFromFee[sender] || isWalletExemptFromFee[recipient]) {
            super._transfer(sender, recipient, amount);
        } else {
            uint256 fee = (amount * totalFee) / (divider);
            super._transfer(sender, address(this), fee);
            super._transfer(sender, recipient, amount - fee);
        }
    }

    function swapTokensForPLS(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WPLS();
		
        _approve(address(this), address(router), amount);
		
        try router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            development,
            block.timestamp + 300
        ) {} catch {
            emit SwapFailed(amount);
        }
    }

    function swapTokensForUFOBurn(uint256 amount) private {
		address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = router.WPLS();
        path[2] = UFO;

        _approve(address(this), address(router), amount);

        try router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            BURN,
            block.timestamp + 300
        ) {} catch {
            emit SwapFailed(amount);
        }
    }
	
	function isContract(address account) internal view returns (bool) {
		return account.code.length > 0;
    }
}
        

@openzeppelin/contracts/access/Ownable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}
          

@openzeppelin/contracts/token/ERC20/ERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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 {}
}
          

@openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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);
}
          

@openzeppelin/contracts/token/ERC20/extensions/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);
}
          

@openzeppelin/contracts/utils/Context.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}
          

Compiler Settings

{"viaIR":true,"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","storageLayout"],"":["ast"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"paris"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"_development","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"DevelopmentWalletUpdated","inputs":[{"type":"address","name":"wallet","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"LiquidityPairUpdated","inputs":[{"type":"address","name":"pair","internalType":"address","indexed":true},{"type":"bool","name":"value","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SwapFailed","inputs":[{"type":"uint256","name":"tokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SwappingThresholdUpdated","inputs":[{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"WalletExemptFromFee","inputs":[{"type":"address","name":"wallet","internalType":"address","indexed":true},{"type":"bool","name":"value","internalType":"bool","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"BURN","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"PAIR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"UFO","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"UFOBurnFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"development","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"developmentFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"divider","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"exemptWalletFromFee","inputs":[{"type":"address","name":"wallet","internalType":"address"},{"type":"bool","name":"status","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isLiquidityPair","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWalletExemptFromFee","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateDevelopmentWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateLiquidityPair","inputs":[{"type":"address","name":"newPair","internalType":"address"},{"type":"bool","name":"value","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSwappingThreshold","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

0x61016060409080825234620006f8578181620020a58038038091620000258285620006fd565b833981010312620006f8576200003b8162000721565b916200004b602080930162000721565b906200005662000736565b936200006162000736565b85519093906001600160401b0390818111620005ef576003908154906001998a83811c93168015620006ed575b8a841014620006d7578190601f9384811162000681575b508a90848311600114620006115760009262000605575b505060001982851b1c1916908a1b1782555b8651928311620005ef5760049687548a81811c91168015620005e4575b8a821014620005cf57908183869594931162000575575b50899184116001146200050a57600093620004fe575b505082891b92600019911b1c19161784555b620001353362000766565b6001600160a01b0394828616918215620004bb5786169485156200047a5760088054610100600160a81b03191674165c3410fc91ef562c50559f7d2289febed552d90017808255865163c45a015560e01b815297911c881683888481845afa9788156200042d5760009862000438575b5083839188519283809263ef8ef56f60e01b82525afa9081156200042d5784918a91600091620003ea575b506044906000838b519c8d9586946364e329cb60e11b8652308b870152166024850152165af1968715620003df576000976200039d575b508660805273456548a9b56efbbd89ca0309edd17a9e20b0401860a05261036960c0528060018060a01b0319600654161760065560c860e0526101009860328a526101209860fa8a52610140986127108a5216600052600a8452866000209160ff19928284825416179055306000526009855287600020828482541617905585600052876000208284825416179055600052866000209182541617905568056bc75e2d6310000060075560025469d3c21bcecceda100000091828201809211620003885750620003169493926000927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926002558484528382528784208181540190558751908152a362000766565b51916118f59384620007b08539608051846103d8015260a051848181610bbd01526114df015260c0518481816103940152611538015260e051848181610450015261130901525183610a61015251828181610b66015281816112880152611330015251818181610a0a01526112af0152f35b601190634e487b7160e01b6000525260246000fd5b90968382813d8311620003d7575b620003b78183620006fd565b81010312620003d45750620003cc9062000721565b953862000207565b80fd5b503d620003ab565b86513d6000823e3d90fd5b8381949293503d831162000425575b620004058183620006fd565b81010312620003d457508860446200041e869362000721565b90620001d0565b503d620003f9565b87513d6000823e3d90fd5b90978482813d831162000472575b620004528183620006fd565b81010312620003d457508362000469849262000721565b989150620001a5565b503d62000446565b60649185519162461bcd60e51b8352820152601a60248201527f446576656c6f706d656e743a3a207a65726f20616464726573730000000000006044820152fd5b845162461bcd60e51b8152808701839052601460248201527f4f776e65723a3a207a65726f20616464726573730000000000000000000000006044820152606490fd5b01519150388062000118565b91908a9450601f19841692896000528a6000209360005b8c8282106200055e575050851162000543575b50505050811b0184556200012a565b01519060f884600019921b161c191690553880808062000534565b8385015187558e9890960195938401930162000521565b909192935088600052896000208380870160051c8201928c8810620005c5575b918d918897969594930160051c01915b828110620005b557505062000102565b600081558796508d9101620005a5565b9250819262000595565b602289634e487b7160e01b6000525260246000fd5b90607f1690620000eb565b634e487b7160e01b600052604160045260246000fd5b015190503880620000bc565b60008681528c81208e9550929190601f198516908e5b82821062000660575050841162000647575b505050811b018255620000ce565b015160001983871b60f8161c1916905538808062000639565b91929395968291958786015181550195019301908e95949392918e62000627565b909150846000528a6000208480850160051c8201928d8610620006cd575b918e91869594930160051c01915b828110620006bd575050620000a5565b600081558594508e9101620006ad565b925081926200069f565b634e487b7160e01b600052602260045260246000fd5b92607f16926200008e565b600080fd5b601f909101601f19168101906001600160401b03821190821017620005ef57604052565b51906001600160a01b0382168203620006f857565b60408051919082016001600160401b03811183821017620005ef5760405260038252622c2cad60e91b6020830152565b600580546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a356fe6080604081815260049182361015610022575b505050361561002057600080fd5b005b600092833560e01c9182630445b66714610e175750816305a58d0714610d0b57816306fdde0314610c16578163095ea7b314610bec57816310696ada14610ba857816318160ddd14610b895781631df4ccfc14610b4e57816323b872dd14610a8457816326464cc114610a49578163313ce56714610a2d578163378efa37146109f2578163395093511461098b5781634f6eec5e1461086b57816350d37cdd146107805781635c9a05b81461074257816370a082311461070b578163715018a6146106ae57816374ed51bd146106705781637b929c27146106475781638da5cb5b1461061e57816395d89b411461051b578163a457c2d714610473578163a5f3d00314610438578163a9059cbb14610407578163ace3a8a7146103c3578163c0a2526c1461037f578163dd62ed3e14610336578163f023f57314610279578163f2fde38b146101a9575063f887ea401461017c5780610012565b346101a557816003193601126101a55760088054915191901c6001600160a01b03168152602090f35b5080fd5b905034610275576020366003190112610275576101c4610e7c565b906101cd610edc565b6001600160a01b03918216928315610223575050600554826bffffffffffffffffffffffff60a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8280fd5b90503461027557602036600319011261027557610294610e7c565b9161029d610edc565b6001600160a01b038316926102b3841515611082565b3b6102f3575050600680546001600160a01b031916821790557f59fd076cdcd0c12d650e7d16898047308777be9d03b00a2907a56cb113412be58280a280f35b906020606492519162461bcd60e51b8352820152601f60248201527f436f6e74726163742061646472657373206973206e6f7420616c6c6f776564006044820152fd5b5050346101a557806003193601126101a55780602092610354610e7c565b61035c610e97565b6001600160a01b0391821683526001865283832091168252845220549051908152f35b5050346101a557816003193601126101a557517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346101a557816003193601126101a557517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346101a557806003193601126101a557602090610431610427610e7c565b6024359033611207565b5160018152f35b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b9050823461051857826003193601126105185761048e610e7c565b918360243592338152600160205281812060018060a01b03861682526020522054908282106104c7576020856104318585038733610f80565b608490602086519162461bcd60e51b8352820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152fd5b80fd5b8383346101a557816003193601126101a557805191809380549160019083821c92828516948515610614575b6020958686108114610601578589529081156105dd5750600114610585575b6105818787610577828c0383610f5e565b5191829182610e33565b0390f35b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106105ca57505050826105819461057792820101948680610566565b80548685018801529286019281016105ac565b60ff19168887015250505050151560051b8301019250610577826105818680610566565b634e487b7160e01b845260228352602484fd5b93607f1693610547565b5050346101a557816003193601126101a55760055490516001600160a01b039091168152602090f35b5050346101a557816003193601126101a55760065490516001600160a01b039091168152602090f35b5050346101a55760203660031901126101a55760209160ff9082906001600160a01b0361069b610e7c565b1681526009855220541690519015158152f35b83346105185780600319360112610518576106c7610edc565b600580546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346101a55760203660031901126101a55760209181906001600160a01b03610733610e7c565b16815280845220549051908152f35b5050346101a55760203660031901126101a55760209160ff9082906001600160a01b0361076d610e7c565b168152600a855220541690519015158152f35b9050346102755761079036610ead565b929061079a610edc565b6001600160a01b0316926107af841515611082565b838552600960205260ff82862054169281151580941515146108185750916020916108107f437c058b19f0e29bbd65e1b03d0c97fac5d0adef2e4c7cbd74a3a99ab950839694868852600985528288209060ff801983541691151516179055565b51908152a280f35b608490602084519162461bcd60e51b8352820152602760248201527f57616c6c657420697320616c7265616479207468652076616c7565206f6620276044820152667374617475732760c81b6064820152fd5b9050346102755761087b36610ead565b9290610885610edc565b61088e816110dc565b1561094f576001600160a01b0316808552600a60205281852054909380151593909160ff16151584146109005750916020916108107f7a2f4227df0ce76d5d4187329faaf8c53eb621fd92edb868d331f292bb01134494868852600a85528288209060ff801983541691151516179055565b608490602084519162461bcd60e51b83528201526024808201527f5061697220697320616c7265616479207468652076616c7565206f66202776616044820152636c75652760e01b6064820152fd5b815162461bcd60e51b8152602081850152601660248201527524b73b30b634b2103634b8bab4b234ba3c903830b4b960511b6044820152606490fd5b8284346105185781600319360112610518576109a5610e7c565b338252600160209081528383206001600160a01b03831684529052828220546024358101929083106109df57602084610431858533610f80565b634e487b7160e01b815260118552602490fd5b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101a557816003193601126101a5576020905160128152f35b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b839150346101a55760603660031901126101a557610aa0610e7c565b610aa8610e97565b91846044359460018060a01b038416815260016020528181203382526020522054906000198203610ae2575b602086610431878787611207565b848210610b0b5750918391610b006020969561043195033383610f80565b919394819350610ad4565b606490602087519162461bcd60e51b8352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050346101a557816003193601126101a5576020906002549051908152f35b5050346101a557816003193601126101a557517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346101a557806003193601126101a557602090610431610c0c610e7c565b6024359033610f80565b91905034610275578260031936011261027557805191836003549060019082821c928281168015610d01575b6020958686108214610cee5750848852908115610ccc5750600114610c73575b6105818686610577828b0383610f5e565b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610cb9575050508261058194610577928201019438610c62565b8054868501880152928601928101610c9c565b60ff191687860152505050151560051b83010192506105778261058138610c62565b634e487b7160e01b845260229052602483fd5b93607f1693610c42565b9190503461027557602036600319011261027557813591610d2a610edc565b6002548311610dc557678ac7230489e800008310610d745750816020917f78ed18f7611efe8fa3d58253a92768b7e79e09d2d1b270e25cf2b5d08bc2d3159360075551908152a180f35b6020608492519162461bcd60e51b8352820152602660248201527f416d6f756e742063616e6e6f74206265206c657373207468616e2060313060206044820152653a37b5b2b71760d11b6064820152fd5b6020608492519162461bcd60e51b8352820152602760248201527f416d6f756e742063616e6e6f74206265206f7665722074686520746f74616c2060448201526639bab838363c9760c91b6064820152fd5b8490346101a557816003193601126101a5576020906007548152f35b6020808252825181830181905290939260005b828110610e6857505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501610e46565b600435906001600160a01b0382168203610e9257565b600080fd5b602435906001600160a01b0382168203610e9257565b6040906003190112610e92576004356001600160a01b0381168103610e9257906024358015158103610e925790565b6005546001600160a01b03163303610ef057565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b67ffffffffffffffff8111610f4857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610f4857604052565b6001600160a01b039081169182156110315716918215610fe15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b1561108957565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b90816020910312610e9257516001600160a01b0381168103610e925790565b604051630dfe168160e01b81526001600160a01b03916020919083168282600481845afa60009281611192575b506111175750505050600090565b826004916040519283809263d21220a760e01b82525afa92831561118657600093611157575b50508216301491821561114f57505090565b163014919050565b611177929350803d1061117f575b61116f8183610f5e565b8101906110bd565b90388061113d565b503d611165565b6040513d6000823e3d90fd5b6111aa919350843d861161117f5761116f8183610f5e565b9138611109565b818102929181159184041417156111c457565b634e487b7160e01b600052601160045260246000fd5b81156111e4570490565b634e487b7160e01b600052601260045260246000fd5b919082039182116111c457565b9190600030815260209080825260409081812054600754906008918254918160ff84161591826116a8575b50508061168b575b6112fe575b5050506001600160a01b03868116825260099093528181205460ff169283156112eb575b50505060001461127857611276926116b3565b565b6112e561127693926112d46112ad7f0000000000000000000000000000000000000000000000000000000000000000836111b1565b7f0000000000000000000000000000000000000000000000000000000000000000906111da565b906112e08230876116b3565b6111fa565b916116b3565b60ff935084168152205416388080611263565b61135c61135561132e7f0000000000000000000000000000000000000000000000000000000000000000846111b1565b7f0000000000000000000000000000000000000000000000000000000000000000906111da565b80926111fa565b60ff199283166001178085558651919267ffffffffffffffff9160608401838111858210176116775789526002845288368b8601373061139b85611821565b52885163ef8ef56f60e01b8082526004936001600160a01b0393919290918a1c8416908d818781855afa90811561166d579183918f936113f2948f92611650575b5050866113e88b611844565b9116905230610f80565b8289548a1c169583600654169061012c42019788421161163d57803b15611639578e92918d918f838a61143a8e8a94519889978896879563791ac94760e01b87528601611854565b03925af19081611626575b5061161f577ff9e10ddceffcb10b96e8833202366240699b814c91f371ddd9befa3aee9bc60f918c51908152a15b895193608085019081118582101761160a578a52600384526060368c8601373061149c85611821565b52818854891c16908a519081528b818581855afa908115611600578a916115e3575b50826114c986611844565b911690528351600210156115ce578561150a91837f000000000000000000000000000000000000000000000000000000000000000016606087015230610f80565b8654871c1691823b156115ca57899361155f9389938480948d5197889586948593635c11d79560e01b85528d7f0000000000000000000000000000000000000000000000000000000000000000928601611854565b03925af191826115ad575b50506115a6577ff9e10ddceffcb10b96e8833202366240699b814c91f371ddd9befa3aee9bc60f918651908152a15b815416905538808061123f565b5050611599565b6115b991929350610f34565b6115c6578690853861156a565b8480fd5b8780fd5b603283634e487b7160e01b6000525260246000fd5b6115fa91508c8d3d1061117f5761116f8183610f5e565b386114be565b8b513d8c823e3d90fd5b604184634e487b7160e01b6000525260246000fd5b5050611473565b611632909c919c610f34565b9a38611445565b8c80fd5b634e487b7160e01b8d526011875260248dfd5b6116669250803d1061117f5761116f8183610f5e565b8f806113dc565b8d513d8e823e3d90fd5b634e487b7160e01b89526041600452602489fd5b506001600160a01b0387168452600a86528484205460ff1661123a565b101590508138611232565b6001600160a01b039081169182156117ce571691821561177d5760008281528060205260408120549180831061172957604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b80511561182e5760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101561182e5760400190565b91909493929460a0830190835260209060008285015260a0604085015282518091528160c0850193019160005b8281106118a25750505050906080919460018060a01b031660608201520152565b83516001600160a01b03168552938101939281019260010161188156fea26469706673582212205a5b348d9c02841baf92778da594c1c1ac9559b12c647d2d69eb849db44986b764736f6c634300081400330000000000000000000000009fab1ecf7dced2aeea960ee79d2036ab0d28fb7c000000000000000000000000df9ee0dfa09e448fc8a8f5e891414f5ca8fb3c55

Deployed ByteCode

0x6080604081815260049182361015610022575b505050361561002057600080fd5b005b600092833560e01c9182630445b66714610e175750816305a58d0714610d0b57816306fdde0314610c16578163095ea7b314610bec57816310696ada14610ba857816318160ddd14610b895781631df4ccfc14610b4e57816323b872dd14610a8457816326464cc114610a49578163313ce56714610a2d578163378efa37146109f2578163395093511461098b5781634f6eec5e1461086b57816350d37cdd146107805781635c9a05b81461074257816370a082311461070b578163715018a6146106ae57816374ed51bd146106705781637b929c27146106475781638da5cb5b1461061e57816395d89b411461051b578163a457c2d714610473578163a5f3d00314610438578163a9059cbb14610407578163ace3a8a7146103c3578163c0a2526c1461037f578163dd62ed3e14610336578163f023f57314610279578163f2fde38b146101a9575063f887ea401461017c5780610012565b346101a557816003193601126101a55760088054915191901c6001600160a01b03168152602090f35b5080fd5b905034610275576020366003190112610275576101c4610e7c565b906101cd610edc565b6001600160a01b03918216928315610223575050600554826bffffffffffffffffffffffff60a01b821617600555167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b8280fd5b90503461027557602036600319011261027557610294610e7c565b9161029d610edc565b6001600160a01b038316926102b3841515611082565b3b6102f3575050600680546001600160a01b031916821790557f59fd076cdcd0c12d650e7d16898047308777be9d03b00a2907a56cb113412be58280a280f35b906020606492519162461bcd60e51b8352820152601f60248201527f436f6e74726163742061646472657373206973206e6f7420616c6c6f776564006044820152fd5b5050346101a557806003193601126101a55780602092610354610e7c565b61035c610e97565b6001600160a01b0391821683526001865283832091168252845220549051908152f35b5050346101a557816003193601126101a557517f00000000000000000000000000000000000000000000000000000000000003696001600160a01b03168152602090f35b5050346101a557816003193601126101a557517f000000000000000000000000835180dacbfa93c4b2a66c53aa376036dc1fdc616001600160a01b03168152602090f35b5050346101a557806003193601126101a557602090610431610427610e7c565b6024359033611207565b5160018152f35b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000000c88152f35b9050823461051857826003193601126105185761048e610e7c565b918360243592338152600160205281812060018060a01b03861682526020522054908282106104c7576020856104318585038733610f80565b608490602086519162461bcd60e51b8352820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152fd5b80fd5b8383346101a557816003193601126101a557805191809380549160019083821c92828516948515610614575b6020958686108114610601578589529081156105dd5750600114610585575b6105818787610577828c0383610f5e565b5191829182610e33565b0390f35b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106105ca57505050826105819461057792820101948680610566565b80548685018801529286019281016105ac565b60ff19168887015250505050151560051b8301019250610577826105818680610566565b634e487b7160e01b845260228352602484fd5b93607f1693610547565b5050346101a557816003193601126101a55760055490516001600160a01b039091168152602090f35b5050346101a557816003193601126101a55760065490516001600160a01b039091168152602090f35b5050346101a55760203660031901126101a55760209160ff9082906001600160a01b0361069b610e7c565b1681526009855220541690519015158152f35b83346105185780600319360112610518576106c7610edc565b600580546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346101a55760203660031901126101a55760209181906001600160a01b03610733610e7c565b16815280845220549051908152f35b5050346101a55760203660031901126101a55760209160ff9082906001600160a01b0361076d610e7c565b168152600a855220541690519015158152f35b9050346102755761079036610ead565b929061079a610edc565b6001600160a01b0316926107af841515611082565b838552600960205260ff82862054169281151580941515146108185750916020916108107f437c058b19f0e29bbd65e1b03d0c97fac5d0adef2e4c7cbd74a3a99ab950839694868852600985528288209060ff801983541691151516179055565b51908152a280f35b608490602084519162461bcd60e51b8352820152602760248201527f57616c6c657420697320616c7265616479207468652076616c7565206f6620276044820152667374617475732760c81b6064820152fd5b9050346102755761087b36610ead565b9290610885610edc565b61088e816110dc565b1561094f576001600160a01b0316808552600a60205281852054909380151593909160ff16151584146109005750916020916108107f7a2f4227df0ce76d5d4187329faaf8c53eb621fd92edb868d331f292bb01134494868852600a85528288209060ff801983541691151516179055565b608490602084519162461bcd60e51b83528201526024808201527f5061697220697320616c7265616479207468652076616c7565206f66202776616044820152636c75652760e01b6064820152fd5b815162461bcd60e51b8152602081850152601660248201527524b73b30b634b2103634b8bab4b234ba3c903830b4b960511b6044820152606490fd5b8284346105185781600319360112610518576109a5610e7c565b338252600160209081528383206001600160a01b03831684529052828220546024358101929083106109df57602084610431858533610f80565b634e487b7160e01b815260118552602490fd5b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000027108152f35b5050346101a557816003193601126101a5576020905160128152f35b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000000328152f35b839150346101a55760603660031901126101a557610aa0610e7c565b610aa8610e97565b91846044359460018060a01b038416815260016020528181203382526020522054906000198203610ae2575b602086610431878787611207565b848210610b0b5750918391610b006020969561043195033383610f80565b919394819350610ad4565b606490602087519162461bcd60e51b8352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b5050346101a557816003193601126101a557602090517f00000000000000000000000000000000000000000000000000000000000000fa8152f35b5050346101a557816003193601126101a5576020906002549051908152f35b5050346101a557816003193601126101a557517f000000000000000000000000456548a9b56efbbd89ca0309edd17a9e20b040186001600160a01b03168152602090f35b5050346101a557806003193601126101a557602090610431610c0c610e7c565b6024359033610f80565b91905034610275578260031936011261027557805191836003549060019082821c928281168015610d01575b6020958686108214610cee5750848852908115610ccc5750600114610c73575b6105818686610577828b0383610f5e565b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610cb9575050508261058194610577928201019438610c62565b8054868501880152928601928101610c9c565b60ff191687860152505050151560051b83010192506105778261058138610c62565b634e487b7160e01b845260229052602483fd5b93607f1693610c42565b9190503461027557602036600319011261027557813591610d2a610edc565b6002548311610dc557678ac7230489e800008310610d745750816020917f78ed18f7611efe8fa3d58253a92768b7e79e09d2d1b270e25cf2b5d08bc2d3159360075551908152a180f35b6020608492519162461bcd60e51b8352820152602660248201527f416d6f756e742063616e6e6f74206265206c657373207468616e2060313060206044820152653a37b5b2b71760d11b6064820152fd5b6020608492519162461bcd60e51b8352820152602760248201527f416d6f756e742063616e6e6f74206265206f7665722074686520746f74616c2060448201526639bab838363c9760c91b6064820152fd5b8490346101a557816003193601126101a5576020906007548152f35b6020808252825181830181905290939260005b828110610e6857505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501610e46565b600435906001600160a01b0382168203610e9257565b600080fd5b602435906001600160a01b0382168203610e9257565b6040906003190112610e92576004356001600160a01b0381168103610e9257906024358015158103610e925790565b6005546001600160a01b03163303610ef057565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b67ffffffffffffffff8111610f4857604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610f4857604052565b6001600160a01b039081169182156110315716918215610fe15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b1561108957565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b90816020910312610e9257516001600160a01b0381168103610e925790565b604051630dfe168160e01b81526001600160a01b03916020919083168282600481845afa60009281611192575b506111175750505050600090565b826004916040519283809263d21220a760e01b82525afa92831561118657600093611157575b50508216301491821561114f57505090565b163014919050565b611177929350803d1061117f575b61116f8183610f5e565b8101906110bd565b90388061113d565b503d611165565b6040513d6000823e3d90fd5b6111aa919350843d861161117f5761116f8183610f5e565b9138611109565b818102929181159184041417156111c457565b634e487b7160e01b600052601160045260246000fd5b81156111e4570490565b634e487b7160e01b600052601260045260246000fd5b919082039182116111c457565b9190600030815260209080825260409081812054600754906008918254918160ff84161591826116a8575b50508061168b575b6112fe575b5050506001600160a01b03868116825260099093528181205460ff169283156112eb575b50505060001461127857611276926116b3565b565b6112e561127693926112d46112ad7f00000000000000000000000000000000000000000000000000000000000000fa836111b1565b7f0000000000000000000000000000000000000000000000000000000000002710906111da565b906112e08230876116b3565b6111fa565b916116b3565b60ff935084168152205416388080611263565b61135c61135561132e7f00000000000000000000000000000000000000000000000000000000000000c8846111b1565b7f00000000000000000000000000000000000000000000000000000000000000fa906111da565b80926111fa565b60ff199283166001178085558651919267ffffffffffffffff9160608401838111858210176116775789526002845288368b8601373061139b85611821565b52885163ef8ef56f60e01b8082526004936001600160a01b0393919290918a1c8416908d818781855afa90811561166d579183918f936113f2948f92611650575b5050866113e88b611844565b9116905230610f80565b8289548a1c169583600654169061012c42019788421161163d57803b15611639578e92918d918f838a61143a8e8a94519889978896879563791ac94760e01b87528601611854565b03925af19081611626575b5061161f577ff9e10ddceffcb10b96e8833202366240699b814c91f371ddd9befa3aee9bc60f918c51908152a15b895193608085019081118582101761160a578a52600384526060368c8601373061149c85611821565b52818854891c16908a519081528b818581855afa908115611600578a916115e3575b50826114c986611844565b911690528351600210156115ce578561150a91837f000000000000000000000000456548a9b56efbbd89ca0309edd17a9e20b0401816606087015230610f80565b8654871c1691823b156115ca57899361155f9389938480948d5197889586948593635c11d79560e01b85528d7f0000000000000000000000000000000000000000000000000000000000000369928601611854565b03925af191826115ad575b50506115a6577ff9e10ddceffcb10b96e8833202366240699b814c91f371ddd9befa3aee9bc60f918651908152a15b815416905538808061123f565b5050611599565b6115b991929350610f34565b6115c6578690853861156a565b8480fd5b8780fd5b603283634e487b7160e01b6000525260246000fd5b6115fa91508c8d3d1061117f5761116f8183610f5e565b386114be565b8b513d8c823e3d90fd5b604184634e487b7160e01b6000525260246000fd5b5050611473565b611632909c919c610f34565b9a38611445565b8c80fd5b634e487b7160e01b8d526011875260248dfd5b6116669250803d1061117f5761116f8183610f5e565b8f806113dc565b8d513d8e823e3d90fd5b634e487b7160e01b89526041600452602489fd5b506001600160a01b0387168452600a86528484205460ff1661123a565b101590508138611232565b6001600160a01b039081169182156117ce571691821561177d5760008281528060205260408120549180831061172957604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815220818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b80511561182e5760200190565b634e487b7160e01b600052603260045260246000fd5b80516001101561182e5760400190565b91909493929460a0830190835260209060008285015260a0604085015282518091528160c0850193019160005b8281106118a25750505050906080919460018060a01b031660608201520152565b83516001600160a01b03168552938101939281019260010161188156fea26469706673582212205a5b348d9c02841baf92778da594c1c1ac9559b12c647d2d69eb849db44986b764736f6c63430008140033