Contract Address Details

0xda3CE8DE46a2ccf5842F897a69091dE45d8cEfDA

Token
GUDCoin (GUD)
Creator
0x3079d4–9e6dc6 at 0xf2b710–1e1fde
Balance
0 Doge
Tokens
Fetching tokens...
Transactions
26 Transactions
Transfers
1 Transfers
Gas Used
749,061
Last Balance Update
29346100
Contract name:
GUDCoin




Optimization enabled
true
Compiler version
v0.8.16+commit.07a7930e




Optimization runs
200
EVM Version
default




Verified at
2022-08-19T02:00:12.260820Z

Contract source code

// File: GUD.sol

//SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.16;

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

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

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

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

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

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

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

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

library Address {
    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");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

interface IRouter {
    function factory() external pure returns (address);

    function WWDOGE() external pure returns (address);

    function addLiquidityWDOGE(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountWDOGEMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountWDOGE,
            uint256 liquidity
        );

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

    contract GUDCoin is ERC20, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _liquidityMutex = false;
    bool public providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 public tokenLiquidityThreshold = 15_000_000 * 10**18;
    uint256 public maxBuyLimit = 100_000_000 * 10**18;
    uint256 public maxSellLimit = 100_000_000 * 10**18;
    uint256 public maxWalletLimit = 100_000_000 * 10**18;

    uint256 public genesis_block;
    uint256 private deadline = 4;
    uint256 private launchtax = 10;

    address public marketingWallet = 0x150cf24bA9B2C100C900b5628742fCA2A71E85EC;
    address public devWallet = 0x3079D40a297ED2771f09212Fb4601A6D4D9E6dc6;
    address public opsWallet = 0x92baA7d2411BC7a2b1052A8A3F7ea092f8d9D627;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 ops;
        uint256 liquidity;
        uint256 dev;        
    }

    Taxes public taxes = Taxes(4, 1, 4, 1);
    Taxes public sellTaxes = Taxes(4, 1, 4, 1);

    uint256 public TotalBuyFee = taxes.marketing + taxes.ops + taxes.liquidity + taxes.dev;
    uint256 public TotalSellFee = sellTaxes.marketing + sellTaxes.ops + sellTaxes.liquidity + sellTaxes.dev;

    mapping(address => bool) public exemptFee;
    mapping(address => bool) public isBlacklisted;

    //Anti Dump
    mapping(address => uint256) private _lastSell;
    bool public coolDownEnabled = false;
    uint256 public coolDownTime = 60 seconds;

    modifier mutexLock() {
        if (!_liquidityMutex) {
            _liquidityMutex = true;
            _;
            _liquidityMutex = false;
        }
    }

    constructor() ERC20("GUDCoin", "GUD") {
        _tokengeneration(msg.sender, 1e14 * 10**decimals());
        exemptFee[msg.sender] = true;

        IRouter _router = IRouter(0xa4EE06Ce40cb7e8c04E127c1F7D3dFB7F7039C81);
        // Create a pair for this new token
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WWDOGE());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[opsWallet] = true;
        exemptFee[devWallet] = true;
        exemptFee[deadWallet] = true;
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            !isBlacklisted[sender] && !isBlacklisted[recipient],
            "You can't transfer tokens"
        );

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient] && !_liquidityMutex) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_liquidityMutex
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (recipient != pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
            if (coolDownEnabled) {
                uint256 timePassed = block.timestamp - _lastSell[sender];
                require(timePassed >= coolDownTime, "Cooldown enabled");
                _lastSell[sender] = block.timestamp;
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        Taxes memory currentTaxes;

        bool useLaunchFee = !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < genesis_block + deadline;

        //set fee to zero if fees in contract are handled or exempted
        if (_liquidityMutex || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair && !useLaunchFee) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing +           
                sellTaxes.ops +
                sellTaxes.dev ;
            feesum = feeswap;
            currentTaxes = sellTaxes;
        } else if (!useLaunchFee) {
            feeswap =
                taxes.liquidity +
                taxes.marketing +
                taxes.ops +
                taxes.dev ;
            feesum = feeswap;
            currentTaxes = taxes;
        } else if (useLaunchFee) {
            feeswap = launchtax;
            feesum = launchtax;
        }

        fee = (amount * feesum) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) handle_fees(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - fee);
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function handle_fees(uint256 feeswap, Taxes memory swapTaxes) private mutexLock {

        if(feeswap == 0){
            return;
        }	

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForWDOGE(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 dogeToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (dogeToAddLiquidityWith > 0) {
                // Add liquidity
                addLiquidity(tokensToAddLiquidityWith, dogeToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

            uint256 opsAmt = unitBalance * 2 * swapTaxes.ops;
            if (opsAmt > 0) {
                payable(opsWallet).sendValue(opsAmt);
            }

            uint256 devAmt = unitBalance * 2 * swapTaxes.dev;
            if (devAmt > 0) {
                payable(devWallet).sendValue(devAmt);
            }

        }
    }

    function swapTokensForWDOGE(uint256 tokenAmount) private {
        // generate the  pair path of token -> WDOGE
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WWDOGE();

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

        // make the swap
        router.swapExactTokensForWDOGESupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

        // add the liquidity
        router.addLiquidityWDOGE{ value: wdogeAmount }(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

        function UpdateBuyTaxes(
        uint256 _marketing,
        uint256 _ops,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        TotalBuyFee = _marketing + _ops + _liquidity + _dev;
        require((TotalBuyFee) <= 15, "Must keep fees at 15% or less");
        taxes = Taxes(_marketing,_ops,_liquidity, _dev);
    }

    function SetSellTaxes(
        uint256 _marketing,
        uint256 _ops,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        TotalSellFee = _marketing + _ops + _liquidity + _dev;
        require((TotalSellFee) <= 30, "Must keep fees at 30% or less");
        sellTaxes = Taxes(_marketing,_ops,_liquidity, _dev);
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
    }

   function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        providingLiquidity = true;
        genesis_block = block.number;
    }

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        require (_deadline < 5,"Deadline should be less than 5");
        deadline = _deadline;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        opsWallet = newWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
    }

    function airdropTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner{
        require(accounts.length == amounts.length, "Arrays must have same size");
        for(uint256 i; i< accounts.length; i++){
            super._transfer(msg.sender, accounts[i], amounts[i]);
        }
    }

    function updateCooldown(bool state, uint256 time) external onlyOwner {
        coolDownTime = time * 1 seconds;
        coolDownEnabled = state;
        require(time <= 60, "cooldown timer cannot exceed 1 minutes");
    }

    function updateIsBlacklisted(address account, bool state) external onlyOwner {
        isBlacklisted[account] = state;
    }

    function bulkIsBlacklisted(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            isBlacklisted[accounts[i]] = state;
        }
    }

    function updateExemptFee(address _address, bool state) external onlyOwner {
        exemptFee[_address] = state;
    }

    function bulkExemptFee(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            exemptFee[accounts[i]] = state;
        }
    }

    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell, uint256 maxWallet) external onlyOwner {
        require(maxBuy >= 10_000_000, "Cannot set max buy amount lower than 0.1%");
        require(maxSell >= 10_000_000, "Cannot set max sell amount lower than 0.1%");
        require(maxWallet >= 10_000_000, "Cannot set max wallet amount lower than 0.1%");
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

    function rescueDOGE(uint256 weiAmount) external onlyOwner {
        payable(owner()).transfer(weiAmount);
    }

    function rescueDOGETOKENS(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(owner(), amount);
    }

    // fallbacks
    receive() external payable {}
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetSellTaxes","inputs":[{"type":"uint256","name":"_marketing","internalType":"uint256"},{"type":"uint256","name":"_ops","internalType":"uint256"},{"type":"uint256","name":"_liquidity","internalType":"uint256"},{"type":"uint256","name":"_dev","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"TotalBuyFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"TotalSellFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"UpdateBuyTaxes","inputs":[{"type":"uint256","name":"_marketing","internalType":"uint256"},{"type":"uint256","name":"_ops","internalType":"uint256"},{"type":"uint256","name":"_liquidity","internalType":"uint256"},{"type":"uint256","name":"_dev","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"airdropTokens","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bulkExemptFee","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bulkIsBlacklisted","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"coolDownEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"coolDownTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deadWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devWallet","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableTrading","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"exemptFee","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"genesis_block","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBlacklisted","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxBuyLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxSellLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxWalletLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"opsWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"providingLiquidity","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueDOGE","inputs":[{"type":"uint256","name":"weiAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueDOGETOKENS","inputs":[{"type":"address","name":"tokenAdd","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"marketing","internalType":"uint256"},{"type":"uint256","name":"ops","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"dev","internalType":"uint256"}],"name":"sellTaxes","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"marketing","internalType":"uint256"},{"type":"uint256","name":"ops","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"dev","internalType":"uint256"}],"name":"taxes","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenLiquidityThreshold","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingEnabled","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateCooldown","inputs":[{"type":"bool","name":"state","internalType":"bool"},{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateDevWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateExemptFee","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateIsBlacklisted","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateLiquidityProvide","inputs":[{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateLiquidityTreshhold","inputs":[{"type":"uint256","name":"new_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMarketingWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateMaxTxLimit","inputs":[{"type":"uint256","name":"maxBuy","internalType":"uint256"},{"type":"uint256","name":"maxSell","internalType":"uint256"},{"type":"uint256","name":"maxWallet","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateOpsWallet","inputs":[{"type":"address","name":"newWallet","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateRouterAndPair","inputs":[{"type":"address","name":"newRouter","internalType":"address"},{"type":"address","name":"newPair","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updatedeadline","inputs":[{"type":"uint256","name":"_deadline","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
            

Contract Creation Code

0x6007805462ffffff60a01b191690556a0c685fa11e01ec6f0000006008556a52b7d2dcc80cd2e40000006009819055600a818155600b919091556004600d819055600e91909155600f80546001600160a01b031990811673150cf24ba9b2c100c900b5628742fca2a71e85ec17909155601080548216733079d40a297ed2771f09212fb4601a6d4d9e6dc6179055601180549091167392baa7d2411bc7a2b1052a8a3f7ea092f8d9d6271790556080819052600160a081905260c082905260e0819052601282905560138190556014829055601581905561018060405261010082905261012081905261014082905261016081905260168290556017819055601882905560198190559062000115828262000587565b62000121919062000587565b6200012d919062000587565b601a5560195460185460175460165462000148919062000587565b62000154919062000587565b62000160919062000587565b601b55601f805460ff19169055603c6020553480156200017f57600080fd5b506040518060400160405280600781526020016623aaa221b7b4b760c91b8152506040518060400160405280600381526020016211d55160ea1b8152508160039081620001cd919062000647565b506004620001dc828262000647565b505050620001f9620001f36200045960201b60201c565b6200045d565b62000224336200020c6012600a62000810565b6200021e90655af3107a400062000828565b620004af565b336000908152601c60209081526040808320805460ff19166001179055805163c45a015560e01b8152905173a4ee06ce40cb7e8c04e127c1f7d3dfb7f7039c819392849263c45a015592600480830193928290030181865afa1580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b591906200084a565b6001600160a01b031663c9c6539630846001600160a01b0316634ed154606040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032991906200084a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039d91906200084a565b600680546001600160a01b03199081166001600160a01b03958616179091556007805490911691841691909117905550306000908152601c6020526040808220805460ff199081166001908117909255600f548516845282842080548216831790556011548516845282842080548216831790556010549094168352908220805484168217905561dead9091527fa48bd8e7b1565515cde2859b6cc48308ba05b5325bcf90fb096b9ac0b8087dfc805490921617905562000875565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620005185760405162461bcd60e51b815260206004820152602560248201527f45524332303a2067656e65726174696f6e20746f20746865207a65726f206164604482015264647265737360d81b606482015260840160405180910390fd5b60028190556001600160a01b038216600081815260208181526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156200059d576200059d62000571565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005ce57607f821691505b602082108103620005ef57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056c57600081815260208120601f850160051c810160208610156200061e5750805b601f850160051c820191505b818110156200063f578281556001016200062a565b505050505050565b81516001600160401b03811115620006635762000663620005a3565b6200067b81620006748454620005b9565b84620005f5565b602080601f831160018114620006b357600084156200069a5750858301515b600019600386901b1c1916600185901b1785556200063f565b600085815260208120601f198616915b82811015620006e457888601518255948401946001909101908401620006c3565b5085821015620007035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b808511156200075457816000190482111562000738576200073862000571565b808516156200074657918102915b93841c939080029062000718565b509250929050565b6000826200076d575060016200059d565b816200077c575060006200059d565b8160018114620007955760028114620007a057620007c0565b60019150506200059d565b60ff841115620007b457620007b462000571565b50506001821b6200059d565b5060208310610133831016604e8410600b8410161715620007e5575081810a6200059d565b620007f1838362000713565b806000190482111562000808576200080862000571565b029392505050565b60006200082160ff8416836200075c565b9392505050565b600081600019048311821515161562000845576200084562000571565b500290565b6000602082840312156200085d57600080fd5b81516001600160a01b03811681146200082157600080fd5b612ee880620008856000396000f3fe6080604052600436106103395760003560e01c806375f0a874116101ab578063d2ce0db2116100f7578063f2fde38b11610095578063f887ea401161006f578063f887ea40146109a9578063f8bba9e8146109c9578063fbe6324e146109e9578063fe575a8714610a0a57600080fd5b8063f2fde38b14610946578063f66895a314610966578063f770c3791461098957600080fd5b8063e1b450ad116100d1578063e1b450ad146108cc578063e517f2b9146108ec578063edaa11681461090c578063ee36e3591461092c57600080fd5b8063d2ce0db21461085a578063dc89f88c14610870578063dd62ed3e1461088657600080fd5b80639321b67611610164578063a8aa1b311161013e578063a8aa1b31146107ca578063a9059cbb146107ea578063aacebbe31461080a578063c5d32bb21461082a57600080fd5b80639321b6761461077557806395d89b4114610795578063a457c2d7146107aa57600080fd5b806375f0a874146106d65780637b46eee5146106f657806385141a771461070c5780638a8c523c146107225780638da5cb5b146107375780638ea5220f1461075557600080fd5b8063355496ca1161028557806366a88d9611610223578063706f6937116101fd578063706f69371461062857806370a0823114610648578063715018a61461067e578063728f8eea1461069357600080fd5b806366a88d96146105c457806368db925a146105da5780636aa5b37f1461061257600080fd5b806342b6fa111161025f57806342b6fa111461054d5780634ada218b1461056d5780635b24ea5e1461058e578063652e2f04146105ae57600080fd5b8063355496ca146104ed578063395093511461050d57806340b28c2f1461052d57600080fd5b80631675d802116102f25780631c3909e6116102cc5780631c3909e61461047b57806323b872dd1461049b578063274a533c146104bb578063313ce567146104d157600080fd5b80631675d8021461042257806318160ddd146104465780631816467f1461045b57600080fd5b806306fdde0314610345578063095ea7b3146103705780630e375a5c146103a0578063105cafb6146103c25780631340538f146103e257806313f97a8e1461040257600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a3a565b60405161036791906127cf565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612832565b610acc565b6040519015158152602001610367565b3480156103ac57600080fd5b506103c06103bb36600461294b565b610ae3565b005b3480156103ce57600080fd5b506103c06103dd36600461299d565b610b82565b3480156103ee57600080fd5b506103c06103fd3660046129cf565b610c55565b34801561040e57600080fd5b506103c061041d36600461294b565b610c9d565b34801561042e57600080fd5b5061043860085481565b604051908152602001610367565b34801561045257600080fd5b50600254610438565b34801561046757600080fd5b506103c06104763660046129f3565b610d2e565b34801561048757600080fd5b506103c06104963660046129f3565b610d7a565b3480156104a757600080fd5b506103906104b6366004612a10565b610dc6565b3480156104c757600080fd5b50610438600c5481565b3480156104dd57600080fd5b5060405160128152602001610367565b3480156104f957600080fd5b506103c0610508366004612a51565b610e77565b34801561051957600080fd5b50610390610528366004612832565b610ecc565b34801561053957600080fd5b506103c0610548366004612a7f565b610f03565b34801561055957600080fd5b506103c0610568366004612aad565b610f5b565b34801561057957600080fd5b5060075461039090600160b01b900460ff1681565b34801561059a57600080fd5b506103c06105a9366004612a51565b610fa1565b3480156105ba57600080fd5b50610438600a5481565b3480156105d057600080fd5b50610438600b5481565b3480156105e657600080fd5b506011546105fa906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561061e57600080fd5b5061043860095481565b34801561063457600080fd5b506103c0610643366004612ac6565b610ff6565b34801561065457600080fd5b506104386106633660046129f3565b6001600160a01b031660009081526020819052604090205490565b34801561068a57600080fd5b506103c06110cc565b34801561069f57600080fd5b506012546013546014546015546106b69392919084565b604080519485526020850193909352918301526060820152608001610367565b3480156106e257600080fd5b50600f546105fa906001600160a01b031681565b34801561070257600080fd5b50610438601a5481565b34801561071857600080fd5b506105fa61dead81565b34801561072e57600080fd5b506103c0611102565b34801561074357600080fd5b506005546001600160a01b03166105fa565b34801561076157600080fd5b506010546105fa906001600160a01b031681565b34801561078157600080fd5b506103c061079036600461299d565b6111a1565b3480156107a157600080fd5b5061035a611274565b3480156107b657600080fd5b506103906107c5366004612832565b611283565b3480156107d657600080fd5b506007546105fa906001600160a01b031681565b3480156107f657600080fd5b50610390610805366004612832565b61131e565b34801561081657600080fd5b506103c06108253660046129f3565b61132b565b34801561083657600080fd5b506103906108453660046129f3565b601c6020526000908152604090205460ff1681565b34801561086657600080fd5b5061043860205481565b34801561087c57600080fd5b50610438601b5481565b34801561089257600080fd5b506104386108a1366004612a7f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108d857600080fd5b506103c06108e7366004612b81565b611377565b3480156108f857600080fd5b506103c0610907366004612bad565b611525565b34801561091857600080fd5b506103c0610927366004612aad565b6115cf565b34801561093857600080fd5b50601f546103909060ff1681565b34801561095257600080fd5b506103c06109613660046129f3565b6116b6565b34801561097257600080fd5b506016546017546018546019546106b69392919084565b34801561099557600080fd5b506103c06109a4366004612832565b611751565b3480156109b557600080fd5b506006546105fa906001600160a01b031681565b3480156109d557600080fd5b506103c06109e4366004612aad565b61180d565b3480156109f557600080fd5b5060075461039090600160a81b900460ff1681565b348015610a1657600080fd5b50610390610a253660046129f3565b601d6020526000908152604090205460ff1681565b606060038054610a4990612bcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7590612bcb565b8015610ac25780601f10610a9757610100808354040283529160200191610ac2565b820191906000526020600020905b815481529060010190602001808311610aa557829003601f168201915b5050505050905090565b6000610ad9338484611871565b5060015b92915050565b6005546001600160a01b03163314610b165760405162461bcd60e51b8152600401610b0d90612c05565b60405180910390fd5b60005b8251811015610b7d5781601c6000858481518110610b3957610b39612c3a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b7581612c66565b915050610b19565b505050565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610b0d90612c05565b8082610bb88587612c7f565b610bc29190612c7f565b610bcc9190612c7f565b601b819055601e1015610c215760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b0d565b6040805160808101825285815260208101859052908101839052606001819052601693909355601791909155601855601955565b6005546001600160a01b03163314610c7f5760405162461bcd60e51b8152600401610b0d90612c05565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6005546001600160a01b03163314610cc75760405162461bcd60e51b8152600401610b0d90612c05565b60005b8251811015610b7d5781601d6000858481518110610cea57610cea612c3a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d2681612c66565b915050610cca565b6005546001600160a01b03163314610d585760405162461bcd60e51b8152600401610b0d90612c05565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610da45760405162461bcd60e51b8152600401610b0d90612c05565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610dd3848484611995565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e585760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b0d565b610e6c8533610e678685612c92565b611871565b506001949350505050565b6005546001600160a01b03163314610ea15760405162461bcd60e51b8152600401610b0d90612c05565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad9918590610e67908690612c7f565b6005546001600160a01b03163314610f2d5760405162461bcd60e51b8152600401610b0d90612c05565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6005546001600160a01b03163314610f855760405162461bcd60e51b8152600401610b0d90612c05565b610f916012600a612d89565b610f9b9082612d98565b60085550565b6005546001600160a01b03163314610fcb5760405162461bcd60e51b8152600401610b0d90612c05565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401610b0d90612c05565b80518251146110715760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610b0d565b60005b8251811015610b7d576110ba3384838151811061109357611093612c3a565b60200260200101518484815181106110ad576110ad612c3a565b60200260200101516120a8565b806110c481612c66565b915050611074565b6005546001600160a01b031633146110f65760405162461bcd60e51b8152600401610b0d90612c05565b6111006000612280565b565b6005546001600160a01b0316331461112c5760405162461bcd60e51b8152600401610b0d90612c05565b600754600160b01b900460ff16156111865760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610b0d565b6007805461ffff60a81b191661010160a81b17905543600c55565b6005546001600160a01b031633146111cb5760405162461bcd60e51b8152600401610b0d90612c05565b80826111d78587612c7f565b6111e19190612c7f565b6111eb9190612c7f565b601a819055600f10156112405760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b0d565b6040805160808101825285815260208101859052908101839052606001819052601293909355601391909155601455601555565b606060048054610a4990612bcb565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b0d565b6113143385610e678685612c92565b5060019392505050565b6000610ad9338484611995565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610b0d90612c05565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113a15760405162461bcd60e51b8152600401610b0d90612c05565b629896808310156114065760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b0d565b6298968082101561146c5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b0d565b629896808110156114d45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e312560a01b6064820152608401610b0d565b6114e06012600a612d89565b6114ea9084612d98565b6009556114f96012600a612d89565b6115039083612d98565b600a55601261151390600a612d89565b61151d9082612d98565b600b55505050565b6005546001600160a01b0316331461154f5760405162461bcd60e51b8152600401610b0d90612c05565b61155a816001612d98565b602055601f805460ff1916831515179055603c8111156115cb5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610b0d565b5050565b6005546001600160a01b031633146115f95760405162461bcd60e51b8152600401610b0d90612c05565b600754600160b01b900460ff16156116615760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610b0d565b600581106116b15760405162461bcd60e51b815260206004820152601e60248201527f446561646c696e652073686f756c64206265206c657373207468616e203500006044820152606401610b0d565b600d55565b6005546001600160a01b031633146116e05760405162461bcd60e51b8152600401610b0d90612c05565b6001600160a01b0381166117455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b0d565b61174e81612280565b50565b6005546001600160a01b0316331461177b5760405162461bcd60e51b8152600401610b0d90612c05565b816001600160a01b031663a9059cbb61179c6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190612db7565b6005546001600160a01b031633146118375760405162461bcd60e51b8152600401610b0d90612c05565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156115cb573d6000803e3d6000fd5b6001600160a01b0383166118d35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b0d565b6001600160a01b0382166119345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b0d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081116119f75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b0d565b6001600160a01b0383166000908152601d602052604090205460ff16158015611a3957506001600160a01b0382166000908152601d602052604090205460ff16155b611a855760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e73000000000000006044820152606401610b0d565b6001600160a01b0383166000908152601c602052604090205460ff16158015611ac757506001600160a01b0382166000908152601c602052604090205460ff16155b15611b1b57600754600160b01b900460ff16611b1b5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610b0d565b6007546001600160a01b038481169116148015611b5157506001600160a01b0382166000908152601c602052604090205460ff16155b8015611b675750600754600160a01b900460ff16155b15611c3957600954811115611bbe5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b0d565b600b5481611be1846001600160a01b031660009081526020819052604090205490565b611beb9190612c7f565b1115611c395760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b0d565b6007546001600160a01b03848116911614801590611c7057506001600160a01b0382166000908152601c602052604090205460ff16155b8015611c9557506001600160a01b0383166000908152601c602052604090205460ff16155b8015611cab5750600754600160a01b900460ff16155b15611e2457600a54811115611d025760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b0d565b6007546001600160a01b03838116911614611d9257600b5481611d3a846001600160a01b031660009081526020819052604090205490565b611d449190612c7f565b1115611d925760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b0d565b601f5460ff1615611e24576001600160a01b0383166000908152601e6020526040812054611dc09042612c92565b9050602054811015611e075760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b0d565b506001600160a01b0383166000908152601e602052604090204290555b6000806000611e546040518060800160405280600081526020016000815260200160008152602001600081525090565b6001600160a01b0387166000908152601c602052604081205460ff16158015611e9657506001600160a01b0387166000908152601c602052604090205460ff16155b8015611eb05750600d54600c54611ead9190612c7f565b43105b600754909150600160a01b900460ff1680611ee357506001600160a01b0388166000908152601c602052604090205460ff165b80611f0657506001600160a01b0387166000908152601c602052604090205460ff165b15611f145760009250612008565b6007546001600160a01b038881169116148015611f2f575080155b15611f9457601954601754601654601854611f4a9190612c7f565b611f549190612c7f565b611f5e9190612c7f565b60408051608081018252601654815260175460208201526018549181019190915260195460608201529095508594509150612008565b80611ff957601554601354601254601454611faf9190612c7f565b611fb99190612c7f565b611fc39190612c7f565b60408051608081018252601254815260135460208201526014549181019190915260155460608201529095508594509150612008565b801561200857600e5494508493505b60646120148588612d98565b61201e9190612dd4565b600754909350600160a81b900460ff16801561204857506007546001600160a01b03898116911614155b156120575761205785836122d2565b61206b8888612066868a612c92565b6120a8565b821561209e57841561209e57600060646120858789612d98565b61208f9190612dd4565b905061209c8930836120a8565b505b5050505050505050565b6001600160a01b03831661210c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b0d565b6001600160a01b03821661216e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b0d565b6001600160a01b038316600090815260208190526040902054818110156121e65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b0d565b6121f08282612c92565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290612226908490612c7f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161227291815260200190565b60405180910390a350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600754600160a01b900460ff166115cb576007805460ff60a01b1916600160a01b179055811561247657306000908152602081905260409020546008548110612474576001600854111561232557506008545b6000612332846002612d98565b90506000818460400151846123479190612d98565b6123519190612dd4565b9050600061235f8285612c92565b90504761236b82612487565b60006123778247612c92565b9050600087604001518661238b9190612c92565b6123959083612dd4565b905060008860400151826123a99190612d98565b905080156123bb576123bb86826125e1565b88516000906123cb846002612d98565b6123d59190612d98565b905080156123f357600f546123f3906001600160a01b0316826126b6565b60208a0151600090612406856002612d98565b6124109190612d98565b9050801561242e5760115461242e906001600160a01b0316826126b6565b60608b0151600090612441866002612d98565b61244b9190612d98565b9050801561246957601054612469906001600160a01b0316826126b6565b505050505050505050505b505b6007805460ff60a01b191690555050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124bc576124bc612c3a565b6001600160a01b03928316602091820292909201810191909152600654604080516302768aa360e51b815290519190931692634ed154609260048083019391928290030181865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125399190612df6565b8160018151811061254c5761254c612c3a565b6001600160a01b0392831660209182029290920101526006546125729130911684611871565b60065460405163b43d9bbb60e01b81526001600160a01b039091169063b43d9bbb906125ab908590600090869030904290600401612e13565b600060405180830381600087803b1580156125c557600080fd5b505af11580156125d9573d6000803e3d6000fd5b505050505050565b6006546125f99030906001600160a01b031684611871565b6006546001600160a01b031663e6529ab48230856000806126226005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561268a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126af9190612e84565b5050505050565b804710156127065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b0d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612753576040519150601f19603f3d011682016040523d82523d6000602084013e612758565b606091505b5050905080610b7d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b0d565b600060208083528351808285015260005b818110156127fc578581018301518582016040015282016127e0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461174e57600080fd5b6000806040838503121561284557600080fd5b82356128508161281d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561289d5761289d61285e565b604052919050565b600067ffffffffffffffff8211156128bf576128bf61285e565b5060051b60200190565b600082601f8301126128da57600080fd5b813560206128ef6128ea836128a5565b612874565b82815260059290921b8401810191818101908684111561290e57600080fd5b8286015b848110156129325780356129258161281d565b8352918301918301612912565b509695505050505050565b801515811461174e57600080fd5b6000806040838503121561295e57600080fd5b823567ffffffffffffffff81111561297557600080fd5b612981858286016128c9565b92505060208301356129928161293d565b809150509250929050565b600080600080608085870312156129b357600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156129e157600080fd5b81356129ec8161293d565b9392505050565b600060208284031215612a0557600080fd5b81356129ec8161281d565b600080600060608486031215612a2557600080fd5b8335612a308161281d565b92506020840135612a408161281d565b929592945050506040919091013590565b60008060408385031215612a6457600080fd5b8235612a6f8161281d565b915060208301356129928161293d565b60008060408385031215612a9257600080fd5b8235612a9d8161281d565b915060208301356129928161281d565b600060208284031215612abf57600080fd5b5035919050565b60008060408385031215612ad957600080fd5b823567ffffffffffffffff80821115612af157600080fd5b612afd868387016128c9565b9350602091508185013581811115612b1457600080fd5b85019050601f81018613612b2757600080fd5b8035612b356128ea826128a5565b81815260059190911b82018301908381019088831115612b5457600080fd5b928401925b82841015612b7257833582529284019290840190612b59565b80955050505050509250929050565b600080600060608486031215612b9657600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612bc057600080fd5b82356128508161293d565b600181811c90821680612bdf57607f821691505b602082108103612bff57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612c7857612c78612c50565b5060010190565b80820180821115610add57610add612c50565b81810381811115610add57610add612c50565b600181815b80851115612ce0578160001904821115612cc657612cc6612c50565b80851615612cd357918102915b93841c9390800290612caa565b509250929050565b600082612cf757506001610add565b81612d0457506000610add565b8160018114612d1a5760028114612d2457612d40565b6001915050610add565b60ff841115612d3557612d35612c50565b50506001821b610add565b5060208310610133831016604e8410600b8410161715612d63575081810a610add565b612d6d8383612ca5565b8060001904821115612d8157612d81612c50565b029392505050565b60006129ec60ff841683612ce8565b6000816000190483118215151615612db257612db2612c50565b500290565b600060208284031215612dc957600080fd5b81516129ec8161293d565b600082612df157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612e0857600080fd5b81516129ec8161281d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e635784516001600160a01b031683529383019391830191600101612e3e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e9957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220793792ac1a5f498605ba47514dbbdecceb7fe3ceee5b0d90cb40dc0714b10a7e64736f6c63430008100033

Deployed ByteCode

0x6080604052600436106103395760003560e01c806375f0a874116101ab578063d2ce0db2116100f7578063f2fde38b11610095578063f887ea401161006f578063f887ea40146109a9578063f8bba9e8146109c9578063fbe6324e146109e9578063fe575a8714610a0a57600080fd5b8063f2fde38b14610946578063f66895a314610966578063f770c3791461098957600080fd5b8063e1b450ad116100d1578063e1b450ad146108cc578063e517f2b9146108ec578063edaa11681461090c578063ee36e3591461092c57600080fd5b8063d2ce0db21461085a578063dc89f88c14610870578063dd62ed3e1461088657600080fd5b80639321b67611610164578063a8aa1b311161013e578063a8aa1b31146107ca578063a9059cbb146107ea578063aacebbe31461080a578063c5d32bb21461082a57600080fd5b80639321b6761461077557806395d89b4114610795578063a457c2d7146107aa57600080fd5b806375f0a874146106d65780637b46eee5146106f657806385141a771461070c5780638a8c523c146107225780638da5cb5b146107375780638ea5220f1461075557600080fd5b8063355496ca1161028557806366a88d9611610223578063706f6937116101fd578063706f69371461062857806370a0823114610648578063715018a61461067e578063728f8eea1461069357600080fd5b806366a88d96146105c457806368db925a146105da5780636aa5b37f1461061257600080fd5b806342b6fa111161025f57806342b6fa111461054d5780634ada218b1461056d5780635b24ea5e1461058e578063652e2f04146105ae57600080fd5b8063355496ca146104ed578063395093511461050d57806340b28c2f1461052d57600080fd5b80631675d802116102f25780631c3909e6116102cc5780631c3909e61461047b57806323b872dd1461049b578063274a533c146104bb578063313ce567146104d157600080fd5b80631675d8021461042257806318160ddd146104465780631816467f1461045b57600080fd5b806306fdde0314610345578063095ea7b3146103705780630e375a5c146103a0578063105cafb6146103c25780631340538f146103e257806313f97a8e1461040257600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a3a565b60405161036791906127cf565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612832565b610acc565b6040519015158152602001610367565b3480156103ac57600080fd5b506103c06103bb36600461294b565b610ae3565b005b3480156103ce57600080fd5b506103c06103dd36600461299d565b610b82565b3480156103ee57600080fd5b506103c06103fd3660046129cf565b610c55565b34801561040e57600080fd5b506103c061041d36600461294b565b610c9d565b34801561042e57600080fd5b5061043860085481565b604051908152602001610367565b34801561045257600080fd5b50600254610438565b34801561046757600080fd5b506103c06104763660046129f3565b610d2e565b34801561048757600080fd5b506103c06104963660046129f3565b610d7a565b3480156104a757600080fd5b506103906104b6366004612a10565b610dc6565b3480156104c757600080fd5b50610438600c5481565b3480156104dd57600080fd5b5060405160128152602001610367565b3480156104f957600080fd5b506103c0610508366004612a51565b610e77565b34801561051957600080fd5b50610390610528366004612832565b610ecc565b34801561053957600080fd5b506103c0610548366004612a7f565b610f03565b34801561055957600080fd5b506103c0610568366004612aad565b610f5b565b34801561057957600080fd5b5060075461039090600160b01b900460ff1681565b34801561059a57600080fd5b506103c06105a9366004612a51565b610fa1565b3480156105ba57600080fd5b50610438600a5481565b3480156105d057600080fd5b50610438600b5481565b3480156105e657600080fd5b506011546105fa906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561061e57600080fd5b5061043860095481565b34801561063457600080fd5b506103c0610643366004612ac6565b610ff6565b34801561065457600080fd5b506104386106633660046129f3565b6001600160a01b031660009081526020819052604090205490565b34801561068a57600080fd5b506103c06110cc565b34801561069f57600080fd5b506012546013546014546015546106b69392919084565b604080519485526020850193909352918301526060820152608001610367565b3480156106e257600080fd5b50600f546105fa906001600160a01b031681565b34801561070257600080fd5b50610438601a5481565b34801561071857600080fd5b506105fa61dead81565b34801561072e57600080fd5b506103c0611102565b34801561074357600080fd5b506005546001600160a01b03166105fa565b34801561076157600080fd5b506010546105fa906001600160a01b031681565b34801561078157600080fd5b506103c061079036600461299d565b6111a1565b3480156107a157600080fd5b5061035a611274565b3480156107b657600080fd5b506103906107c5366004612832565b611283565b3480156107d657600080fd5b506007546105fa906001600160a01b031681565b3480156107f657600080fd5b50610390610805366004612832565b61131e565b34801561081657600080fd5b506103c06108253660046129f3565b61132b565b34801561083657600080fd5b506103906108453660046129f3565b601c6020526000908152604090205460ff1681565b34801561086657600080fd5b5061043860205481565b34801561087c57600080fd5b50610438601b5481565b34801561089257600080fd5b506104386108a1366004612a7f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108d857600080fd5b506103c06108e7366004612b81565b611377565b3480156108f857600080fd5b506103c0610907366004612bad565b611525565b34801561091857600080fd5b506103c0610927366004612aad565b6115cf565b34801561093857600080fd5b50601f546103909060ff1681565b34801561095257600080fd5b506103c06109613660046129f3565b6116b6565b34801561097257600080fd5b506016546017546018546019546106b69392919084565b34801561099557600080fd5b506103c06109a4366004612832565b611751565b3480156109b557600080fd5b506006546105fa906001600160a01b031681565b3480156109d557600080fd5b506103c06109e4366004612aad565b61180d565b3480156109f557600080fd5b5060075461039090600160a81b900460ff1681565b348015610a1657600080fd5b50610390610a253660046129f3565b601d6020526000908152604090205460ff1681565b606060038054610a4990612bcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7590612bcb565b8015610ac25780601f10610a9757610100808354040283529160200191610ac2565b820191906000526020600020905b815481529060010190602001808311610aa557829003601f168201915b5050505050905090565b6000610ad9338484611871565b5060015b92915050565b6005546001600160a01b03163314610b165760405162461bcd60e51b8152600401610b0d90612c05565b60405180910390fd5b60005b8251811015610b7d5781601c6000858481518110610b3957610b39612c3a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b7581612c66565b915050610b19565b505050565b6005546001600160a01b03163314610bac5760405162461bcd60e51b8152600401610b0d90612c05565b8082610bb88587612c7f565b610bc29190612c7f565b610bcc9190612c7f565b601b819055601e1015610c215760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610b0d565b6040805160808101825285815260208101859052908101839052606001819052601693909355601791909155601855601955565b6005546001600160a01b03163314610c7f5760405162461bcd60e51b8152600401610b0d90612c05565b60078054911515600160a81b0260ff60a81b19909216919091179055565b6005546001600160a01b03163314610cc75760405162461bcd60e51b8152600401610b0d90612c05565b60005b8251811015610b7d5781601d6000858481518110610cea57610cea612c3a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d2681612c66565b915050610cca565b6005546001600160a01b03163314610d585760405162461bcd60e51b8152600401610b0d90612c05565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610da45760405162461bcd60e51b8152600401610b0d90612c05565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610dd3848484611995565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610e585760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b0d565b610e6c8533610e678685612c92565b611871565b506001949350505050565b6005546001600160a01b03163314610ea15760405162461bcd60e51b8152600401610b0d90612c05565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ad9918590610e67908690612c7f565b6005546001600160a01b03163314610f2d5760405162461bcd60e51b8152600401610b0d90612c05565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6005546001600160a01b03163314610f855760405162461bcd60e51b8152600401610b0d90612c05565b610f916012600a612d89565b610f9b9082612d98565b60085550565b6005546001600160a01b03163314610fcb5760405162461bcd60e51b8152600401610b0d90612c05565b6001600160a01b03919091166000908152601d60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146110205760405162461bcd60e51b8152600401610b0d90612c05565b80518251146110715760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610b0d565b60005b8251811015610b7d576110ba3384838151811061109357611093612c3a565b60200260200101518484815181106110ad576110ad612c3a565b60200260200101516120a8565b806110c481612c66565b915050611074565b6005546001600160a01b031633146110f65760405162461bcd60e51b8152600401610b0d90612c05565b6111006000612280565b565b6005546001600160a01b0316331461112c5760405162461bcd60e51b8152600401610b0d90612c05565b600754600160b01b900460ff16156111865760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610b0d565b6007805461ffff60a81b191661010160a81b17905543600c55565b6005546001600160a01b031633146111cb5760405162461bcd60e51b8152600401610b0d90612c05565b80826111d78587612c7f565b6111e19190612c7f565b6111eb9190612c7f565b601a819055600f10156112405760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610b0d565b6040805160808101825285815260208101859052908101839052606001819052601293909355601391909155601455601555565b606060048054610a4990612bcb565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113055760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b0d565b6113143385610e678685612c92565b5060019392505050565b6000610ad9338484611995565b6005546001600160a01b031633146113555760405162461bcd60e51b8152600401610b0d90612c05565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113a15760405162461bcd60e51b8152600401610b0d90612c05565b629896808310156114065760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b0d565b6298968082101561146c5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610b0d565b629896808110156114d45760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e312560a01b6064820152608401610b0d565b6114e06012600a612d89565b6114ea9084612d98565b6009556114f96012600a612d89565b6115039083612d98565b600a55601261151390600a612d89565b61151d9082612d98565b600b55505050565b6005546001600160a01b0316331461154f5760405162461bcd60e51b8152600401610b0d90612c05565b61155a816001612d98565b602055601f805460ff1916831515179055603c8111156115cb5760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610b0d565b5050565b6005546001600160a01b031633146115f95760405162461bcd60e51b8152600401610b0d90612c05565b600754600160b01b900460ff16156116615760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610b0d565b600581106116b15760405162461bcd60e51b815260206004820152601e60248201527f446561646c696e652073686f756c64206265206c657373207468616e203500006044820152606401610b0d565b600d55565b6005546001600160a01b031633146116e05760405162461bcd60e51b8152600401610b0d90612c05565b6001600160a01b0381166117455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b0d565b61174e81612280565b50565b6005546001600160a01b0316331461177b5760405162461bcd60e51b8152600401610b0d90612c05565b816001600160a01b031663a9059cbb61179c6005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156117e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7d9190612db7565b6005546001600160a01b031633146118375760405162461bcd60e51b8152600401610b0d90612c05565b6005546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156115cb573d6000803e3d6000fd5b6001600160a01b0383166118d35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b0d565b6001600160a01b0382166119345760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b0d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600081116119f75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b0d565b6001600160a01b0383166000908152601d602052604090205460ff16158015611a3957506001600160a01b0382166000908152601d602052604090205460ff16155b611a855760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e73000000000000006044820152606401610b0d565b6001600160a01b0383166000908152601c602052604090205460ff16158015611ac757506001600160a01b0382166000908152601c602052604090205460ff16155b15611b1b57600754600160b01b900460ff16611b1b5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b6044820152606401610b0d565b6007546001600160a01b038481169116148015611b5157506001600160a01b0382166000908152601c602052604090205460ff16155b8015611b675750600754600160a01b900460ff16155b15611c3957600954811115611bbe5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61784275794c696d69740000006044820152606401610b0d565b600b5481611be1846001600160a01b031660009081526020819052604090205490565b611beb9190612c7f565b1115611c395760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b0d565b6007546001600160a01b03848116911614801590611c7057506001600160a01b0382166000908152601c602052604090205460ff16155b8015611c9557506001600160a01b0383166000908152601c602052604090205460ff16155b8015611cab5750600754600160a01b900460ff16155b15611e2457600a54811115611d025760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d617853656c6c4c696d697400006044820152606401610b0d565b6007546001600160a01b03838116911614611d9257600b5481611d3a846001600160a01b031660009081526020819052604090205490565b611d449190612c7f565b1115611d925760405162461bcd60e51b815260206004820181905260248201527f596f752061726520657863656564696e67206d617857616c6c65744c696d69746044820152606401610b0d565b601f5460ff1615611e24576001600160a01b0383166000908152601e6020526040812054611dc09042612c92565b9050602054811015611e075760405162461bcd60e51b815260206004820152601060248201526f10dbdbdb191bdddb88195b98589b195960821b6044820152606401610b0d565b506001600160a01b0383166000908152601e602052604090204290555b6000806000611e546040518060800160405280600081526020016000815260200160008152602001600081525090565b6001600160a01b0387166000908152601c602052604081205460ff16158015611e9657506001600160a01b0387166000908152601c602052604090205460ff16155b8015611eb05750600d54600c54611ead9190612c7f565b43105b600754909150600160a01b900460ff1680611ee357506001600160a01b0388166000908152601c602052604090205460ff165b80611f0657506001600160a01b0387166000908152601c602052604090205460ff165b15611f145760009250612008565b6007546001600160a01b038881169116148015611f2f575080155b15611f9457601954601754601654601854611f4a9190612c7f565b611f549190612c7f565b611f5e9190612c7f565b60408051608081018252601654815260175460208201526018549181019190915260195460608201529095508594509150612008565b80611ff957601554601354601254601454611faf9190612c7f565b611fb99190612c7f565b611fc39190612c7f565b60408051608081018252601254815260135460208201526014549181019190915260155460608201529095508594509150612008565b801561200857600e5494508493505b60646120148588612d98565b61201e9190612dd4565b600754909350600160a81b900460ff16801561204857506007546001600160a01b03898116911614155b156120575761205785836122d2565b61206b8888612066868a612c92565b6120a8565b821561209e57841561209e57600060646120858789612d98565b61208f9190612dd4565b905061209c8930836120a8565b505b5050505050505050565b6001600160a01b03831661210c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b0d565b6001600160a01b03821661216e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b0d565b6001600160a01b038316600090815260208190526040902054818110156121e65760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b0d565b6121f08282612c92565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290612226908490612c7f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161227291815260200190565b60405180910390a350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600754600160a01b900460ff166115cb576007805460ff60a01b1916600160a01b179055811561247657306000908152602081905260409020546008548110612474576001600854111561232557506008545b6000612332846002612d98565b90506000818460400151846123479190612d98565b6123519190612dd4565b9050600061235f8285612c92565b90504761236b82612487565b60006123778247612c92565b9050600087604001518661238b9190612c92565b6123959083612dd4565b905060008860400151826123a99190612d98565b905080156123bb576123bb86826125e1565b88516000906123cb846002612d98565b6123d59190612d98565b905080156123f357600f546123f3906001600160a01b0316826126b6565b60208a0151600090612406856002612d98565b6124109190612d98565b9050801561242e5760115461242e906001600160a01b0316826126b6565b60608b0151600090612441866002612d98565b61244b9190612d98565b9050801561246957601054612469906001600160a01b0316826126b6565b505050505050505050505b505b6007805460ff60a01b191690555050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124bc576124bc612c3a565b6001600160a01b03928316602091820292909201810191909152600654604080516302768aa360e51b815290519190931692634ed154609260048083019391928290030181865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125399190612df6565b8160018151811061254c5761254c612c3a565b6001600160a01b0392831660209182029290920101526006546125729130911684611871565b60065460405163b43d9bbb60e01b81526001600160a01b039091169063b43d9bbb906125ab908590600090869030904290600401612e13565b600060405180830381600087803b1580156125c557600080fd5b505af11580156125d9573d6000803e3d6000fd5b505050505050565b6006546125f99030906001600160a01b031684611871565b6006546001600160a01b031663e6529ab48230856000806126226005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561268a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126af9190612e84565b5050505050565b804710156127065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b0d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612753576040519150601f19603f3d011682016040523d82523d6000602084013e612758565b606091505b5050905080610b7d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b0d565b600060208083528351808285015260005b818110156127fc578581018301518582016040015282016127e0565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461174e57600080fd5b6000806040838503121561284557600080fd5b82356128508161281d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561289d5761289d61285e565b604052919050565b600067ffffffffffffffff8211156128bf576128bf61285e565b5060051b60200190565b600082601f8301126128da57600080fd5b813560206128ef6128ea836128a5565b612874565b82815260059290921b8401810191818101908684111561290e57600080fd5b8286015b848110156129325780356129258161281d565b8352918301918301612912565b509695505050505050565b801515811461174e57600080fd5b6000806040838503121561295e57600080fd5b823567ffffffffffffffff81111561297557600080fd5b612981858286016128c9565b92505060208301356129928161293d565b809150509250929050565b600080600080608085870312156129b357600080fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156129e157600080fd5b81356129ec8161293d565b9392505050565b600060208284031215612a0557600080fd5b81356129ec8161281d565b600080600060608486031215612a2557600080fd5b8335612a308161281d565b92506020840135612a408161281d565b929592945050506040919091013590565b60008060408385031215612a6457600080fd5b8235612a6f8161281d565b915060208301356129928161293d565b60008060408385031215612a9257600080fd5b8235612a9d8161281d565b915060208301356129928161281d565b600060208284031215612abf57600080fd5b5035919050565b60008060408385031215612ad957600080fd5b823567ffffffffffffffff80821115612af157600080fd5b612afd868387016128c9565b9350602091508185013581811115612b1457600080fd5b85019050601f81018613612b2757600080fd5b8035612b356128ea826128a5565b81815260059190911b82018301908381019088831115612b5457600080fd5b928401925b82841015612b7257833582529284019290840190612b59565b80955050505050509250929050565b600080600060608486031215612b9657600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612bc057600080fd5b82356128508161293d565b600181811c90821680612bdf57607f821691505b602082108103612bff57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612c7857612c78612c50565b5060010190565b80820180821115610add57610add612c50565b81810381811115610add57610add612c50565b600181815b80851115612ce0578160001904821115612cc657612cc6612c50565b80851615612cd357918102915b93841c9390800290612caa565b509250929050565b600082612cf757506001610add565b81612d0457506000610add565b8160018114612d1a5760028114612d2457612d40565b6001915050610add565b60ff841115612d3557612d35612c50565b50506001821b610add565b5060208310610133831016604e8410600b8410161715612d63575081810a610add565b612d6d8383612ca5565b8060001904821115612d8157612d81612c50565b029392505050565b60006129ec60ff841683612ce8565b6000816000190483118215151615612db257612db2612c50565b500290565b600060208284031215612dc957600080fd5b81516129ec8161293d565b600082612df157634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612e0857600080fd5b81516129ec8161281d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e635784516001600160a01b031683529383019391830191600101612e3e565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612e9957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220793792ac1a5f498605ba47514dbbdecceb7fe3ceee5b0d90cb40dc0714b10a7e64736f6c63430008100033