ETH Price: $2,472.37 (+0.73%)
 

Overview

Max Total Supply

420,069,000 YEET

Holders

428 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,977.332332841034168153 YEET

Value
$0.00
0xa14fDE14737d77C07929A1446DE30E695D71cf37
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A project bringing together the best DeFi and NFT communities in crypto.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Yeet

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 9 : Yeet.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

import "./dependencies/SafeMath.sol";
import "./dependencies/Clones.sol";
import "./dependencies/Address.sol";

import "./dependencies/IUniswapV2Factory.sol";
import "./dependencies/IUniswapV2Router02.sol";
import "./dependencies/IERC20Extended.sol";
import "./dependencies/Auth.sol";
import "./dependencies/BaseToken.sol";

contract Yeet is IERC20Extended, Auth, BaseToken {
    using SafeMath for uint256;
    using Address for address;
    using Address for address payable;

    uint256 public constant VERSION = 2;

    event taxSwapped(uint256 amountIn, uint256 amountOut);

    address private constant DEAD = address(0xdead);
    address private constant ZERO = address(0);
    address public treasuryAddress;
    uint256 private gracePeriod = 5 minutes;
    uint256 private gracePeriodEnd;
    uint8 private constant _decimals = 18;

    string public constant _name = "Yeet";
    string public constant _symbol = "YEET";
    uint256 public constant _totalSupply = 420_069_000 * 10**18;

    IUniswapV2Router02 public router;
    IUniswapV2Factory public factory;
    address public pair;

    // [69,69,10000]
    uint256 public buyingFee = 69; // 0.69%
    uint256 public sellingFee = 69; // 0.69%
    uint256 public feeDenominator; // default: 10000

    bool public swapEnabled;
    uint256 public swapThreshold;

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

    mapping(address => bool) public isFeeExempt;

    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(
        address factory_,
        address router_,
        uint256[3] memory feeSettings_
    ) payable Auth(msg.sender) {
        gracePeriodEnd = block.timestamp + gracePeriod;

        _initializeFees(feeSettings_);

        swapEnabled = true;
        swapThreshold = _totalSupply / 100000; // 0.001% of total supply (4_200 YEET)
        factory = IUniswapV2Factory(factory_);
        router = IUniswapV2Router02(router_);
        pair = factory.createPair(address(this), router.WETH());

        isFeeExempt[msg.sender] = true;
        _allowances[address(this)][address(router)] = _totalSupply;
        _allowances[address(this)][address(pair)] = _totalSupply;
        treasuryAddress = msg.sender;

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

        emit TokenCreated(
            msg.sender,
            address(this),
            TokenType.antiBotStandard,
            VERSION
        );

    }

    function _initializeFees(uint256[3] memory feeSettings_) internal {
        _setFees(
            feeSettings_[0], // buyingFee
            feeSettings_[1], // sellingFee
            feeSettings_[2] // feeDenominator
        );
    }

    receive() external payable {}

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

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != _totalSupply) {
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender]
                .sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (shouldSwapToETH()) {
            swapToETH();
        }

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

        uint256 amountReceived = shouldTakeFee(sender)
            ? takeFee(sender, recipient, amount)
            : amount;

        if(shouldTakeFee(sender) && onGracePeriod()){
            // Holders Control during first hour
            if(recipient != pair && _balances[recipient].add(amount) >= (_totalSupply.mul(50).div(10000))){
                revert("You cannot hold more than 0.50% of the supply during the grace period");
            }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

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

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender] && (sellingFee > 0 || buyingFee > 0);
    }

    function getTradingFee(bool selling) public view returns (uint256) {
        if(selling){
            if(onGracePeriod()){
                return 9000; // 90% of selling fee during grace period
            }
            return sellingFee;
        }
        return buyingFee;
    }

    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTradingFee(receiver == pair)).div(
            feeDenominator
        );

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

        return amount.sub(feeAmount);
    }

    function shouldSwapToETH() internal view returns (bool) {
        return
            msg.sender != pair &&
            !inSwap &&
            swapEnabled &&
            !onGracePeriod() &&
            _balances[address(this)] >= swapThreshold;
    }

    function onGracePeriod() internal view returns (bool) {
        return block.timestamp < gracePeriodEnd;
    }

    function swapToETH() internal swapping {
        uint256 amountToSwap = swapThreshold;
        if(_balances[address(this)] > (100 * swapThreshold)){
            amountToSwap = swapThreshold * 50;
        }else {
            amountToSwap = _balances[address(this)];
        }

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

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

        uint256 amountETH = address(this).balance;
        payable(treasuryAddress).transfer(amountETH);
        emit taxSwapped(amountToSwap, amountETH);
    }

    function setFees(
        uint256 _buyFee,
        uint256 _sellFee,
        uint256 _feeDenominator
    ) public authorized {
        _setFees(
            _buyFee,
            _sellFee,
            _feeDenominator
        );
    }

    function _setFees(
        uint256 _buyFee,
        uint256 _sellFee,
        uint256 _feeDenominator
    ) internal {
        buyingFee = _buyFee;
        sellingFee = _sellFee;

        feeDenominator = _feeDenominator;
        require(_buyFee <= 300 && _sellFee <= 300, "Fee should be less than 3%");
        require(
            buyingFee <= feeDenominator / 4 && sellingFee <= feeDenominator / 4,
            "Total fee should not be greater than 1/4 of fee denominator"
        );
    }

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

    function setSwapBackSettings(bool _enabled, uint256 _amount)
        external
        authorized
    {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTreasuryAddress(address _treasuryAddress) external authorized {
        treasuryAddress = _treasuryAddress;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
}

File 2 of 9 : SafeMath.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

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

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 3 of 9 : Clones.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/Clones.sol)

