ETH Price: $3,168.14 (-8.72%)
Gas: 3 Gwei

Token

APEX (APEX)
 

Overview

Max Total Supply

105,000,000 APEX

Holders

112

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
51,373.221184887495825625 APEX

Value
$0.00
0x4778d6295F01178AfF94f37114a9239a839C7e57
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
APEX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-01
*/

//                          ███████╗ █████╗ ███████╗██╗   ██╗    ██████╗ ██╗   ██╗
//                          ██╔════╝██╔══██╗██╔════╝██║   ██║    ██╔══██╗╚██╗ ██╔╝
//                          ███████╗███████║█████╗  ██║   ██║    ██████╔╝ ╚████╔╝
//                          ╚════██║██╔══██║██╔══╝  ██║   ██║    ██╔══██╗  ╚██╔╝
//                          ███████║██║  ██║██║     ╚██████╔╝    ██████╔╝   ██║
//                          ╚══════╝╚═╝  ╚═╝╚═╝      ╚═════╝     ╚═════╝    ╚═╝
//
//  ██████╗ ██╗      ██████╗  ██████╗██╗  ██╗███████╗ █████╗ ███████╗██╗   ██╗    ██████╗ ██████╗ ███╗   ███╗
//  ██╔══██╗██║     ██╔═══██╗██╔════╝██║ ██╔╝██╔════╝██╔══██╗██╔════╝██║   ██║   ██╔════╝██╔═══██╗████╗ ████║
//  ██████╔╝██║     ██║   ██║██║     █████╔╝ ███████╗███████║█████╗  ██║   ██║   ██║     ██║   ██║██╔████╔██║
//  ██╔══██╗██║     ██║   ██║██║     ██╔═██╗ ╚════██║██╔══██║██╔══╝  ██║   ██║   ██║     ██║   ██║██║╚██╔╝██║
//  ██████╔╝███████╗╚██████╔╝╚██████╗██║  ██╗███████║██║  ██║██║     ╚██████╔╝██╗╚██████╗╚██████╔╝██║ ╚═╝ ██║
//  ╚═════╝ ╚══════╝ ╚═════╝  ╚═════╝╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝      ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝     ╚═╝
//