pragma solidity ^0.8.0;

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
 * deploying minimal proxy contracts, also known as "clones".
 *
 * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
 * > a minimal bytecode implementation that delegates all calls to a known, fixed address.
 *
 * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
 * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
 * deterministic method.
 *
 * _Available since v3.4._
 */
library Clones {
    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     */
    function clone(address implementation) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create(0, ptr, 0x37)
        }
        require(instance != address(0), "ERC1167: create failed");
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple time will revert, since
     * the clones cannot be deployed twice at the same address.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
            instance := create2(0, ptr, 0x37, salt)
        }
        require(instance != address(0), "ERC1167: create2 failed");
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
            mstore(add(ptr, 0x14), shl(0x60, implementation))
            mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
            mstore(add(ptr, 0x38), shl(0x60, deployer))
            mstore(add(ptr, 0x4c), salt)
            mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
            predicted := keccak256(add(ptr, 0x37), 0x55)
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(address implementation, bytes32 salt)
        internal
        view
        returns (address predicted)
    {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

File 4 of 9 : Address.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 5 of 9 : IUniswapV2Factory.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(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 setFeeToSetter(address) external;
}

File 6 of 9 : IUniswapV2Router02.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

// SPDX-License-Identifier: MIT

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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

File 7 of 9 : IERC20Extended.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

interface IERC20Extended {
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address _owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

File 8 of 9 : Auth.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

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

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

File 9 of 9 : BaseToken.sol
/*

 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██    ██████  ███████ ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██      ██    ██
██      ██    ██ ██    ██ █████   ██████  ██    ██ ██    ██ █████      ██   ██ █████   ██    ██
██      ██    ██ ██    ██ ██  ██  ██   ██ ██    ██ ██    ██ ██  ██     ██   ██ ██       ██  ██
 ██████  ██████   ██████  ██   ██ ██████   ██████   ██████  ██   ██ ██ ██████  ███████   ████

Find any smart contract, and build your project faster: https://www.cookbook.dev
Twitter: https://twitter.com/cookbook_dev
Discord: https://discord.gg/WzsfPcfHrk

Find this contract on Cookbook: https://www.cookbook.dev/contracts/Buyback-Token-with-Fees?utm=code
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

enum TokenType {
    standard,
    antiBotStandard,
    liquidityGenerator,
    antiBotLiquidityGenerator,
    baby,
    antiBotBaby,
    buybackBaby,
    antiBotBuybackBaby
}

abstract contract BaseToken {
    event TokenCreated(
        address indexed owner,
        address indexed token,
        TokenType tokenType,
        uint256 version
    );
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"factory_","type":"address"},{"internalType":"address","name":"router_","type":"address"},{"internalType":"uint256[3]","name":"feeSettings_","type":"uint256[3]"}],"stateMutability":"payable","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":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"version","type":"uint256"}],"name":"TokenCreated","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":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"taxSwapped","type":"event"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTradingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet_","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261012c6003556045600855604560095560405162003abb38038062003abb8339818101604052810190620000399190620009c1565b33806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505060035442620000e2919062000a4c565b600481905550620000f9816200066060201b60201c565b6001600b60006101000a81548160ff021916908315150217905550620186a06b015b79121ea40c312520000062000131919062000ab6565b600c8190555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000266573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028c919062000aee565b6040518363ffffffff1660e01b8152600401620002ab92919062000b31565b6020604051808303816000875af1158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000aee565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506b015b79121ea40c3125200000600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506b015b79121ea40c3125200000600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506b015b79121ea40c3125200000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b015b79121ea40c3125200000604051620005e4919062000b6f565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f56358b41df5fa59f5639228f0930994cbdde383c8a8fd74e06c04e1deebe3562600160026040516200064f92919062000c0c565b60405180910390a350505062000d83565b620006c4816000600381106200067b576200067a62000c39565b5b60200201518260016003811062000697576200069662000c39565b5b602002015183600260038110620006b357620006b262000c39565b5b6020020151620006c760201b60201c565b50565b826008819055508160098190555080600a8190555061012c8311158015620006f1575061012c8211155b62000733576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072a9062000cc9565b60405180910390fd5b6004600a5462000744919062000ab6565b600854111580156200076857506004600a5462000762919062000ab6565b60095411155b620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a19062000d61565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007eb82620007be565b9050919050565b620007fd81620007de565b81146200080957600080fd5b50565b6000815190506200081d81620007f2565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620008738262000828565b810181811067ffffffffffffffff8211171562000895576200089462000839565b5b80604052505050565b6000620008aa620007af565b9050620008b8828262000868565b919050565b600067ffffffffffffffff821115620008db57620008da62000839565b5b602082029050919050565b600080fd5b6000819050919050565b6200090081620008eb565b81146200090c57600080fd5b50565b6000815190506200092081620008f5565b92915050565b60006200093d6200093784620008bd565b6200089e565b905080602084028301858111156200095a5762000959620008e6565b5b835b818110156200098757806200097288826200090f565b8452602084019350506020810190506200095c565b5050509392505050565b600082601f830112620009a957620009a862000823565b5b6003620009b884828562000926565b91505092915050565b600080600060a08486031215620009dd57620009dc620007b9565b5b6000620009ed868287016200080c565b935050602062000a00868287016200080c565b925050604062000a138682870162000991565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a5982620008eb565b915062000a6683620008eb565b925082820190508082111562000a815762000a8062000a1d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ac382620008eb565b915062000ad083620008eb565b92508262000ae35762000ae262000a87565b5b828204905092915050565b60006020828403121562000b075762000b06620007b9565b5b600062000b17848285016200080c565b91505092915050565b62000b2b81620007de565b82525050565b600060408201905062000b48600083018562000b20565b62000b57602083018462000b20565b9392505050565b62000b6981620008eb565b82525050565b600060208201905062000b86600083018462000b5e565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6008811062000bcf5762000bce62000b8c565b5b50565b600081905062000be28262000bbb565b919050565b600062000bf48262000bd2565b9050919050565b62000c068162000be7565b82525050565b600060408201905062000c23600083018562000bfb565b62000c32602083018462000b5e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4665652073686f756c64206265206c657373207468616e203325000000000000600082015250565b600062000cb1601a8362000c68565b915062000cbe8262000c79565b602082019050919050565b6000602082019050818103600083015262000ce48162000ca2565b9050919050565b7f546f74616c206665652073686f756c64206e6f7420626520677265617465722060008201527f7468616e20312f34206f66206665652064656e6f6d696e61746f720000000000602082015250565b600062000d49603b8362000c68565b915062000d568262000ceb565b604082019050919050565b6000602082019050818103600083015262000d7c8162000d3a565b9050919050565b612d288062000d936000396000f3fe6080604052600436106102085760003560e01c806395d89b4111610118578063d28d8852116100a0578063f0b37c041161006f578063f0b37c04146107b6578063f2fde38b146107df578063f887ea4014610808578063fe9fbb8014610833578063ffa1ad74146108705761020f565b8063d28d8852146106e8578063d98b196514610713578063dd62ed3e14610750578063df20fd491461078d5761020f565b8063b6a5d7de116100e7578063b6a5d7de14610615578063c45a01551461063e578063c5f956af14610669578063cbd8dc0a14610694578063cec10c11146106bf5761020f565b806395d89b4114610557578063a8aa1b3114610582578063a9059cbb146105ad578063b09f1266146105ea5761020f565b80632f54bf6e1161019b578063571ac8b01161016a578063571ac8b0146104605780636605bfda1461049d5780636ddd1713146104c657806370a08231146104f15780638ebfc7961461052e5761020f565b80632f54bf6e14610390578063313ce567146103cd5780633eaaf86b146103f85780633f4218e0146104235761020f565b806318160ddd116101d757806318160ddd146102d25780631891201e146102fd57806323b872dd146103285780632b112e49146103655761020f565b80630445b6671461021457806306fdde031461023f578063095ea7b31461026a578063180b0d7e146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961089b565b6040516102369190612193565b60405180910390f35b34801561024b57600080fd5b506102546108a1565b604051610261919061223e565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122ef565b6108de565b60405161029e919061234a565b60405180910390f35b3480156102b357600080fd5b506102bc6109d0565b6040516102c99190612193565b60405180910390f35b3480156102de57600080fd5b506102e76109d6565b6040516102f49190612193565b60405180910390f35b34801561030957600080fd5b506103126109ea565b60405161031f9190612193565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612365565b6109f0565b60405161035c919061234a565b60405180910390f35b34801561037157600080fd5b5061037a610bdc565b6040516103879190612193565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b291906123b8565b610c27565b6040516103c4919061234a565b60405180910390f35b3480156103d957600080fd5b506103e2610c80565b6040516103ef9190612401565b60405180910390f35b34801561040457600080fd5b5061040d610c89565b60405161041a9190612193565b60405180910390f35b34801561042f57600080fd5b5061044a600480360381019061044591906123b8565b610c99565b604051610457919061234a565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906123b8565b610cb9565b604051610494919061234a565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906123b8565b610cd8565b005b3480156104d257600080fd5b506104db610d64565b6040516104e8919061234a565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906123b8565b610d77565b6040516105259190612193565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612448565b610dc0565b005b34801561056357600080fd5b5061056c610e63565b604051610579919061223e565b60405180910390f35b34801561058e57600080fd5b50610597610ea0565b6040516105a49190612497565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906122ef565b610ec6565b6040516105e1919061234a565b60405180910390f35b3480156105f657600080fd5b506105ff610edb565b60405161060c919061223e565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906123b8565b610f14565b005b34801561064a57600080fd5b50610653610fb6565b6040516106609190612511565b60405180910390f35b34801561067557600080fd5b5061067e610fdc565b60405161068b9190612497565b60405180910390f35b3480156106a057600080fd5b506106a9611002565b6040516106b69190612193565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061252c565b611008565b005b3480156106f457600080fd5b506106fd611060565b60405161070a919061223e565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061257f565b611099565b6040516107479190612193565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906125ac565b6110cd565b6040516107849190612193565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af91906125ec565b611154565b005b3480156107c257600080fd5b506107dd60048036038101906107d891906123b8565b6111c1565b005b3480156107eb57600080fd5b506108066004803603810190610801919061266a565b611264565b005b34801561081457600080fd5b5061081d61137d565b60405161082a91906126b8565b60405180910390f35b34801561083f57600080fd5b5061085a600480360381019061085591906123b8565b6113a3565b604051610867919061234a565b60405180910390f35b34801561087c57600080fd5b506108856113f9565b6040516108929190612193565b60405180910390f35b600c5481565b60606040518060400160405280600481526020017f5965657400000000000000000000000000000000000000000000000000000000815250905090565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109be9190612193565b60405180910390a36001905092915050565b600a5481565b60006b015b79121ea40c3125200000905090565b60095481565b60006b015b79121ea40c3125200000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bc857610b47826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610bd3848484611453565b90509392505050565b6000610c22610beb6000610d77565b610c14610bf961dead610d77565b6b015b79121ea40c31252000006117c990919063ffffffff16565b6117c990919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6b015b79121ea40c312520000081565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610cd1826b015b79121ea40c31252000006108de565b9050919050565b610ce1336113a3565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061271f565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc9336113a3565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061271f565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600481526020017f5945455400000000000000000000000000000000000000000000000000000000815250905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ed3338484611453565b905092915050565b6040518060400160405280600481526020017f594545540000000000000000000000000000000000000000000000000000000081525081565b610f1d33610c27565b610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f539061278b565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b611011336113a3565b611050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110479061271f565b60405180910390fd5b61105b8383836117df565b505050565b6040518060400160405280600481526020017f596565740000000000000000000000000000000000000000000000000000000081525081565b600081156110c2576110a96118bb565b156110b85761232890506110c8565b60095490506110c8565b60085490505b919050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61115d336113a3565b61119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111939061271f565b60405180910390fd5b81600b60006101000a81548160ff02191690831515021790555080600c819055505050565b6111ca33610c27565b611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061278b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61126d33610c27565b6112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a39061278b565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161137291906127cc565b60405180910390a150565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600281565b6000838311158290611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d919061223e565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900460ff161561147c576114758484846118c7565b90506117c2565b611484611a9a565b1561149257611491611b82565b5b61151b826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061156985611f2b565b611573578261157f565b61157e858585611f9d565b5b905061158a85611f2b565b801561159a57506115996118bb565b5b156116c257600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611681575061162c61271061161e60326b015b79121ea40c312520000061213890919063ffffffff16565b61214e90919063ffffffff16565b61167e84600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b10155b156116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b89061287f565b60405180910390fd5b5b61171481600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b49190612193565b60405180910390a360019150505b9392505050565b600081836117d791906128ce565b905092915050565b826008819055508160098190555080600a8190555061012c8311158015611808575061012c8211155b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061294e565b60405180910390fd5b6004600a54611856919061299d565b6008541115801561187757506004600a54611871919061299d565b60095411155b6118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90612a40565b60405180910390fd5b505050565b60006004544210905090565b6000611952826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119e782600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a879190612193565b60405180910390a3600190509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611b075750601060009054906101000a900460ff16155b8015611b1f5750600b60009054906101000a900460ff165b8015611b305750611b2e6118bb565b155b8015611b7d5750600c54600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601060006101000a81548160ff0219169083151502179055506000600c549050600c546064611bb39190612a60565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c0f576032600c54611c089190612a60565b9050611c52565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000600267ffffffffffffffff811115611c6f57611c6e612aa2565b5b604051908082528060200260200182016040528015611c9d5781602001602082028036833780820191505090505b5090503081600081518110611cb557611cb4612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190612b15565b81600181518110611d9457611d93612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e32959493929190612c3b565b600060405180830381600087803b158015611e4c57600080fd5b505af1158015611e60573d6000803e3d6000fd5b505050506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ed1573d6000803e3d6000fd5b507f8f83591d0f3c2cf14dc05a3a4b6264589821f3afea40d24aa88c95c16d1f3d018382604051611f03929190612c95565b60405180910390a15050506000601060006101000a81548160ff021916908315150217905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f96575060006009541180611f9557506000600854115b5b9050919050565b60008061201f600a54612011612002600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611099565b8661213890919063ffffffff16565b61214e90919063ffffffff16565b905061207381600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121139190612193565b60405180910390a361212e81846117c990919063ffffffff16565b9150509392505050565b600081836121469190612a60565b905092915050565b6000818361215c919061299d565b905092915050565b600081836121729190612cbe565b905092915050565b6000819050919050565b61218d8161217a565b82525050565b60006020820190506121a86000830184612184565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121e85780820151818401526020810190506121cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612210826121ae565b61221a81856121b9565b935061222a8185602086016121ca565b612233816121f4565b840191505092915050565b600060208201905081810360008301526122588184612205565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061229082612265565b9050919050565b6122a081612285565b81146122ab57600080fd5b50565b6000813590506122bd81612297565b92915050565b6122cc8161217a565b81146122d757600080fd5b50565b6000813590506122e9816122c3565b92915050565b6000806040838503121561230657612305612260565b5b6000612314858286016122ae565b9250506020612325858286016122da565b9150509250929050565b60008115159050919050565b6123448161232f565b82525050565b600060208201905061235f600083018461233b565b92915050565b60008060006060848603121561237e5761237d612260565b5b600061238c868287016122ae565b935050602061239d868287016122ae565b92505060406123ae868287016122da565b9150509250925092565b6000602082840312156123ce576123cd612260565b5b60006123dc848285016122ae565b91505092915050565b600060ff82169050919050565b6123fb816123e5565b82525050565b600060208201905061241660008301846123f2565b92915050565b6124258161232f565b811461243057600080fd5b50565b6000813590506124428161241c565b92915050565b6000806040838503121561245f5761245e612260565b5b600061246d858286016122ae565b925050602061247e85828601612433565b9150509250929050565b61249181612285565b82525050565b60006020820190506124ac6000830184612488565b92915050565b6000819050919050565b60006124d76124d26124cd84612265565b6124b2565b612265565b9050919050565b60006124e9826124bc565b9050919050565b60006124fb826124de565b9050919050565b61250b816124f0565b82525050565b60006020820190506125266000830184612502565b92915050565b60008060006060848603121561254557612544612260565b5b6000612553868287016122da565b9350506020612564868287016122da565b9250506040612575868287016122da565b9150509250925092565b60006020828403121561259557612594612260565b5b60006125a384828501612433565b91505092915050565b600080604083850312156125c3576125c2612260565b5b60006125d1858286016122ae565b92505060206125e2858286016122ae565b9150509250929050565b6000806040838503121561260357612602612260565b5b600061261185828601612433565b9250506020612622858286016122da565b9150509250929050565b600061263782612265565b9050919050565b6126478161262c565b811461265257600080fd5b50565b6000813590506126648161263e565b92915050565b6000602082840312156126805761267f612260565b5b600061268e84828501612655565b91505092915050565b60006126a2826124de565b9050919050565b6126b281612697565b82525050565b60006020820190506126cd60008301846126a9565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000612709600b836121b9565b9150612714826126d3565b602082019050919050565b60006020820190508181036000830152612738816126fc565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006127756006836121b9565b91506127808261273f565b602082019050919050565b600060208201905081810360008301526127a481612768565b9050919050565b60006127b6826124de565b9050919050565b6127c6816127ab565b82525050565b60006020820190506127e160008301846127bd565b92915050565b7f596f752063616e6e6f7420686f6c64206d6f7265207468616e20302e3530252060008201527f6f662074686520737570706c7920647572696e6720746865206772616365207060208201527f6572696f64000000000000000000000000000000000000000000000000000000604082015250565b60006128696045836121b9565b9150612874826127e7565b606082019050919050565b600060208201905081810360008301526128988161285c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128d98261217a565b91506128e48361217a565b92508282039050818111156128fc576128fb61289f565b5b92915050565b7f4665652073686f756c64206265206c657373207468616e203325000000000000600082015250565b6000612938601a836121b9565b915061294382612902565b602082019050919050565b600060208201905081810360008301526129678161292b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129a88261217a565b91506129b38361217a565b9250826129c3576129c261296e565b5b828204905092915050565b7f546f74616c206665652073686f756c64206e6f7420626520677265617465722060008201527f7468616e20312f34206f66206665652064656e6f6d696e61746f720000000000602082015250565b6000612a2a603b836121b9565b9150612a35826129ce565b604082019050919050565b60006020820190508181036000830152612a5981612a1d565b9050919050565b6000612a6b8261217a565b9150612a768361217a565b9250828202612a848161217a565b91508282048414831517612a9b57612a9a61289f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612b0f81612297565b92915050565b600060208284031215612b2b57612b2a612260565b5b6000612b3984828501612b00565b91505092915050565b6000819050919050565b6000612b67612b62612b5d84612b42565b6124b2565b61217a565b9050919050565b612b7781612b4c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bb281612285565b82525050565b6000612bc48383612ba9565b60208301905092915050565b6000602082019050919050565b6000612be882612b7d565b612bf28185612b88565b9350612bfd83612b99565b8060005b83811015612c2e578151612c158882612bb8565b9750612c2083612bd0565b925050600181019050612c01565b5085935050505092915050565b600060a082019050612c506000830188612184565b612c5d6020830187612b6e565b8181036040830152612c6f8186612bdd565b9050612c7e6060830185612488565b612c8b6080830184612184565b9695505050505050565b6000604082019050612caa6000830185612184565b612cb76020830184612184565b9392505050565b6000612cc98261217a565b9150612cd48361217a565b9250828201905080821115612cec57612ceb61289f565b5b9291505056fea26469706673582212205f3e930fc638c41f3591e2d9eaabe31a7830e2c8534bf76a356e0d93feaaccdb64736f6c634300081100330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000045000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000003e8

Deployed Bytecode

0x6080604052600436106102085760003560e01c806395d89b4111610118578063d28d8852116100a0578063f0b37c041161006f578063f0b37c04146107b6578063f2fde38b146107df578063f887ea4014610808578063fe9fbb8014610833578063ffa1ad74146108705761020f565b8063d28d8852146106e8578063d98b196514610713578063dd62ed3e14610750578063df20fd491461078d5761020f565b8063b6a5d7de116100e7578063b6a5d7de14610615578063c45a01551461063e578063c5f956af14610669578063cbd8dc0a14610694578063cec10c11146106bf5761020f565b806395d89b4114610557578063a8aa1b3114610582578063a9059cbb146105ad578063b09f1266146105ea5761020f565b80632f54bf6e1161019b578063571ac8b01161016a578063571ac8b0146104605780636605bfda1461049d5780636ddd1713146104c657806370a08231146104f15780638ebfc7961461052e5761020f565b80632f54bf6e14610390578063313ce567146103cd5780633eaaf86b146103f85780633f4218e0146104235761020f565b806318160ddd116101d757806318160ddd146102d25780631891201e146102fd57806323b872dd146103285780632b112e49146103655761020f565b80630445b6671461021457806306fdde031461023f578063095ea7b31461026a578063180b0d7e146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961089b565b6040516102369190612193565b60405180910390f35b34801561024b57600080fd5b506102546108a1565b604051610261919061223e565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906122ef565b6108de565b60405161029e919061234a565b60405180910390f35b3480156102b357600080fd5b506102bc6109d0565b6040516102c99190612193565b60405180910390f35b3480156102de57600080fd5b506102e76109d6565b6040516102f49190612193565b60405180910390f35b34801561030957600080fd5b506103126109ea565b60405161031f9190612193565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190612365565b6109f0565b60405161035c919061234a565b60405180910390f35b34801561037157600080fd5b5061037a610bdc565b6040516103879190612193565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b291906123b8565b610c27565b6040516103c4919061234a565b60405180910390f35b3480156103d957600080fd5b506103e2610c80565b6040516103ef9190612401565b60405180910390f35b34801561040457600080fd5b5061040d610c89565b60405161041a9190612193565b60405180910390f35b34801561042f57600080fd5b5061044a600480360381019061044591906123b8565b610c99565b604051610457919061234a565b60405180910390f35b34801561046c57600080fd5b50610487600480360381019061048291906123b8565b610cb9565b604051610494919061234a565b60405180910390f35b3480156104a957600080fd5b506104c460048036038101906104bf91906123b8565b610cd8565b005b3480156104d257600080fd5b506104db610d64565b6040516104e8919061234a565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906123b8565b610d77565b6040516105259190612193565b60405180910390f35b34801561053a57600080fd5b5061055560048036038101906105509190612448565b610dc0565b005b34801561056357600080fd5b5061056c610e63565b604051610579919061223e565b60405180910390f35b34801561058e57600080fd5b50610597610ea0565b6040516105a49190612497565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf91906122ef565b610ec6565b6040516105e1919061234a565b60405180910390f35b3480156105f657600080fd5b506105ff610edb565b60405161060c919061223e565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906123b8565b610f14565b005b34801561064a57600080fd5b50610653610fb6565b6040516106609190612511565b60405180910390f35b34801561067557600080fd5b5061067e610fdc565b60405161068b9190612497565b60405180910390f35b3480156106a057600080fd5b506106a9611002565b6040516106b69190612193565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e1919061252c565b611008565b005b3480156106f457600080fd5b506106fd611060565b60405161070a919061223e565b60405180910390f35b34801561071f57600080fd5b5061073a6004803603810190610735919061257f565b611099565b6040516107479190612193565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906125ac565b6110cd565b6040516107849190612193565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af91906125ec565b611154565b005b3480156107c257600080fd5b506107dd60048036038101906107d891906123b8565b6111c1565b005b3480156107eb57600080fd5b506108066004803603810190610801919061266a565b611264565b005b34801561081457600080fd5b5061081d61137d565b60405161082a91906126b8565b60405180910390f35b34801561083f57600080fd5b5061085a600480360381019061085591906123b8565b6113a3565b604051610867919061234a565b60405180910390f35b34801561087c57600080fd5b506108856113f9565b6040516108929190612193565b60405180910390f35b600c5481565b60606040518060400160405280600481526020017f5965657400000000000000000000000000000000000000000000000000000000815250905090565b600081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109be9190612193565b60405180910390a36001905092915050565b600a5481565b60006b015b79121ea40c3125200000905090565b60095481565b60006b015b79121ea40c3125200000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bc857610b47826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610bd3848484611453565b90509392505050565b6000610c22610beb6000610d77565b610c14610bf961dead610d77565b6b015b79121ea40c31252000006117c990919063ffffffff16565b6117c990919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6b015b79121ea40c312520000081565b600f6020528060005260406000206000915054906101000a900460ff1681565b6000610cd1826b015b79121ea40c31252000006108de565b9050919050565b610ce1336113a3565b610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061271f565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60009054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dc9336113a3565b610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9061271f565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600481526020017f5945455400000000000000000000000000000000000000000000000000000000815250905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ed3338484611453565b905092915050565b6040518060400160405280600481526020017f594545540000000000000000000000000000000000000000000000000000000081525081565b610f1d33610c27565b610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f539061278b565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b611011336113a3565b611050576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110479061271f565b60405180910390fd5b61105b8383836117df565b505050565b6040518060400160405280600481526020017f596565740000000000000000000000000000000000000000000000000000000081525081565b600081156110c2576110a96118bb565b156110b85761232890506110c8565b60095490506110c8565b60085490505b919050565b6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61115d336113a3565b61119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111939061271f565b60405180910390fd5b81600b60006101000a81548160ff02191690831515021790555080600c819055505050565b6111ca33610c27565b611209576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112009061278b565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61126d33610c27565b6112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a39061278b565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161137291906127cc565b60405180910390a150565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600281565b6000838311158290611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d919061223e565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900460ff161561147c576114758484846118c7565b90506117c2565b611484611a9a565b1561149257611491611b82565b5b61151b826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061156985611f2b565b611573578261157f565b61157e858585611f9d565b5b905061158a85611f2b565b801561159a57506115996118bb565b5b156116c257600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611681575061162c61271061161e60326b015b79121ea40c312520000061213890919063ffffffff16565b61214e90919063ffffffff16565b61167e84600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b10155b156116c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b89061287f565b60405180910390fd5b5b61171481600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516117b49190612193565b60405180910390a360019150505b9392505050565b600081836117d791906128ce565b905092915050565b826008819055508160098190555080600a8190555061012c8311158015611808575061012c8211155b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e9061294e565b60405180910390fd5b6004600a54611856919061299d565b6008541115801561187757506004600a54611871919061299d565b60095411155b6118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90612a40565b60405180910390fd5b505050565b60006004544210905090565b6000611952826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9092919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119e782600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a879190612193565b60405180910390a3600190509392505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611b075750601060009054906101000a900460ff16155b8015611b1f5750600b60009054906101000a900460ff165b8015611b305750611b2e6118bb565b155b8015611b7d5750600c54600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601060006101000a81548160ff0219169083151502179055506000600c549050600c546064611bb39190612a60565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611c0f576032600c54611c089190612a60565b9050611c52565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b6000600267ffffffffffffffff811115611c6f57611c6e612aa2565b5b604051908082528060200260200182016040528015611c9d5781602001602082028036833780820191505090505b5090503081600081518110611cb557611cb4612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d809190612b15565b81600181518110611d9457611d93612ad1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611e32959493929190612c3b565b600060405180830381600087803b158015611e4c57600080fd5b505af1158015611e60573d6000803e3d6000fd5b505050506000479050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ed1573d6000803e3d6000fd5b507f8f83591d0f3c2cf14dc05a3a4b6264589821f3afea40d24aa88c95c16d1f3d018382604051611f03929190612c95565b60405180910390a15050506000601060006101000a81548160ff021916908315150217905550565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f96575060006009541180611f9557506000600854115b5b9050919050565b60008061201f600a54612011612002600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611099565b8661213890919063ffffffff16565b61214e90919063ffffffff16565b905061207381600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461216490919063ffffffff16565b600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121139190612193565b60405180910390a361212e81846117c990919063ffffffff16565b9150509392505050565b600081836121469190612a60565b905092915050565b6000818361215c919061299d565b905092915050565b600081836121729190612cbe565b905092915050565b6000819050919050565b61218d8161217a565b82525050565b60006020820190506121a86000830184612184565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156121e85780820151818401526020810190506121cd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612210826121ae565b61221a81856121b9565b935061222a8185602086016121ca565b612233816121f4565b840191505092915050565b600060208201905081810360008301526122588184612205565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061229082612265565b9050919050565b6122a081612285565b81146122ab57600080fd5b50565b6000813590506122bd81612297565b92915050565b6122cc8161217a565b81146122d757600080fd5b50565b6000813590506122e9816122c3565b92915050565b6000806040838503121561230657612305612260565b5b6000612314858286016122ae565b9250506020612325858286016122da565b9150509250929050565b60008115159050919050565b6123448161232f565b82525050565b600060208201905061235f600083018461233b565b92915050565b60008060006060848603121561237e5761237d612260565b5b600061238c868287016122ae565b935050602061239d868287016122ae565b92505060406123ae868287016122da565b9150509250925092565b6000602082840312156123ce576123cd612260565b5b60006123dc848285016122ae565b91505092915050565b600060ff82169050919050565b6123fb816123e5565b82525050565b600060208201905061241660008301846123f2565b92915050565b6124258161232f565b811461243057600080fd5b50565b6000813590506124428161241c565b92915050565b6000806040838503121561245f5761245e612260565b5b600061246d858286016122ae565b925050602061247e85828601612433565b9150509250929050565b61249181612285565b82525050565b60006020820190506124ac6000830184612488565b92915050565b6000819050919050565b60006124d76124d26124cd84612265565b6124b2565b612265565b9050919050565b60006124e9826124bc565b9050919050565b60006124fb826124de565b9050919050565b61250b816124f0565b82525050565b60006020820190506125266000830184612502565b92915050565b60008060006060848603121561254557612544612260565b5b6000612553868287016122da565b9350506020612564868287016122da565b9250506040612575868287016122da565b9150509250925092565b60006020828403121561259557612594612260565b5b60006125a384828501612433565b91505092915050565b600080604083850312156125c3576125c2612260565b5b60006125d1858286016122ae565b92505060206125e2858286016122ae565b9150509250929050565b6000806040838503121561260357612602612260565b5b600061261185828601612433565b9250506020612622858286016122da565b9150509250929050565b600061263782612265565b9050919050565b6126478161262c565b811461265257600080fd5b50565b6000813590506126648161263e565b92915050565b6000602082840312156126805761267f612260565b5b600061268e84828501612655565b91505092915050565b60006126a2826124de565b9050919050565b6126b281612697565b82525050565b60006020820190506126cd60008301846126a9565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000612709600b836121b9565b9150612714826126d3565b602082019050919050565b60006020820190508181036000830152612738816126fc565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006127756006836121b9565b91506127808261273f565b602082019050919050565b600060208201905081810360008301526127a481612768565b9050919050565b60006127b6826124de565b9050919050565b6127c6816127ab565b82525050565b60006020820190506127e160008301846127bd565b92915050565b7f596f752063616e6e6f7420686f6c64206d6f7265207468616e20302e3530252060008201527f6f662074686520737570706c7920647572696e6720746865206772616365207060208201527f6572696f64000000000000000000000000000000000000000000000000000000604082015250565b60006128696045836121b9565b9150612874826127e7565b606082019050919050565b600060208201905081810360008301526128988161285c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128d98261217a565b91506128e48361217a565b92508282039050818111156128fc576128fb61289f565b5b92915050565b7f4665652073686f756c64206265206c657373207468616e203325000000000000600082015250565b6000612938601a836121b9565b915061294382612902565b602082019050919050565b600060208201905081810360008301526129678161292b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006129a88261217a565b91506129b38361217a565b9250826129c3576129c261296e565b5b828204905092915050565b7f546f74616c206665652073686f756c64206e6f7420626520677265617465722060008201527f7468616e20312f34206f66206665652064656e6f6d696e61746f720000000000602082015250565b6000612a2a603b836121b9565b9150612a35826129ce565b604082019050919050565b60006020820190508181036000830152612a5981612a1d565b9050919050565b6000612a6b8261217a565b9150612a768361217a565b9250828202612a848161217a565b91508282048414831517612a9b57612a9a61289f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612b0f81612297565b92915050565b600060208284031215612b2b57612b2a612260565b5b6000612b3984828501612b00565b91505092915050565b6000819050919050565b6000612b67612b62612b5d84612b42565b6124b2565b61217a565b9050919050565b612b7781612b4c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612bb281612285565b82525050565b6000612bc48383612ba9565b60208301905092915050565b6000602082019050919050565b6000612be882612b7d565b612bf28185612b88565b9350612bfd83612b99565b8060005b83811015612c2e578151612c158882612bb8565b9750612c2083612bd0565b925050600181019050612c01565b5085935050505092915050565b600060a082019050612c506000830188612184565b612c5d6020830187612b6e565b8181036040830152612c6f8186612bdd565b9050612c7e6060830185612488565b612c8b6080830184612184565b9695505050505050565b6000604082019050612caa6000830185612184565b612cb76020830184612184565b9392505050565b6000612cc98261217a565b9150612cd48361217a565b9250828201905080821115612cec57612ceb61289f565b5b9291505056fea26469706673582212205f3e930fc638c41f3591e2d9eaabe31a7830e2c8534bf76a356e0d93feaaccdb64736f6c63430008110033

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

0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000000000000000000000000000000000000000000045000000000000000000000000000000000000000000000000000000000000004500000000000000000000000000000000000000000000000000000000000003e8

-----Decoded View---------------
Arg [0] : factory_ (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : feeSettings_ (uint256[3]): 69,69,1000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003e8


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.