/**
 * Disclaimer:
 *  BlockSAFU, as a developer assigned by the project owner for writing Solidity smart contracts.
 *  While BlockSAFU strives to create secure smart contracts for project owners and investors,
 *  it holds no responsibility for any investment losses or risks resulting from actions taken by the project owner.
 **/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

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;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        // _owner = 0x20988390875D06b706285dE690EbB1E624030703;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: transfer amount exceeds allowance"
            );
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

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

        return true;
    }

    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"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

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

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract APEX is ERC20, Ownable {
    uint256 public marketingFeeOnBuy = 2;
    uint256 public marketingFeeOnSell = 5;
    uint256 public developmentFeeOnBuy = 2;
    uint256 public developmentFeeOnSell = 5;
    uint256 public totalFeesOnBuy = marketingFeeOnBuy + developmentFeeOnBuy;
    uint256 public totalFeesOnSell = marketingFeeOnSell + developmentFeeOnSell;
    uint256 private totalFees;

    address public marketingWallet = 0x4aa75DA7BC14Ae95287e7E56a6Fd472E04797091;
    address public developmentWallet =
        0x954F1b5e4C8Eb37E82d85c71612d9196fa1d834C;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    mapping(address => bool) private _isExcludedFromFees;

    bool public isTradingEnabled;
    uint256 public startTradingAt;
    bool public swapEnabled;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event FeesUpdated(
        uint256 marketingFeeOnBuy,
        uint256 marketingFeeOnSell,
        uint256 liquidityFeeOnBuy,
        uint256 liquidityFeeOnSell
    );
    event MarketingWalletChanged(address indexed newWallet);
    event DevelopmentWalletChanged(address indexed newWallet);
    event SwapAndSendFee(uint256 tokensSwapped);
    event SwapTokensAtAmountChanged(uint256 newAmount);

    constructor() ERC20("APEX", "APEX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            getRouterAddress()
        );
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[developmentWallet] = true;
        _isExcludedFromFees[getRouterAddress()] = true;

        _mint(owner(), 105_000_000 * (10 ** 18));
        swapTokensAtAmount = (1 * totalSupply()) / 100;
    }

    receive() external payable {}

    function startTrading() external onlyOwner {
        require(!isTradingEnabled, "Trading already enabled");
        swapEnabled = true;
        isTradingEnabled = true;
        startTradingAt = block.timestamp;
    }

    function getRouterAddress() public view returns (address) {
        uint256 id;
        assembly {
            id := chainid()
        }
        if (id == 97) return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        else if (id == 56) return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        else if (id == 1) return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        else return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function excludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setFees(
        uint256 _marketingFeeOnBuy,
        uint256 _marketingFeeOnSell,
        uint256 _developmentFeeOnBuy,
        uint256 _developmentFeeOnSell
    ) external onlyOwner {
        marketingFeeOnBuy = _marketingFeeOnBuy;
        marketingFeeOnSell = _marketingFeeOnSell;
        developmentFeeOnBuy = _developmentFeeOnBuy;
        developmentFeeOnSell = _developmentFeeOnSell;
        totalFeesOnBuy = marketingFeeOnBuy + developmentFeeOnBuy;
        totalFeesOnSell = marketingFeeOnSell + developmentFeeOnSell;
        totalFees = totalFeesOnBuy + totalFeesOnSell;
        require(totalFeesOnBuy <= 10, "Fee Buy can't be more than 10%");
        require(totalFeesOnSell <= 10, "Fee Sell can't be more than 10%");

        emit FeesUpdated(
            marketingFeeOnBuy,
            marketingFeeOnSell,
            developmentFeeOnBuy,
            developmentFeeOnSell
        );
    }

    function changeMarketingWallet(
        address _marketingWallet
    ) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );
        marketingWallet = _marketingWallet;
        _isExcludedFromFees[marketingWallet] = true;
        emit MarketingWalletChanged(marketingWallet);
    }

    function changeDevelopmentWallet(
        address _developmentWallet
    ) external onlyOwner {
        require(
            _developmentWallet != developmentWallet,
            "Marketing wallet is already that address"
        );
        require(
            _developmentWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_developmentWallet),
            "Marketing wallet cannot be a contract"
        );
        developmentWallet = _developmentWallet;
        _isExcludedFromFees[developmentWallet] = true;
        emit DevelopmentWalletChanged(developmentWallet);
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        require(swapEnabled != _enabled, "swapEnabled already at this state.");
        swapEnabled = _enabled;
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(
            newAmount > totalSupply() / 100000,
            "SwapTokensAtAmount must be greater than 0.0001% of total supply"
        );
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountChanged(newAmount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (!isTradingEnabled) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading Not Yet Started"
            );
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap && !swapping && swapEnabled && to == uniswapV2Pair) {
            swapping = true;

            uint256 totalFee = totalFeesOnBuy + totalFeesOnSell;
            uint256 developmentShare = developmentFeeOnBuy +
                developmentFeeOnSell;
            uint256 marketingShare = marketingFeeOnBuy + marketingFeeOnSell;

            if (developmentShare > 0) {
                uint256 developmentTokens = (contractTokenBalance *
                    developmentShare) / totalFee;
                swapAndSendFee(developmentTokens, developmentWallet);
            }

            if (marketingShare > 0) {
                uint256 marketingTokens = (contractTokenBalance *
                    marketingShare) / totalFee;
                swapAndSendFee(marketingTokens, marketingWallet);
            }

            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 fees;
            if (from == uniswapV2Pair) {
                fees =
                    (amount * (developmentFeeOnBuy + marketingFeeOnBuy)) /
                    100;
            } else if (to == uniswapV2Pair) {
                fees =
                    (amount * (developmentFeeOnSell + marketingFeeOnSell)) /
                    100;
            } else {
                fees = 0;
            }
            amount -= fees;
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        }

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

    function swapAndSendFee(uint256 tokenAmount, address target) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(target),
            block.timestamp
        );

        emit SwapAndSendFee(tokenAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"DevelopmentWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingFeeOnSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFeeOnSell","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"SwapAndSendFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SwapTokensAtAmountChanged","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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"changeDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeOnSell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradingAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"totalFeesOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260026006556005600755600260085560056009556008546006546200002a9190620006cf565b600a556009546007546200003f9190620006cf565b600b55600d80546001600160a01b0319908116734aa75da7bc14ae95287e7e56a6fd472e0479709117909155600e8054821673954f1b5e4c8eb37e82d85c71612d9196fa1d834c1790556011805490911661dead179055348015620000a357600080fd5b50604080518082018252600480825263082a08ab60e31b6020808401829052845180860190955291845290830152906003620000e083826200078f565b506004620000ef82826200078f565b5050506000620001046200041460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060006200015e62000418565b90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c791906200085b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023b91906200085b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002af91906200085b565b600f80546001600160a01b038086166001600160a01b031992831681179093556010805491851691909216179055909150620002f0903090600019620004a3565b600160136000620003096005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601154821681526013938490528281208054861660019081179091553082528382208054871682179055600d54831682528382208054871682179055600e549092168152918220805490941681179093556200039262000418565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620003e3620003d16005546001600160a01b031690565b6a56da9d67d20d7709000000620005cf565b6064620003ef60025490565b620003fc9060016200088d565b620004089190620008a7565b60125550620008ca9050565b3390565b6000466061819003620004405773d99d1c33f9fc3444f8101754abc46c52416550d191505090565b8060380362000464577310ed43c718714eb63d5aa57b78b54704e256024e91505090565b806001036200048857737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b6001600160a01b0383166200050b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200056e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000502565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620006275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000502565b80600260008282546200063b9190620006cf565b90915550506001600160a01b038216600090815260208190526040812080548392906200066a908490620006cf565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620006e557620006e5620006b9565b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200071657607f821691505b6020821081036200073757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006b457600081815260208120601f850160051c81016020861015620007665750805b601f850160051c820191505b81811015620007875782815560010162000772565b505050505050565b81516001600160401b03811115620007ab57620007ab620006eb565b620007c381620007bc845462000701565b846200073d565b602080601f831160018114620007fb5760008415620007e25750858301515b600019600386901b1c1916600185901b17855562000787565b600085815260208120601f198616915b828110156200082c578886015182559484019460019091019084016200080b565b50858210156200084b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200086e57600080fd5b81516001600160a01b03811681146200088657600080fd5b9392505050565b8082028115828204841417620006e557620006e5620006b9565b600082620008c557634e487b7160e01b600052601260045260246000fd5b500490565b6126f780620008da6000396000f3fe6080604052600436106102895760003560e01c806375f0a87411610153578063c0246668116100cb578063dd62ed3e1161007f578063e2f4560511610064578063e2f45605146106fa578063f2fde38b14610710578063f9d0831a1461073057600080fd5b8063dd62ed3e14610694578063e01af92c146106da57600080fd5b8063d35c9224116100b0578063d35c922414610653578063d54f7d5e14610669578063dc4c7dbc1461067e57600080fd5b8063c024666814610613578063c04a54141461063357600080fd5b80639a679cf611610122578063a9059cbb11610107578063a9059cbb146105b3578063afa4f3b2146105d3578063bb85c6d1146105f357600080fd5b80639a679cf614610573578063a457c2d71461059357600080fd5b806375f0a8741461050a578063766ea4151461052a5780638da5cb5b1461054057806395d89b411461055e57600080fd5b8063293230b8116102015780635fc2e596116101b55780636fcba3771161019a5780636fcba3771461049f57806370a08231146104bf578063715018a6146104f557600080fd5b80635fc2e5961461046f5780636ddd17131461048557600080fd5b806339509351116101e657806339509351146103f657806349bd5a5e146104165780634fbee1931461043657600080fd5b8063293230b8146103c3578063313ce567146103da57600080fd5b80631694505e116102585780631dac24d61161023d5780631dac24d61461037757806323b872dd1461038d57806325ecca87146103ad57600080fd5b80631694505e1461032a57806318160ddd1461036257600080fd5b8063064a59d01461029557806306fdde03146102c4578063087ed972146102e6578063095ea7b31461030a57600080fd5b3661029057005b600080fd5b3480156102a157600080fd5b506014546102af9060ff1681565b60405190151581526020015b60405180910390f35b3480156102d057600080fd5b506102d9610750565b6040516102bb91906122e5565b3480156102f257600080fd5b506102fc600b5481565b6040519081526020016102bb565b34801561031657600080fd5b506102af610325366004612366565b6107e2565b34801561033657600080fd5b50600f5461034a906001600160a01b031681565b6040516001600160a01b0390911681526020016102bb565b34801561036e57600080fd5b506002546102fc565b34801561038357600080fd5b506102fc60095481565b34801561039957600080fd5b506102af6103a8366004612392565b6107f9565b3480156103b957600080fd5b506102fc60085481565b3480156103cf57600080fd5b506103d86108e2565b005b3480156103e657600080fd5b50604051601281526020016102bb565b34801561040257600080fd5b506102af610411366004612366565b6109d0565b34801561042257600080fd5b5060105461034a906001600160a01b031681565b34801561044257600080fd5b506102af6104513660046123d3565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561047b57600080fd5b506102fc60065481565b34801561049157600080fd5b506016546102af9060ff1681565b3480156104ab57600080fd5b506103d86104ba3660046123f7565b610a0c565b3480156104cb57600080fd5b506102fc6104da3660046123d3565b6001600160a01b031660009081526020819052604090205490565b34801561050157600080fd5b506103d8610ba8565b34801561051657600080fd5b50600d5461034a906001600160a01b031681565b34801561053657600080fd5b506102fc600a5481565b34801561054c57600080fd5b506005546001600160a01b031661034a565b34801561056a57600080fd5b506102d9610c64565b34801561057f57600080fd5b506103d861058e3660046123d3565b610c73565b34801561059f57600080fd5b506102af6105ae366004612366565b610ee7565b3480156105bf57600080fd5b506102af6105ce366004612366565b610f98565b3480156105df57600080fd5b506103d86105ee366004612429565b610fa5565b3480156105ff57600080fd5b506103d861060e3660046123d3565b6110c5565b34801561061f57600080fd5b506103d861062e366004612450565b611339565b34801561063f57600080fd5b50600e5461034a906001600160a01b031681565b34801561065f57600080fd5b506102fc60155481565b34801561067557600080fd5b5061034a6114a6565b34801561068a57600080fd5b506102fc60075481565b3480156106a057600080fd5b506102fc6106af366004612489565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106e657600080fd5b506103d86106f53660046124b7565b61152e565b34801561070657600080fd5b506102fc60125481565b34801561071c57600080fd5b506103d861072b3660046123d3565b611639565b34801561073c57600080fd5b506103d861074b3660046123d3565b611783565b60606003805461075f906124d4565b80601f016020809104026020016040519081016040528092919081815260200182805461078b906124d4565b80156107d85780601f106107ad576101008083540402835291602001916107d8565b820191906000526020600020905b8154815290600101906020018083116107bb57829003601f168201915b5050505050905090565b60006107ef33848461198d565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108cc57828110156108bf5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6108cc853385840361198d565b6108d7858585611ae5565b506001949350505050565b6005546001600160a01b0316331461093c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b60145460ff161561098f5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c656400000000000000000060448201526064016108b6565b6016805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00918216811790925560148054909116909117905542601555565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107ef918590610a07908690612556565b61198d565b6005546001600160a01b03163314610a665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6006849055600783905560088290556009819055610a848285612556565b600a55600954600754610a979190612556565b600b819055600a54610aa99190612556565b600c55600a80541115610afe5760405162461bcd60e51b815260206004820152601e60248201527f466565204275792063616e2774206265206d6f7265207468616e20313025000060448201526064016108b6565b600a600b541115610b515760405162461bcd60e51b815260206004820152601f60248201527f4665652053656c6c2063616e2774206265206d6f7265207468616e203130250060448201526064016108b6565b6006546007546008546009546040805194855260208501939093529183015260608201527f16e6f67290546b8dd0e587f4b7f67d4f61932ae17ffd8c60d3509dbc05c175fe9060800160405180910390a150505050565b6005546001600160a01b03163314610c025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60606004805461075f906124d4565b6005546001600160a01b03163314610ccd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b600e546001600160a01b0390811690821603610d515760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038116610dcd5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0381163b15610e4b5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f747261637400000000000000000000000000000000000000000000000000000060648201526084016108b6565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116918217835560009182526013602052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925492519216917f2e184dc34ab031d763441c588bd08760997797e8550c76fd439a20571233cc209190a250565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016108b6565b610f8e338585840361198d565b5060019392505050565b60006107ef338484611ae5565b6005546001600160a01b03163314610fff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b620186a061100c60025490565b6110169190612569565b811161108a5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016108b6565b60128190556040518181527fcba17309eff0b14bb89cad72aef8b308a23d698dfff957e2255d17bbc03620bd9060200160405180910390a150565b6005546001600160a01b0316331461111f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b600d546001600160a01b03908116908216036111a35760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b03811661121f5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0381163b1561129d5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f747261637400000000000000000000000000000000000000000000000000000060648201526084016108b6565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116918217835560009182526013602052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925492519216917fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b9190a250565b6005546001600160a01b031633146113935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036114295760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c75646564270000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b03821660008181526013602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60004660618190036114cd5773d99d1c33f9fc3444f8101754abc46c52416550d191505090565b806038036114f0577310ed43c718714eb63d5aa57b78b54704e256024e91505090565b8060010361151357737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b6005546001600160a01b031633146115885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b60165481151560ff9091161515036116085760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c72656164792061742074686973207374617460448201527f652e00000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b031633146116935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6001600160a01b03811661170f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108b6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b306001600160a01b038216036118355760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016108b6565b6001600160a01b0381166118735760405133904780156108fc02916000818181858888f1935050505015801561186f573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f991906125a4565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198691906125bd565b5050505b50565b6001600160a01b038316611a085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038216611a845760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038216611bdd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b60145460ff16611c72576001600160a01b03831660009081526013602052604090205460ff1680611c2657506001600160a01b03821660009081526013602052604090205460ff165b611c725760405162461bcd60e51b815260206004820152601760248201527f54726164696e67204e6f7420596574205374617274656400000000000000000060448201526064016108b6565b80600003611c8b57611c8683836000611f21565b505050565b3060009081526020819052604090205460125481108015908190611cca575060115474010000000000000000000000000000000000000000900460ff16155b8015611cd8575060165460ff165b8015611cf157506010546001600160a01b038581169116145b15611e0f57601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600b54600a54600091611d4791612556565b90506000600954600854611d5b9190612556565b90506000600754600654611d6f9190612556565b90508115611daa57600083611d8484886125da565b611d8e9190612569565b600e54909150611da89082906001600160a01b0316612138565b505b8015611de357600083611dbd83886125da565b611dc79190612569565b600d54909150611de19082906001600160a01b0316612138565b505b5050601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505b6011546001600160a01b03861660009081526013602052604090205460ff74010000000000000000000000000000000000000000909204821615911680611e6e57506001600160a01b03851660009081526013602052604090205460ff165b15611e77575060005b8015611f0e576010546000906001600160a01b0390811690881603611ec3576064600654600854611ea89190612556565b611eb290876125da565b611ebc9190612569565b9050611eef565b6010546001600160a01b0390811690871603611eeb576064600754600954611ea89190612556565b5060005b611ef981866125f1565b94508015611f0c57611f0c873083611f21565b505b611f19868686611f21565b505050505050565b6001600160a01b038316611f9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0382166120195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038316600090815260208190526040902054818110156120a85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120df908490612556565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161212b91815260200190565b60405180910390a3611986565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061216d5761216d612604565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156121df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122039190612633565b8160018151811061221657612216612604565b6001600160a01b039283166020918202929092010152600f546040517f5c11d795000000000000000000000000000000000000000000000000000000008152911690635c11d79590612275908690600090869088904290600401612650565b600060405180830381600087803b15801561228f57600080fd5b505af11580156122a3573d6000803e3d6000fd5b505050507f46cc9a40deb7f9a6e09287e4122d5c8ba3daf2c81e84b6b73f926de10211ee8f836040516122d891815260200190565b60405180910390a1505050565b600060208083528351808285015260005b81811015612312578581018301518582016040015282016122f6565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b038116811461198a57600080fd5b6000806040838503121561237957600080fd5b823561238481612351565b946020939093013593505050565b6000806000606084860312156123a757600080fd5b83356123b281612351565b925060208401356123c281612351565b929592945050506040919091013590565b6000602082840312156123e557600080fd5b81356123f081612351565b9392505050565b6000806000806080858703121561240d57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561243b57600080fd5b5035919050565b801515811461198a57600080fd5b6000806040838503121561246357600080fd5b823561246e81612351565b9150602083013561247e81612442565b809150509250929050565b6000806040838503121561249c57600080fd5b82356124a781612351565b9150602083013561247e81612351565b6000602082840312156124c957600080fd5b81356123f081612442565b600181811c908216806124e857607f821691505b602082108103612521577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156107f3576107f3612527565b60008261259f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156125b657600080fd5b5051919050565b6000602082840312156125cf57600080fd5b81516123f081612442565b80820281158282048414176107f3576107f3612527565b818103818111156107f3576107f3612527565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561264557600080fd5b81516123f081612351565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126a05784516001600160a01b03168352938301939183019160010161267b565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a3c0ca225ad7e15998cbd2c7c147c1cc24343358acf600a529690d48c9078c0164736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102895760003560e01c806375f0a87411610153578063c0246668116100cb578063dd62ed3e1161007f578063e2f4560511610064578063e2f45605146106fa578063f2fde38b14610710578063f9d0831a1461073057600080fd5b8063dd62ed3e14610694578063e01af92c146106da57600080fd5b8063d35c9224116100b0578063d35c922414610653578063d54f7d5e14610669578063dc4c7dbc1461067e57600080fd5b8063c024666814610613578063c04a54141461063357600080fd5b80639a679cf611610122578063a9059cbb11610107578063a9059cbb146105b3578063afa4f3b2146105d3578063bb85c6d1146105f357600080fd5b80639a679cf614610573578063a457c2d71461059357600080fd5b806375f0a8741461050a578063766ea4151461052a5780638da5cb5b1461054057806395d89b411461055e57600080fd5b8063293230b8116102015780635fc2e596116101b55780636fcba3771161019a5780636fcba3771461049f57806370a08231146104bf578063715018a6146104f557600080fd5b80635fc2e5961461046f5780636ddd17131461048557600080fd5b806339509351116101e657806339509351146103f657806349bd5a5e146104165780634fbee1931461043657600080fd5b8063293230b8146103c3578063313ce567146103da57600080fd5b80631694505e116102585780631dac24d61161023d5780631dac24d61461037757806323b872dd1461038d57806325ecca87146103ad57600080fd5b80631694505e1461032a57806318160ddd1461036257600080fd5b8063064a59d01461029557806306fdde03146102c4578063087ed972146102e6578063095ea7b31461030a57600080fd5b3661029057005b600080fd5b3480156102a157600080fd5b506014546102af9060ff1681565b60405190151581526020015b60405180910390f35b3480156102d057600080fd5b506102d9610750565b6040516102bb91906122e5565b3480156102f257600080fd5b506102fc600b5481565b6040519081526020016102bb565b34801561031657600080fd5b506102af610325366004612366565b6107e2565b34801561033657600080fd5b50600f5461034a906001600160a01b031681565b6040516001600160a01b0390911681526020016102bb565b34801561036e57600080fd5b506002546102fc565b34801561038357600080fd5b506102fc60095481565b34801561039957600080fd5b506102af6103a8366004612392565b6107f9565b3480156103b957600080fd5b506102fc60085481565b3480156103cf57600080fd5b506103d86108e2565b005b3480156103e657600080fd5b50604051601281526020016102bb565b34801561040257600080fd5b506102af610411366004612366565b6109d0565b34801561042257600080fd5b5060105461034a906001600160a01b031681565b34801561044257600080fd5b506102af6104513660046123d3565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561047b57600080fd5b506102fc60065481565b34801561049157600080fd5b506016546102af9060ff1681565b3480156104ab57600080fd5b506103d86104ba3660046123f7565b610a0c565b3480156104cb57600080fd5b506102fc6104da3660046123d3565b6001600160a01b031660009081526020819052604090205490565b34801561050157600080fd5b506103d8610ba8565b34801561051657600080fd5b50600d5461034a906001600160a01b031681565b34801561053657600080fd5b506102fc600a5481565b34801561054c57600080fd5b506005546001600160a01b031661034a565b34801561056a57600080fd5b506102d9610c64565b34801561057f57600080fd5b506103d861058e3660046123d3565b610c73565b34801561059f57600080fd5b506102af6105ae366004612366565b610ee7565b3480156105bf57600080fd5b506102af6105ce366004612366565b610f98565b3480156105df57600080fd5b506103d86105ee366004612429565b610fa5565b3480156105ff57600080fd5b506103d861060e3660046123d3565b6110c5565b34801561061f57600080fd5b506103d861062e366004612450565b611339565b34801561063f57600080fd5b50600e5461034a906001600160a01b031681565b34801561065f57600080fd5b506102fc60155481565b34801561067557600080fd5b5061034a6114a6565b34801561068a57600080fd5b506102fc60075481565b3480156106a057600080fd5b506102fc6106af366004612489565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106e657600080fd5b506103d86106f53660046124b7565b61152e565b34801561070657600080fd5b506102fc60125481565b34801561071c57600080fd5b506103d861072b3660046123d3565b611639565b34801561073c57600080fd5b506103d861074b3660046123d3565b611783565b60606003805461075f906124d4565b80601f016020809104026020016040519081016040528092919081815260200182805461078b906124d4565b80156107d85780601f106107ad576101008083540402835291602001916107d8565b820191906000526020600020905b8154815290600101906020018083116107bb57829003601f168201915b5050505050905090565b60006107ef33848461198d565b5060015b92915050565b6001600160a01b03831660009081526001602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108cc57828110156108bf5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6108cc853385840361198d565b6108d7858585611ae5565b506001949350505050565b6005546001600160a01b0316331461093c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b60145460ff161561098f5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c656400000000000000000060448201526064016108b6565b6016805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00918216811790925560148054909116909117905542601555565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107ef918590610a07908690612556565b61198d565b6005546001600160a01b03163314610a665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6006849055600783905560088290556009819055610a848285612556565b600a55600954600754610a979190612556565b600b819055600a54610aa99190612556565b600c55600a80541115610afe5760405162461bcd60e51b815260206004820152601e60248201527f466565204275792063616e2774206265206d6f7265207468616e20313025000060448201526064016108b6565b600a600b541115610b515760405162461bcd60e51b815260206004820152601f60248201527f4665652053656c6c2063616e2774206265206d6f7265207468616e203130250060448201526064016108b6565b6006546007546008546009546040805194855260208501939093529183015260608201527f16e6f67290546b8dd0e587f4b7f67d4f61932ae17ffd8c60d3509dbc05c175fe9060800160405180910390a150505050565b6005546001600160a01b03163314610c025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60606004805461075f906124d4565b6005546001600160a01b03163314610ccd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b600e546001600160a01b0390811690821603610d515760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038116610dcd5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0381163b15610e4b5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f747261637400000000000000000000000000000000000000000000000000000060648201526084016108b6565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116918217835560009182526013602052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925492519216917f2e184dc34ab031d763441c588bd08760997797e8550c76fd439a20571233cc209190a250565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016108b6565b610f8e338585840361198d565b5060019392505050565b60006107ef338484611ae5565b6005546001600160a01b03163314610fff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b620186a061100c60025490565b6110169190612569565b811161108a5760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016108b6565b60128190556040518181527fcba17309eff0b14bb89cad72aef8b308a23d698dfff957e2255d17bbc03620bd9060200160405180910390a150565b6005546001600160a01b0316331461111f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b600d546001600160a01b03908116908216036111a35760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c7265616479207468617460448201527f206164647265737300000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b03811661121f5760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0381163b1561129d5760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e60448201527f747261637400000000000000000000000000000000000000000000000000000060648201526084016108b6565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116918217835560009182526013602052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925492519216917fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b9190a250565b6005546001600160a01b031633146113935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036114295760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f662060448201527f276578636c75646564270000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b03821660008181526013602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60004660618190036114cd5773d99d1c33f9fc3444f8101754abc46c52416550d191505090565b806038036114f0577310ed43c718714eb63d5aa57b78b54704e256024e91505090565b8060010361151357737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b737a250d5630b4cf539739df2c5dacb4c659f2488d91505090565b6005546001600160a01b031633146115885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b60165481151560ff9091161515036116085760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c72656164792061742074686973207374617460448201527f652e00000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6005546001600160a01b031633146116935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b6001600160a01b03811661170f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108b6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b031633146117dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b6565b306001600160a01b038216036118355760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e7360448201526064016108b6565b6001600160a01b0381166118735760405133904780156108fc02916000818181858888f1935050505015801561186f573d6000803e3d6000fd5b5050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156118d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f991906125a4565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198691906125bd565b5050505b50565b6001600160a01b038316611a085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038216611a845760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038216611bdd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b60145460ff16611c72576001600160a01b03831660009081526013602052604090205460ff1680611c2657506001600160a01b03821660009081526013602052604090205460ff165b611c725760405162461bcd60e51b815260206004820152601760248201527f54726164696e67204e6f7420596574205374617274656400000000000000000060448201526064016108b6565b80600003611c8b57611c8683836000611f21565b505050565b3060009081526020819052604090205460125481108015908190611cca575060115474010000000000000000000000000000000000000000900460ff16155b8015611cd8575060165460ff165b8015611cf157506010546001600160a01b038581169116145b15611e0f57601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055600b54600a54600091611d4791612556565b90506000600954600854611d5b9190612556565b90506000600754600654611d6f9190612556565b90508115611daa57600083611d8484886125da565b611d8e9190612569565b600e54909150611da89082906001600160a01b0316612138565b505b8015611de357600083611dbd83886125da565b611dc79190612569565b600d54909150611de19082906001600160a01b0316612138565b505b5050601180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505b6011546001600160a01b03861660009081526013602052604090205460ff74010000000000000000000000000000000000000000909204821615911680611e6e57506001600160a01b03851660009081526013602052604090205460ff165b15611e77575060005b8015611f0e576010546000906001600160a01b0390811690881603611ec3576064600654600854611ea89190612556565b611eb290876125da565b611ebc9190612569565b9050611eef565b6010546001600160a01b0390811690871603611eeb576064600754600954611ea89190612556565b5060005b611ef981866125f1565b94508015611f0c57611f0c873083611f21565b505b611f19868686611f21565b505050505050565b6001600160a01b038316611f9d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b0382166120195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038316600090815260208190526040902054818110156120a85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016108b6565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120df908490612556565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161212b91815260200190565b60405180910390a3611986565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061216d5761216d612604565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156121df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122039190612633565b8160018151811061221657612216612604565b6001600160a01b039283166020918202929092010152600f546040517f5c11d795000000000000000000000000000000000000000000000000000000008152911690635c11d79590612275908690600090869088904290600401612650565b600060405180830381600087803b15801561228f57600080fd5b505af11580156122a3573d6000803e3d6000fd5b505050507f46cc9a40deb7f9a6e09287e4122d5c8ba3daf2c81e84b6b73f926de10211ee8f836040516122d891815260200190565b60405180910390a1505050565b600060208083528351808285015260005b81811015612312578581018301518582016040015282016122f6565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b038116811461198a57600080fd5b6000806040838503121561237957600080fd5b823561238481612351565b946020939093013593505050565b6000806000606084860312156123a757600080fd5b83356123b281612351565b925060208401356123c281612351565b929592945050506040919091013590565b6000602082840312156123e557600080fd5b81356123f081612351565b9392505050565b6000806000806080858703121561240d57600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561243b57600080fd5b5035919050565b801515811461198a57600080fd5b6000806040838503121561246357600080fd5b823561246e81612351565b9150602083013561247e81612442565b809150509250929050565b6000806040838503121561249c57600080fd5b82356124a781612351565b9150602083013561247e81612351565b6000602082840312156124c957600080fd5b81356123f081612442565b600181811c908216806124e857607f821691505b602082108103612521577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156107f3576107f3612527565b60008261259f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156125b657600080fd5b5051919050565b6000602082840312156125cf57600080fd5b81516123f081612442565b80820281158282048414176107f3576107f3612527565b818103818111156107f3576107f3612527565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561264557600080fd5b81516123f081612351565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126a05784516001600160a01b03168352938301939183019160010161267b565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a3c0ca225ad7e15998cbd2c7c147c1cc24343358acf600a529690d48c9078c0164736f6c63430008130033

Deployed Bytecode Sourcemap

19721:9852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20598:28;;;;;;;;;;-1:-1:-1;20598:28:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;20598:28:0;;;;;;;;5948:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20016:74::-;;;;;;;;;;;;;;;;;;;964:25:1;;;952:2;937:18;20016:74:0;818:177:1;6928:194:0;;;;;;;;;;-1:-1:-1;6928:194:0;;;;;:::i;:::-;;:::i;20308:41::-;;;;;;;;;;-1:-1:-1;20308:41:0;;;;-1:-1:-1;;;;;20308:41:0;;;;;;-1:-1:-1;;;;;1670:55:1;;;1652:74;;1640:2;1625:18;20308:41:0;1479:253:1;6269:108:0;;;;;;;;;;-1:-1:-1;6357:12:0;;6269:108;;19892:39;;;;;;;;;;;;;;;;7130:622;;;;;;;;;;-1:-1:-1;7130:622:0;;;;;:::i;:::-;;:::i;19847:38::-;;;;;;;;;;;;;;;;22118:221;;;;;;;;;;;;;:::i;:::-;;6168:93;;;;;;;;;;-1:-1:-1;6168:93:0;;6251:2;2340:36:1;;2328:2;2313:18;6168:93:0;2198:184:1;7760:290:0;;;;;;;;;;-1:-1:-1;7760:290:0;;;;;:::i;:::-;;:::i;20356:28::-;;;;;;;;;;-1:-1:-1;20356:28:0;;;;-1:-1:-1;;;;;20356:28:0;;;23732:126;;;;;;;;;;-1:-1:-1;23732:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23822:28:0;23798:4;23822:28;;;:19;:28;;;;;;;;;23732:126;19760:36;;;;;;;;;;;;;;;;20669:23;;;;;;;;;;-1:-1:-1;20669:23:0;;;;;;;;23866:929;;;;;;;;;;-1:-1:-1;23866:929:0;;;;;:::i;:::-;;:::i;6385:143::-;;;;;;;;;;-1:-1:-1;6385:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6502:18:0;6475:7;6502:18;;;;;;;;;;;;6385:143;5098:148;;;;;;;;;;;;;:::i;20131:75::-;;;;;;;;;;-1:-1:-1;20131:75:0;;;;-1:-1:-1;;;;;20131:75:0;;;19938:71;;;;;;;;;;;;;;;;4884:79;;;;;;;;;;-1:-1:-1;4949:6:0;;-1:-1:-1;;;;;4949:6:0;4884:79;;6056:104;;;;;;;;;;;;;:::i;25462:673::-;;;;;;;;;;-1:-1:-1;25462:673:0;;;;;:::i;:::-;;:::i;8058:475::-;;;;;;;;;;-1:-1:-1;8058:475:0;;;;;:::i;:::-;;:::i;6536:200::-;;;;;;;;;;-1:-1:-1;6536:200:0;;;;;:::i;:::-;;:::i;26331:328::-;;;;;;;;;;-1:-1:-1;26331:328:0;;;;;:::i;:::-;;:::i;24803:651::-;;;;;;;;;;-1:-1:-1;24803:651:0;;;;;:::i;:::-;;:::i;23370:354::-;;;;;;;;;;-1:-1:-1;23370:354:0;;;;;:::i;:::-;;:::i;20213:86::-;;;;;;;;;;-1:-1:-1;20213:86:0;;;;-1:-1:-1;;;;;20213:86:0;;;20633:29;;;;;;;;;;;;;;;;22347:443;;;;;;;;;;;;;:::i;19803:37::-;;;;;;;;;;;;;;;;6744:176;;;;;;;;;;-1:-1:-1;6744:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;6885:18:0;;;6858:7;6885:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6744:176;26143:180;;;;;;;;;;-1:-1:-1;26143:180:0;;;;;:::i;:::-;;:::i;20495:33::-;;;;;;;;;;;;;;;;5254:281;;;;;;;;;;-1:-1:-1;5254:281:0;;;;;:::i;:::-;;:::i;22798:441::-;;;;;;;;;;-1:-1:-1;22798:441:0;;;;;:::i;:::-;;:::i;5948:100::-;6002:13;6035:5;6028:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5948:100;:::o;6928:194::-;7036:4;7053:39;4198:10;7076:7;7085:6;7053:8;:39::i;:::-;-1:-1:-1;7110:4:0;6928:194;;;;;:::o;7130:622::-;-1:-1:-1;;;;;7314:19:0;;7270:4;7314:19;;;:11;:19;;;;;;;;4198:10;7314:33;;;;;;;;7382:17;7362:37;;7358:314;;7462:6;7442:16;:26;;7416:128;;;;-1:-1:-1;;;7416:128:0;;5238:2:1;7416:128:0;;;5220:21:1;5277:2;5257:18;;;5250:30;5316:34;5296:18;;;5289:62;5387:10;5367:18;;;5360:38;5415:19;;7416:128:0;;;;;;;;;7588:57;7597:6;4198:10;7638:6;7619:16;:25;7588:8;:57::i;:::-;7684:36;7694:6;7702:9;7713:6;7684:9;:36::i;:::-;-1:-1:-1;7740:4:0;;7130:622;-1:-1:-1;;;;7130:622:0:o;22118:221::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;22181:16:::1;::::0;::::1;;22180:17;22172:53;;;::::0;-1:-1:-1;;;22172:53:0;;6008:2:1;22172:53:0::1;::::0;::::1;5990:21:1::0;6047:2;6027:18;;;6020:30;6086:25;6066:18;;;6059:53;6129:18;;22172:53:0::1;5806:347:1::0;22172:53:0::1;22236:11;:18:::0;;22250:4:::1;22236:18:::0;;;::::1;::::0;::::1;::::0;;;22265:16:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;22316:15:::1;22299:14;:32:::0;22118:221::o;7760:290::-;4198:10;7873:4;7962:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7962:34:0;;;;;;;;;;7873:4;;7890:130;;7940:7;;7962:47;;7999:10;;7962:47;:::i;:::-;7890:8;:130::i;23866:929::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;24074:17:::1;:38:::0;;;24123:18:::1;:40:::0;;;24174:19:::1;:42:::0;;;24227:20:::1;:44:::0;;;24299:39:::1;24196:20:::0;24094:18;24299:39:::1;:::i;:::-;24282:14;:56:::0;24388:20:::1;::::0;24367:18:::1;::::0;:41:::1;::::0;24388:20;24367:41:::1;:::i;:::-;24349:15;:59:::0;;;24431:14:::1;::::0;:32:::1;::::0;24349:59;24431:32:::1;:::i;:::-;24419:9;:44:::0;24500:2:::1;24482:14:::0;;:20:::1;;24474:63;;;::::0;-1:-1:-1;;;24474:63:0;;6679:2:1;24474:63:0::1;::::0;::::1;6661:21:1::0;6718:2;6698:18;;;6691:30;6757:32;6737:18;;;6730:60;6807:18;;24474:63:0::1;6477:354:1::0;24474:63:0::1;24575:2;24556:15;;:21;;24548:65;;;::::0;-1:-1:-1;;;24548:65:0;;7038:2:1;24548:65:0::1;::::0;::::1;7020:21:1::0;7077:2;7057:18;;;7050:30;7116:33;7096:18;;;7089:61;7167:18;;24548:65:0::1;6836:355:1::0;24548:65:0::1;24657:17;::::0;24689:18:::1;::::0;24722:19:::1;::::0;24756:20:::1;::::0;24631:156:::1;::::0;;7427:25:1;;;7483:2;7468:18;;7461:34;;;;7511:18;;;7504:34;7569:2;7554:18;;7547:34;24631:156:0::1;::::0;7414:3:1;7399:19;24631:156:0::1;;;;;;;23866:929:::0;;;;:::o;5098:148::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;5189:6:::1;::::0;5168:40:::1;::::0;5205:1:::1;::::0;-1:-1:-1;;;;;5189:6:0::1;::::0;5168:40:::1;::::0;5205:1;;5168:40:::1;5219:6;:19:::0;;;::::1;::::0;;5098:148::o;6056:104::-;6112:13;6145:7;6138:14;;;;;:::i;25462:673::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;25613:17:::1;::::0;-1:-1:-1;;;;;25613:17:0;;::::1;25591:39:::0;;::::1;::::0;25569:129:::1;;;::::0;-1:-1:-1;;;25569:129:0;;7794:2:1;25569:129:0::1;::::0;::::1;7776:21:1::0;7833:2;7813:18;;;7806:30;7872:34;7852:18;;;7845:62;7943:10;7923:18;;;7916:38;7971:19;;25569:129:0::1;7592:404:1::0;25569:129:0::1;-1:-1:-1::0;;;;;25731:32:0;::::1;25709:125;;;::::0;-1:-1:-1;;;25709:125:0;;8203:2:1;25709:125:0::1;::::0;::::1;8185:21:1::0;8242:2;8222:18;;;8215:30;8281:34;8261:18;;;8254:62;8352:13;8332:18;;;8325:41;8383:19;;25709:125:0::1;8001:407:1::0;25709:125:0::1;-1:-1:-1::0;;;;;23331:19:0;;;:23;25845:118:::1;;;::::0;-1:-1:-1;;;25845:118:0;;8615:2:1;25845:118:0::1;::::0;::::1;8597:21:1::0;8654:2;8634:18;;;8627:30;8693:34;8673:18;;;8666:62;8764:7;8744:18;;;8737:35;8789:19;;25845:118:0::1;8413:401:1::0;25845:118:0::1;25974:17;:38:::0;;;::::1;-1:-1:-1::0;;;;;25974:38:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;26023:38:0;;;:19:::1;:38;::::0;;;;;:45;;;::::1;-1:-1:-1::0;26023:45:0::1;::::0;;26109:17;;26084:43;;26109:17;::::1;::::0;26084:43:::1;::::0;-1:-1:-1;26084:43:0::1;25462:673:::0;:::o;8058:475::-;4198:10;8176:4;8220:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;8220:34:0;;;;;;;;;;8287:35;;;;8265:122;;;;-1:-1:-1;;;8265:122:0;;9021:2:1;8265:122:0;;;9003:21:1;9060:2;9040:18;;;9033:30;9099:34;9079:18;;;9072:62;9170:7;9150:18;;;9143:35;9195:19;;8265:122:0;8819:401:1;8265:122:0;8423:67;4198:10;8446:7;8474:15;8455:16;:34;8423:8;:67::i;:::-;-1:-1:-1;8521:4:0;;8058:475;-1:-1:-1;;;8058:475:0:o;6536:200::-;6647:4;6664:42;4198:10;6688:9;6699:6;6664:9;:42::i;26331:328::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;26461:6:::1;26445:13;6357:12:::0;;;6269:108;26445:13:::1;:22;;;;:::i;:::-;26433:9;:34;26411:147;;;::::0;-1:-1:-1;;;26411:147:0;;9706:2:1;26411:147:0::1;::::0;::::1;9688:21:1::0;9745:2;9725:18;;;9718:30;9784:34;9764:18;;;9757:62;9855:33;9835:18;;;9828:61;9906:19;;26411:147:0::1;9504:427:1::0;26411:147:0::1;26569:18;:30:::0;;;26615:36:::1;::::0;964:25:1;;;26615:36:0::1;::::0;952:2:1;937:18;26615:36:0::1;;;;;;;26331:328:::0;:::o;24803:651::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;24948:15:::1;::::0;-1:-1:-1;;;;;24948:15:0;;::::1;24928:35:::0;;::::1;::::0;24906:125:::1;;;::::0;-1:-1:-1;;;24906:125:0;;7794:2:1;24906:125:0::1;::::0;::::1;7776:21:1::0;7833:2;7813:18;;;7806:30;7872:34;7852:18;;;7845:62;7943:10;7923:18;;;7916:38;7971:19;;24906:125:0::1;7592:404:1::0;24906:125:0::1;-1:-1:-1::0;;;;;25064:30:0;::::1;25042:123;;;::::0;-1:-1:-1;;;25042:123:0;;8203:2:1;25042:123:0::1;::::0;::::1;8185:21:1::0;8242:2;8222:18;;;8215:30;8281:34;8261:18;;;8254:62;8352:13;8332:18;;;8325:41;8383:19;;25042:123:0::1;8001:407:1::0;25042:123:0::1;-1:-1:-1::0;;;;;23331:19:0;;;:23;25176:116:::1;;;::::0;-1:-1:-1;;;25176:116:0;;8615:2:1;25176:116:0::1;::::0;::::1;8597:21:1::0;8654:2;8634:18;;;8627:30;8693:34;8673:18;;;8666:62;8764:7;8744:18;;;8737:35;8789:19;;25176:116:0::1;8413:401:1::0;25176:116:0::1;25303:15;:34:::0;;;::::1;-1:-1:-1::0;;;;;25303:34:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;25348:36:0;;;:19:::1;:36;::::0;;;;;:43;;;::::1;-1:-1:-1::0;25348:43:0::1;::::0;;25430:15;;25407:39;;25430:15;::::1;::::0;25407:39:::1;::::0;-1:-1:-1;25407:39:0::1;24803:651:::0;:::o;23370:354::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;-1:-1:-1;;;;;23504:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;23482:132:::1;;;::::0;-1:-1:-1;;;23482:132:0;;10138:2:1;23482:132:0::1;::::0;::::1;10120:21:1::0;10177:2;10157:18;;;10150:30;10216:34;10196:18;;;10189:62;10287:12;10267:18;;;10260:40;10317:19;;23482:132:0::1;9936:406:1::0;23482:132:0::1;-1:-1:-1::0;;;;;23625:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;23682:34;;154:41:1;;;23682:34:0::1;::::0;127:18:1;23682:34:0::1;;;;;;;23370:354:::0;;:::o;22347:443::-;22396:7;22467:9;22507:2;22501:8;;;22497:285;;22518:42;22511:49;;;22347:443;:::o;22497:285::-;22580:2;22586;22580:8;22576:206;;22597:42;22590:49;;;22347:443;:::o;22576:206::-;22659:2;22665:1;22659:7;22655:127;;22675:42;22668:49;;;22347:443;:::o;22655:127::-;22740:42;22733:49;;;22347:443;:::o;26143:180::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;26220:11:::1;::::0;:23;::::1;;:11;::::0;;::::1;:23;;::::0;26212:70:::1;;;::::0;-1:-1:-1;;;26212:70:0;;10549:2:1;26212:70:0::1;::::0;::::1;10531:21:1::0;10588:2;10568:18;;;10561:30;10627:34;10607:18;;;10600:62;10698:4;10678:18;;;10671:32;10720:19;;26212:70:0::1;10347:398:1::0;26212:70:0::1;26293:11;:22:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;26143:180::o;5254:281::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;-1:-1:-1;;;;;5357:22:0;::::1;5335:110;;;::::0;-1:-1:-1;;;5335:110:0;;10952:2:1;5335:110:0::1;::::0;::::1;10934:21:1::0;10991:2;10971:18;;;10964:30;11030:34;11010:18;;;11003:62;11101:8;11081:18;;;11074:36;11127:19;;5335:110:0::1;10750:402:1::0;5335:110:0::1;5482:6;::::0;5461:38:::1;::::0;-1:-1:-1;;;;;5461:38:0;;::::1;::::0;5482:6:::1;::::0;5461:38:::1;::::0;5482:6:::1;::::0;5461:38:::1;5510:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;5510:17:0;;;::::1;::::0;;;::::1;::::0;;5254:281::o;22798:441::-;5011:6;;-1:-1:-1;;;;;5011:6:0;4198:10;5011:22;5003:67;;;;-1:-1:-1;;;5003:67:0;;5647:2:1;5003:67:0;;;5629:21:1;;;5666:18;;;5659:30;5725:34;5705:18;;;5698:62;5777:18;;5003:67:0;5445:356:1;5003:67:0;22894:4:::1;-1:-1:-1::0;;;;;22877:22:0;::::1;::::0;22869:67:::1;;;::::0;-1:-1:-1;;;22869:67:0;;11359:2:1;22869:67:0::1;::::0;::::1;11341:21:1::0;;;11378:18;;;11371:30;11437:34;11417:18;;;11410:62;11489:18;;22869:67:0::1;11157:356:1::0;22869:67:0::1;-1:-1:-1::0;;;;;22951:21:0;::::1;22947:126;;22989:51;::::0;22997:10:::1;::::0;23018:21:::1;22989:51:::0;::::1;;;::::0;::::1;::::0;;;23018:21;22997:10;22989:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22798:441:::0;:::o;22947:126::-:1;23145:35;::::0;;;;23174:4:::1;23145:35;::::0;::::1;1652:74:1::0;23110:5:0;;23083:17:::1;::::0;-1:-1:-1;;;;;23145:20:0;::::1;::::0;::::1;::::0;1625:18:1;;23145:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23191:40;::::0;;;;23211:10:::1;23191:40;::::0;::::1;11881:74:1::0;11971:18;;;11964:34;;;23127:53:0;;-1:-1:-1;;;;;;23191:19:0;::::1;::::0;::::1;::::0;11854:18:1;;23191:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22858:381;;5081:1;22798:441:::0;:::o;10325:380::-;-1:-1:-1;;;;;10461:19:0;;10453:68;;;;-1:-1:-1;;;10453:68:0;;12461:2:1;10453:68:0;;;12443:21:1;12500:2;12480:18;;;12473:30;12539:34;12519:18;;;12512:62;12610:6;12590:18;;;12583:34;12634:19;;10453:68:0;12259:400:1;10453:68:0;-1:-1:-1;;;;;10540:21:0;;10532:68;;;;-1:-1:-1;;;10532:68:0;;12866:2:1;10532:68:0;;;12848:21:1;12905:2;12885:18;;;12878:30;12944:34;12924:18;;;12917:62;13015:4;12995:18;;;12988:32;13037:19;;10532:68:0;12664:398:1;10532:68:0;-1:-1:-1;;;;;10613:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10665:32;;964:25:1;;;10665:32:0;;937:18:1;10665:32:0;;;;;;;10325:380;;;:::o;26667:2403::-;-1:-1:-1;;;;;26799:18:0;;26791:68;;;;-1:-1:-1;;;26791:68:0;;13269:2:1;26791:68:0;;;13251:21:1;13308:2;13288:18;;;13281:30;13347:34;13327:18;;;13320:62;13418:7;13398:18;;;13391:35;13443:19;;26791:68:0;13067:401:1;26791:68:0;-1:-1:-1;;;;;26878:16:0;;26870:64;;;;-1:-1:-1;;;26870:64:0;;13675:2:1;26870:64:0;;;13657:21:1;13714:2;13694:18;;;13687:30;13753:34;13733:18;;;13726:62;13824:5;13804:18;;;13797:33;13847:19;;26870:64:0;13473:399:1;26870:64:0;26952:16;;;;26947:187;;-1:-1:-1;;;;;27011:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27040:23:0;;;;;;:19;:23;;;;;;;;27011:52;26985:137;;;;-1:-1:-1;;;26985:137:0;;14079:2:1;26985:137:0;;;14061:21:1;14118:2;14098:18;;;14091:30;14157:25;14137:18;;;14130:53;14200:18;;26985:137:0;13877:347:1;26985:137:0;27150:6;27160:1;27150:11;27146:93;;27178:28;27194:4;27200:2;27204:1;27178:15;:28::i;:::-;26667:2403;;;:::o;27146:93::-;27300:4;27251:28;6502:18;;;;;;;;;;;27358;;27334:42;;;;;;;27393:20;;-1:-1:-1;27405:8:0;;;;;;;27404:9;27393:20;:35;;;;-1:-1:-1;27417:11:0;;;;27393:35;:58;;;;-1:-1:-1;27438:13:0;;-1:-1:-1;;;;;27432:19:0;;;27438:13;;27432:19;27393:58;27389:874;;;27468:8;:15;;;;;;;;27536;;27519:14;;27468:15;;27519:32;;;:::i;:::-;27500:51;;27566:24;27632:20;;27593:19;;:59;;;;:::i;:::-;27566:86;;27667:22;27712:18;;27692:17;;:38;;;;:::i;:::-;27667:63;-1:-1:-1;27751:20:0;;27747:233;;27792:25;27885:8;27821:60;27865:16;27821:20;:60;:::i;:::-;27820:73;;;;:::i;:::-;27946:17;;27792:101;;-1:-1:-1;27912:52:0;;27792:101;;-1:-1:-1;;;;;27946:17:0;27912:14;:52::i;:::-;27773:207;27747:233;28000:18;;27996:223;;28039:23;28128:8;28066:58;28110:14;28066:20;:58;:::i;:::-;28065:71;;;;:::i;:::-;28187:15;;28039:97;;-1:-1:-1;28155:48:0;;28039:97;;-1:-1:-1;;;;;28187:15:0;28155:14;:48::i;:::-;28020:199;27996:223;-1:-1:-1;;28235:8:0;:16;;;;;;-1:-1:-1;27389:874:0;28291:8;;-1:-1:-1;;;;;28316:25:0;;28275:12;28316:25;;;:19;:25;;;;;;28291:8;;;;;;;28290:9;;28316:25;;:52;;-1:-1:-1;;;;;;28345:23:0;;;;;;:19;:23;;;;;;;;28316:52;28312:100;;;-1:-1:-1;28395:5:0;28312:100;28428:7;28424:593;;;28491:13;;28452:12;;-1:-1:-1;;;;;28491:13:0;;;28483:21;;;;28479:393;;28629:3;28586:17;;28564:19;;:39;;;;:::i;:::-;28554:50;;:6;:50;:::i;:::-;28553:79;;;;:::i;:::-;28525:107;;28479:393;;;28664:13;;-1:-1:-1;;;;;28664:13:0;;;28658:19;;;;28654:218;;28804:3;28760:18;;28737:20;;:41;;;;:::i;28654:218::-;-1:-1:-1;28855:1:0;28654:218;28886:14;28896:4;28886:14;;:::i;:::-;;-1:-1:-1;28919:8:0;;28915:91;;28948:42;28964:4;28978;28985;28948:15;:42::i;:::-;28437:580;28424:593;29029:33;29045:4;29051:2;29055:6;29029:15;:33::i;:::-;26780:2290;;;26667:2403;;;:::o;8541:770::-;-1:-1:-1;;;;;8681:20:0;;8673:70;;;;-1:-1:-1;;;8673:70:0;;13269:2:1;8673:70:0;;;13251:21:1;13308:2;13288:18;;;13281:30;13347:34;13327:18;;;13320:62;13418:7;13398:18;;;13391:35;13443:19;;8673:70:0;13067:401:1;8673:70:0;-1:-1:-1;;;;;8762:23:0;;8754:71;;;;-1:-1:-1;;;8754:71:0;;13675:2:1;8754:71:0;;;13657:21:1;13714:2;13694:18;;;13687:30;13753:34;13733:18;;;13726:62;13824:5;13804:18;;;13797:33;13847:19;;8754:71:0;13473:399:1;8754:71:0;-1:-1:-1;;;;;8922:17:0;;8898:21;8922:17;;;;;;;;;;;8972:23;;;;8950:111;;;;-1:-1:-1;;;8950:111:0;;14737:2:1;8950:111:0;;;14719:21:1;14776:2;14756:18;;;14749:30;14815:34;14795:18;;;14788:62;14886:8;14866:18;;;14859:36;14912:19;;8950:111:0;14535:402:1;8950:111:0;-1:-1:-1;;;;;9097:17:0;;;:9;:17;;;;;;;;;;;9117:22;;;9097:42;;9161:20;;;;;;;;:30;;9133:6;;9097:9;9161:30;;9133:6;;9161:30;:::i;:::-;;;;;;;;9226:9;-1:-1:-1;;;;;9209:35:0;9218:6;-1:-1:-1;;;;;9209:35:0;;9237:6;9209:35;;;;964:25:1;;952:2;937:18;;818:177;9209:35:0;;;;;;;;9257:46;26667:2403;29078:492;29182:16;;;29196:1;29182:16;;;;;;;;29158:21;;29182:16;;;;;;;;;;-1:-1:-1;29182:16:0;29158:40;;29227:4;29209;29214:1;29209:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29209:23:0;;;:7;;;;;;;;;;:23;;;;29253:15;;:22;;;;;;;;:15;;;;;:20;;:22;;;;;29209:7;;29253:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29243:4;29248:1;29243:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29243:32:0;;;:7;;;;;;;;;:32;29288:15;;:229;;;;;:15;;;:69;;:229;;29372:11;;29288:15;;29442:4;;29469:6;;29491:15;;29288:229;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29535:27;29550:11;29535:27;;;;964:25:1;;952:2;937:18;;818:177;29535:27:0;;;;;;;;29147:423;29078:492;;:::o;206:607:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;804:2;734:66;729:2;721:6;717:15;713:88;702:9;698:104;694:113;686:121;;;;206:607;;;;:::o;1000:154::-;-1:-1:-1;;;;;1079:5:1;1075:54;1068:5;1065:65;1055:93;;1144:1;1141;1134:12;1159:315;1227:6;1235;1288:2;1276:9;1267:7;1263:23;1259:32;1256:52;;;1304:1;1301;1294:12;1256:52;1343:9;1330:23;1362:31;1387:5;1362:31;:::i;:::-;1412:5;1464:2;1449:18;;;;1436:32;;-1:-1:-1;;;1159:315:1:o;1737:456::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1938:9;1925:23;1957:31;1982:5;1957:31;:::i;:::-;2007:5;-1:-1:-1;2064:2:1;2049:18;;2036:32;2077:33;2036:32;2077:33;:::i;:::-;1737:456;;2129:7;;-1:-1:-1;;;2183:2:1;2168:18;;;;2155:32;;1737:456::o;2618:247::-;2677:6;2730:2;2718:9;2709:7;2705:23;2701:32;2698:52;;;2746:1;2743;2736:12;2698:52;2785:9;2772:23;2804:31;2829:5;2804:31;:::i;:::-;2854:5;2618:247;-1:-1:-1;;;2618:247:1:o;2870:385::-;2956:6;2964;2972;2980;3033:3;3021:9;3012:7;3008:23;3004:33;3001:53;;;3050:1;3047;3040:12;3001:53;-1:-1:-1;;3073:23:1;;;3143:2;3128:18;;3115:32;;-1:-1:-1;3194:2:1;3179:18;;3166:32;;3245:2;3230:18;3217:32;;-1:-1:-1;2870:385:1;-1:-1:-1;2870:385:1:o;3260:180::-;3319:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:52;;;3388:1;3385;3378:12;3340:52;-1:-1:-1;3411:23:1;;3260:180;-1:-1:-1;3260:180:1:o;3445:118::-;3531:5;3524:13;3517:21;3510:5;3507:32;3497:60;;3553:1;3550;3543:12;3568:382;3633:6;3641;3694:2;3682:9;3673:7;3669:23;3665:32;3662:52;;;3710:1;3707;3700:12;3662:52;3749:9;3736:23;3768:31;3793:5;3768:31;:::i;:::-;3818:5;-1:-1:-1;3875:2:1;3860:18;;3847:32;3888:30;3847:32;3888:30;:::i;:::-;3937:7;3927:17;;;3568:382;;;;;:::o;3955:388::-;4023:6;4031;4084:2;4072:9;4063:7;4059:23;4055:32;4052:52;;;4100:1;4097;4090:12;4052:52;4139:9;4126:23;4158:31;4183:5;4158:31;:::i;:::-;4208:5;-1:-1:-1;4265:2:1;4250:18;;4237:32;4278:33;4237:32;4278:33;:::i;4348:241::-;4404:6;4457:2;4445:9;4436:7;4432:23;4428:32;4425:52;;;4473:1;4470;4463:12;4425:52;4512:9;4499:23;4531:28;4553:5;4531:28;:::i;4594:437::-;4673:1;4669:12;;;;4716;;;4737:61;;4791:4;4783:6;4779:17;4769:27;;4737:61;4844:2;4836:6;4833:14;4813:18;4810:38;4807:218;;4881:77;4878:1;4871:88;4982:4;4979:1;4972:15;5010:4;5007:1;5000:15;4807:218;;4594:437;;;:::o;6158:184::-;6210:77;6207:1;6200:88;6307:4;6304:1;6297:15;6331:4;6328:1;6321:15;6347:125;6412:9;;;6433:10;;;6430:36;;;6446:18;;:::i;9225:274::-;9265:1;9291;9281:189;;9326:77;9323:1;9316:88;9427:4;9424:1;9417:15;9455:4;9452:1;9445:15;9281:189;-1:-1:-1;9484:9:1;;9225:274::o;11518:184::-;11588:6;11641:2;11629:9;11620:7;11616:23;11612:32;11609:52;;;11657:1;11654;11647:12;11609:52;-1:-1:-1;11680:16:1;;11518:184;-1:-1:-1;11518:184:1:o;12009:245::-;12076:6;12129:2;12117:9;12108:7;12104:23;12100:32;12097:52;;;12145:1;12142;12135:12;12097:52;12177:9;12171:16;12196:28;12218:5;12196:28;:::i;14229:168::-;14302:9;;;14333;;14350:15;;;14344:22;;14330:37;14320:71;;14371:18;;:::i;14402:128::-;14469:9;;;14490:11;;;14487:37;;;14504:18;;:::i;15131:184::-;15183:77;15180:1;15173:88;15280:4;15277:1;15270:15;15304:4;15301:1;15294:15;15320:251;15390:6;15443:2;15431:9;15422:7;15418:23;15414:32;15411:52;;;15459:1;15456;15449:12;15411:52;15491:9;15485:16;15510:31;15535:5;15510:31;:::i;15576:1026::-;15838:4;15886:3;15875:9;15871:19;15917:6;15906:9;15899:25;15943:2;15981:6;15976:2;15965:9;15961:18;15954:34;16024:3;16019:2;16008:9;16004:18;15997:31;16048:6;16083;16077:13;16114:6;16106;16099:22;16152:3;16141:9;16137:19;16130:26;;16191:2;16183:6;16179:15;16165:29;;16212:1;16222:218;16236:6;16233:1;16230:13;16222:218;;;16301:13;;-1:-1:-1;;;;;16297:62:1;16285:75;;16415:15;;;;16380:12;;;;16258:1;16251:9;16222:218;;;-1:-1:-1;;;;;;;16496:55:1;;;;16491:2;16476:18;;16469:83;-1:-1:-1;;;16583:3:1;16568:19;16561:35;16457:3;15576:1026;-1:-1:-1;;;15576:1026:1:o

Swarm Source

ipfs://a3c0ca225ad7e15998cbd2c7c147c1cc24343358acf600a529690d48c9078c01
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.