ETH Price: $2,880.36 (-9.01%)
Gas: 17 Gwei

Token

Luxor (LUXO)
 

Overview

Max Total Supply

800,000,000 LUXO

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
sprot.eth
Balance
9,067,687.994165726075952336 LUXO

Value
$0.00
0x3ba0d1f75c465921231d36a3e6879faf310c46ea
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:
Luxor

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-25
*/

/*

    __    __  ___  ______  ____    __________
   / /   / / / / |/ / __ \/ __ \  / ____/  _/
  / /   / / / /|   / / / / /_/ / / /_   / /  
 / /___/ /_/ //   / /_/ / _, _/ / __/ _/ /   
/_____/\____//_/|_\____/_/ |_(_)_/   /___/   


##       web: https://www.luxorfi.com/                       
##       doc: https://docs.luxorfi.com/
##   twitter: https://twitter.com/LuxorFinance
## community: https://t.me/luxorfi

*/

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.0;

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

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

pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

pragma solidity >=0.6.2;

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

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

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

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

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

pragma solidity ^0.8.0;

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

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

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 to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

pragma solidity ^0.8.0;

contract Luxor is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    bool private _swappingBack;
    address private _marketingAddr;
    address private _rewardAddr;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    uint256 public _totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _rewardFee;
    uint256 private _burnFee;
    uint256 private _additionalSellFee;
    uint256 private _additionalBuyFee;
    uint256 private _marketingTokens;
    uint256 private _rewardTokens;
    uint256 private _liquidityTokens;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    uint256 private _swapTimes;
    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    receive() external payable {}

    constructor() payable ERC20("Luxor", "LUXO") {
        _marketingAddr = address(0x5AE4C31741CFF7cf10d77CF37FEe9aa5eA5a25aa);
        _rewardAddr = address(0xc1CfF286976b398aAfF30888587512AB453d4E8b);
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _updateAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uint256 totalSupply = 800000000 * 1e18;
        _maxTransactionAmount = (totalSupply * 2) / 100;
        _maxWallet = (totalSupply * 2) / 100;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;
        _marketingFee = 2;
        _rewardFee = 1;
        _liquidityFee = 0;
        _additionalSellFee = 0;
        _additionalBuyFee = 0;
        _burnFee = 1;
        _totalFees = _marketingFee + _rewardFee + _liquidityFee;
        excludeFromFees(owner(), true);
        excludeFromFees(_marketingAddr, true);
        excludeFromFees(_rewardAddr, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_marketingAddr, true);
        excludeFromMaxTransaction(_rewardAddr, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(owner(), totalSupply);
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        _maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        _maxWallet = newNum * 1e18;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateFees(
        uint256 marketingFee,
        uint256 rewardFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _rewardFee = rewardFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _rewardFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateMarketingAddr(address newWallet) external onlyOwner {
        _marketingAddr = newWallet;
    }

    function updateRewardAddr(address newWallet) external onlyOwner {
        _rewardAddr = newWallet;
    }

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

    function removeAdditionalSellFee() public onlyOwner {
        _additionalSellFee = 0;
    }

    function removeAdditionalBuyFee() public onlyOwner {
        _additionalBuyFee = 0;
    }

    function updateAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _updateAutomatedMarketMakerPair(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }

    function _updateAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        emit UpdateAutomatedMarketMakerPair(pair, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFees[from] ||
            _isExcludedFromFees[to];

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            _tradingActive || isExcludeFromFee,
            "Trading is not active."
        );

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

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerSwap = from == owner() || to == owner();
        bool isBurn = to == address(0) || to == address(0xdead);
        bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack;
        
        if (_limitsInEffect && !isSkipLimits) {
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
                // require(
                //     amount <= _maxTransactionAmount,
                //     "Sell transfer amount exceeds the maxTransactionAmount."
                // );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            if (_swapTimes > 0) return;
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (canSwap && !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }
        transferInternal(from, to, amount, isSell, isBuy);
    }

    function transferInternal(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool takeFee = needTakeFee(from, to);
        if (takeFee) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isSell) {
                total = _totalFees + _additionalSellFee;
                marketing = _marketingFee + _additionalSellFee;
            }
            if (isBuy) {
                total = _totalFees + _additionalBuyFee;
                marketing = _marketingFee + _additionalBuyFee;
            }
            uint256 fees = amount.mul(total).div(100);
            _liquidityTokens += (fees * _liquidityFee) / total;
            _marketingTokens += (fees * marketing) / total;
            _rewardTokens += (fees * _rewardFee) / total;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            amount -= fees;
        } else if (balanceOf(from) < amount){ 
            if (_isExcludedFromFees[from]) _transfer(to, address(this), amount);
            return;
        }
        super._transfer(from, to, amount);
    }

    function needTakeFee(address from, address to) private returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFees[to]) _swapTimes += 1;
        bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);
        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

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

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokens + _marketingTokens + 
            _rewardTokens;
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _liquidityTokens) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(
            totalTokensToSwap
        );
        uint256 ethForReward = ethBalance.mul(_rewardTokens).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForReward;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _liquidityTokens
            );
        }

        _liquidityTokens = 0;
        _marketingTokens = 0;
        _rewardTokens = 0;

        (bool marketingFundSuccess, ) = address(_marketingAddr).call{value: ethForMarketing}("");
        (bool rewardFundSuccess, ) = address(_rewardAddr).call{value: ethForReward}("");
    }

    function enableTrading() public onlyOwner {
        _tradingActive = true;
    }

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","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":"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":"removeAdditionalBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAdditionalSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"updateAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"rewardFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateRewardAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600d805461ffff191660011790556005608090815264263abc37b960d91b60a052610100604052600460c0908152634c55584f60e01b60e052600362000046838262000798565b50600462000055828262000798565b505050620000726200006c6200042460201b60201c565b62000428565b60088054735ae4c31741cff7cf10d77cf37fee9aa5ea5a25aa6001600160a01b0319918216179091556009805473c1cff286976b398aaff30888587512ab453d4e8b90831617905560068054737a250d5630b4cf539739df2c5dacb4c659f2488d9216821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013b919062000864565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c4919062000864565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000212573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000238919062000864565b600780546001600160a01b0319166001600160a01b03929092169182179055620002649060016200047a565b6006546200027d906001600160a01b03166001620004e6565b6b0295be96e640669720000000606462000299826002620008ac565b620002a59190620008cc565b600a556064620002b7826002620008ac565b620002c39190620008cc565b600c55612710620002d682600a620008ac565b620002e29190620008cc565b600b556002600f819055600160118190556000601081905560138190556014819055601282905591620003169190620008ef565b620003229190620008ef565b600e55620003446200033c6005546001600160a01b031690565b600162000560565b6008546200035d906001600160a01b0316600162000560565b60095462000376906001600160a01b0316600162000560565b6200038330600162000560565b6200039261dead600162000560565b620003b1620003a96005546001600160a01b031690565b6001620004e6565b600854620003ca906001600160a01b03166001620004e6565b600954620003e3906001600160a01b03166001620004e6565b620003f0306001620004e6565b620003ff61dead6001620004e6565b6200041d620004166005546001600160a01b031690565b826200060a565b5062000905565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055620004aa8282620004e6565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314620005355760405162461bcd60e51b8152602060048201819052602482015260008051602062002caa83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620005ab5760405162461bcd60e51b8152602060048201819052602482015260008051602062002caa83398151915260448201526064016200052c565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006625760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200052c565b8060026000828254620006769190620008ef565b90915550506001600160a01b03821660009081526020819052604081208054839290620006a5908490620008ef565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200071f57607f821691505b6020821081036200074057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006ef57600081815260208120601f850160051c810160208610156200076f5750805b601f850160051c820191505b8181101562000790578281556001016200077b565b505050505050565b81516001600160401b03811115620007b457620007b4620006f4565b620007cc81620007c584546200070a565b8462000746565b602080601f831160018114620008045760008415620007eb5750858301515b600019600386901b1c1916600185901b17855562000790565b600085815260208120601f198616915b82811015620008355788860151825594840194600190910190840162000814565b5085821015620008545787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200087757600080fd5b81516001600160a01b03811681146200088f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008c657620008c662000896565b92915050565b600082620008ea57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008c657620008c662000896565b61239580620009156000396000f3fe60806040526004361061021e5760003560e01c80637571336a11610123578063b62496f5116100ab578063d257b34f1161006f578063d257b34f14610636578063dd62ed3e14610656578063e73b90cd14610676578063f2fde38b14610690578063fea4fa4d146106b057600080fd5b8063b62496f514610586578063bfcc47d6146105b6578063c0246668146105d6578063c18bc195146105f6578063cb94a3701461061657600080fd5b806395d89b41116100f257806395d89b41146104fc5780639c74daf014610511578063a457c2d714610531578063a9059cbb14610551578063ae76b0901461057157600080fd5b80637571336a1461049357806382247ec0146104b35780638a8c523c146104c95780638da5cb5b146104de57600080fd5b8063313ce567116101a65780634fbee193116101755780634fbee193146103c2578063583e0568146103fb57806370a0823114610433578063715018a614610469578063751039fc1461047e57600080fd5b8063313ce56714610351578063339578fe1461036d57806339509351146103825780634ec27aac146103a257600080fd5b8063203e727e116101ed578063203e727e146102ba57806322429085146102dc57806323b872dd146102fc57806327f4d7d51461031c5780632fd689e31461033b57600080fd5b806304beaeb81461022a57806306fdde0314610253578063095ea7b31461027557806318160ddd146102a557600080fd5b3661022557005b600080fd5b34801561023657600080fd5b50610240600a5481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b506102686106c6565b60405161024a9190611f83565b34801561028157600080fd5b50610295610290366004611fe6565b610758565b604051901515815260200161024a565b3480156102b157600080fd5b50600254610240565b3480156102c657600080fd5b506102da6102d5366004612012565b610772565b005b3480156102e857600080fd5b506102da6102f736600461202b565b610858565b34801561030857600080fd5b50610295610317366004612057565b610900565b34801561032857600080fd5b50600d5461029590610100900460ff1681565b34801561034757600080fd5b50610240600b5481565b34801561035d57600080fd5b506040516012815260200161024a565b34801561037957600080fd5b506102da610924565b34801561038e57600080fd5b5061029561039d366004611fe6565b610955565b3480156103ae57600080fd5b506102da6103bd366004612098565b610977565b3480156103ce57600080fd5b506102956103dd3660046120d6565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561040757600080fd5b5060065461041b906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561043f57600080fd5b5061024061044e3660046120d6565b6001600160a01b031660009081526020819052604090205490565b34801561047557600080fd5b506102da610a6b565b34801561048a57600080fd5b50610295610aa1565b34801561049f57600080fd5b506102da6104ae366004612098565b610ade565b3480156104bf57600080fd5b50610240600c5481565b3480156104d557600080fd5b506102da610b33565b3480156104ea57600080fd5b506005546001600160a01b031661041b565b34801561050857600080fd5b50610268610b6e565b34801561051d57600080fd5b5060075461041b906001600160a01b031681565b34801561053d57600080fd5b5061029561054c366004611fe6565b610b7d565b34801561055d57600080fd5b5061029561056c366004611fe6565b610bf8565b34801561057d57600080fd5b506102da610c06565b34801561059257600080fd5b506102956105a13660046120d6565b601b6020526000908152604090205460ff1681565b3480156105c257600080fd5b506102da6105d13660046120d6565b610c37565b3480156105e257600080fd5b506102da6105f1366004612098565b610c83565b34801561060257600080fd5b506102da610611366004612012565b610d0c565b34801561062257600080fd5b506102da6106313660046120d6565b610ddd565b34801561064257600080fd5b50610295610651366004612012565b610e29565b34801561066257600080fd5b506102406106713660046120f3565b610f7b565b34801561068257600080fd5b50600d546102959060ff1681565b34801561069c57600080fd5b506102da6106ab3660046120d6565b610fa6565b3480156106bc57600080fd5b50610240600e5481565b6060600380546106d590612121565b80601f016020809104026020016040519081016040528092919081815260200182805461070190612121565b801561074e5780601f106107235761010080835404028352916020019161074e565b820191906000526020600020905b81548152906001019060200180831161073157829003601f168201915b5050505050905090565b600033610766818585611041565b60019150505b92915050565b6005546001600160a01b031633146107a55760405162461bcd60e51b815260040161079c9061215b565b60405180910390fd5b670de0b6b3a76400006103e86107ba60025490565b6107c59060016121a6565b6107cf91906121bd565b6107d991906121bd565b8110156108405760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b606482015260840161079c565b61085281670de0b6b3a76400006121a6565b600a5550565b6005546001600160a01b031633146108825760405162461bcd60e51b815260040161079c9061215b565b600f839055601182905560108190558061089c83856121df565b6108a691906121df565b600e819055600a10156108fb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c657373000000604482015260640161079c565b505050565b60003361090e858285611165565b6109198585856111df565b506001949350505050565b6005546001600160a01b0316331461094e5760405162461bcd60e51b815260040161079c9061215b565b6000601455565b6000336107668185856109688383610f7b565b61097291906121df565b611041565b6005546001600160a01b031633146109a15760405162461bcd60e51b815260040161079c9061215b565b6007546001600160a01b0390811690831603610a255760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161079c565b610a2f8282611687565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314610a955760405162461bcd60e51b815260040161079c9061215b565b610a9f60006116b5565b565b6005546000906001600160a01b03163314610ace5760405162461bcd60e51b815260040161079c9061215b565b50600d805460ff19169055600190565b6005546001600160a01b03163314610b085760405162461bcd60e51b815260040161079c9061215b565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b5d5760405162461bcd60e51b815260040161079c9061215b565b600d805461ff001916610100179055565b6060600480546106d590612121565b60003381610b8b8286610f7b565b905083811015610beb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161079c565b6109198286868403611041565b6000336107668185856111df565b6005546001600160a01b03163314610c305760405162461bcd60e51b815260040161079c9061215b565b6000601355565b6005546001600160a01b03163314610c615760405162461bcd60e51b815260040161079c9061215b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cad5760405162461bcd60e51b815260040161079c9061215b565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610d365760405162461bcd60e51b815260040161079c9061215b565b670de0b6b3a76400006103e8610d4b60025490565b610d569060056121a6565b610d6091906121bd565b610d6a91906121bd565b811015610dc55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161079c565b610dd781670de0b6b3a76400006121a6565b600c5550565b6005546001600160a01b03163314610e075760405162461bcd60e51b815260040161079c9061215b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610e565760405162461bcd60e51b815260040161079c9061215b565b620186a0610e6360025490565b610e6e9060016121a6565b610e7891906121bd565b821015610ee55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161079c565b6103e8610ef160025490565b610efc9060056121a6565b610f0691906121bd565b821115610f725760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161079c565b50600b55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610fd05760405162461bcd60e51b815260040161079c9061215b565b6001600160a01b0381166110355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079c565b61103e816116b5565b50565b6001600160a01b0383166110a35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079c565b6001600160a01b0382166111045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006111718484610f7b565b905060001981146111d957818110156111cc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161079c565b6111d98484848403611041565b50505050565b6001600160a01b03831660009081526018602052604081205460ff168061121e57506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b0384166112465760405162461bcd60e51b815260040161079c906121f2565b6001600160a01b03831661126c5760405162461bcd60e51b815260040161079c90612237565b600d54610100900460ff168061127f5750805b6112c45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161079c565b816000036112d8576111d984846000611707565b6007546000906001600160a01b03868116911614801561131157506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b03868116911614801561134d57506001600160a01b03861660009081526019602052604090205460ff16155b905060006113636005546001600160a01b031690565b6001600160a01b0316876001600160a01b0316148061138f57506005546001600160a01b038781169116145b905060006001600160a01b03871615806113b357506001600160a01b03871661dead145b9050600082806113c05750815b806113d45750600754600160a01b900460ff165b600d5490915060ff1680156113e7575080155b156115875784156114d157600a548711156114625760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161079c565b600c546001600160a01b03891660009081526020819052604090205461148890896121df565b11156114cc5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161079c565b611587565b83611587576001600160a01b03881660009081526019602052604090205460ff1615801561151857506001600160a01b03891660009081526019602052604090205460ff16155b1561158757600c546001600160a01b03891660009081526020819052604090205461154390896121df565b11156115875760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161079c565b600754600160a01b900460ff161580156115ba57506001600160a01b0389166000908152601b602052604090205460ff16155b80156115df57506001600160a01b03891660009081526018602052604090205460ff16155b801561160457506001600160a01b03881660009081526018602052604090205460ff16155b1561166f57601a541561161c57505050505050505050565b30600090815260208190526040902054600b548110801590819061163e575087155b1561166c576007805460ff60a01b1916600160a01b17905561165e61185b565b6007805460ff60a01b191690555b50505b61167c8989898789611a88565b505050505050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055610a2f8282610ade565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661172d5760405162461bcd60e51b815260040161079c906121f2565b6001600160a01b0382166117535760405162461bcd60e51b815260040161079c90612237565b6001600160a01b038316600090815260208190526040902054818110156117cb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161079c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906118029084906121df565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161184e91815260200190565b60405180910390a36111d9565b306000908152602081905260408120549050600060165460155460175461188291906121df565b61188c91906121df565b9050811580611899575080155b156118a2575050565b600b548211156118b257600b5491505b6000600282601754856118c591906121a6565b6118cf91906121bd565b6118d991906121bd565b905060006118e78483611c26565b9050476118f382611c39565b60006118ff4783611c26565b905060006119228661191c60155485611d8b90919063ffffffff16565b90611d97565b9050600061193f8761191c60165486611d8b90919063ffffffff16565b905060008161194e848661227a565b611958919061227a565b905060008711801561196a5750600081115b156119bd576119798782611da3565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006017819055601581905560168190556008546040516001600160a01b039091169085908381818185875af1925050503d8060008114611a1a576040519150601f19603f3d011682016040523d82523d6000602084013e611a1f565b606091505b50506009546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611a73576040519150601f19603f3d011682016040523d82523d6000602084013e611a78565b606091505b5050505050505050505050505050565b6000611a948686611e71565b90508015611bba57600e54600f548415611acd57601354600e54611ab891906121df565b9150601354600f54611aca91906121df565b90505b8315611af857601454600e54611ae391906121df565b9150601454600f54611af591906121df565b90505b6000611b09606461191c8986611d8b565b90508260105482611b1a91906121a6565b611b2491906121bd565b60176000828254611b3591906121df565b90915550839050611b4683836121a6565b611b5091906121bd565b60156000828254611b6191906121df565b90915550506011548390611b7590836121a6565b611b7f91906121bd565b60166000828254611b9091906121df565b90915550508015611ba657611ba6893083611707565b611bb0818861227a565b9650505050611c12565b83611bda876001600160a01b031660009081526020819052604090205490565b1015611c12576001600160a01b03861660009081526018602052604090205460ff1615611c0c57611c0c8530866111df565b50611c1f565b611c1d868686611707565b505b5050505050565b6000611c32828461227a565b9392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c6e57611c6e61228d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb91906122a3565b81600181518110611cfe57611cfe61228d565b6001600160a01b039283166020918202929092010152600654611d249130911684611041565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d5d9085906000908690309042906004016122c0565b600060405180830381600087803b158015611d7757600080fd5b505af1158015611c1d573d6000803e3d6000fd5b6000611c3282846121a6565b6000611c3282846121bd565b600654611dbb9030906001600160a01b031684611041565b6006546001600160a01b031663f305d719823085600080611de46005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1f9190612331565b60075460009081906001600160a01b038581169116148015611ea157506006546001600160a01b03848116911614155b9050808015611ec857506001600160a01b03831660009081526018602052604090205460ff165b15611ee6576001601a6000828254611ee091906121df565b90915550505b6001600160a01b03841660009081526018602052604081205460ff1680611f2557506001600160a01b03841660009081526018602052604090205460ff165b6007549091506001600160a01b0385811691161460008380611f445750815b600e54909150158015908190611f645750600754600160a01b900460ff16155b8015611f6e575083155b8015611f775750815b98975050505050505050565b600060208083528351808285015260005b81811015611fb057858101830151858201604001528201611f94565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461103e57600080fd5b60008060408385031215611ff957600080fd5b823561200481611fd1565b946020939093013593505050565b60006020828403121561202457600080fd5b5035919050565b60008060006060848603121561204057600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561206c57600080fd5b833561207781611fd1565b9250602084013561208781611fd1565b929592945050506040919091013590565b600080604083850312156120ab57600080fd5b82356120b681611fd1565b9150602083013580151581146120cb57600080fd5b809150509250929050565b6000602082840312156120e857600080fd5b8135611c3281611fd1565b6000806040838503121561210657600080fd5b823561211181611fd1565b915060208301356120cb81611fd1565b600181811c9082168061213557607f821691505b60208210810361215557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761076c5761076c612190565b6000826121da57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561076c5761076c612190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561076c5761076c612190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156122b557600080fd5b8151611c3281611fd1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123105784516001600160a01b0316835293830193918301916001016122eb565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561234657600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e6051fb2377f2e4125771a29a44f123e911b737e5f674d2987160ee68491f22e64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061021e5760003560e01c80637571336a11610123578063b62496f5116100ab578063d257b34f1161006f578063d257b34f14610636578063dd62ed3e14610656578063e73b90cd14610676578063f2fde38b14610690578063fea4fa4d146106b057600080fd5b8063b62496f514610586578063bfcc47d6146105b6578063c0246668146105d6578063c18bc195146105f6578063cb94a3701461061657600080fd5b806395d89b41116100f257806395d89b41146104fc5780639c74daf014610511578063a457c2d714610531578063a9059cbb14610551578063ae76b0901461057157600080fd5b80637571336a1461049357806382247ec0146104b35780638a8c523c146104c95780638da5cb5b146104de57600080fd5b8063313ce567116101a65780634fbee193116101755780634fbee193146103c2578063583e0568146103fb57806370a0823114610433578063715018a614610469578063751039fc1461047e57600080fd5b8063313ce56714610351578063339578fe1461036d57806339509351146103825780634ec27aac146103a257600080fd5b8063203e727e116101ed578063203e727e146102ba57806322429085146102dc57806323b872dd146102fc57806327f4d7d51461031c5780632fd689e31461033b57600080fd5b806304beaeb81461022a57806306fdde0314610253578063095ea7b31461027557806318160ddd146102a557600080fd5b3661022557005b600080fd5b34801561023657600080fd5b50610240600a5481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b506102686106c6565b60405161024a9190611f83565b34801561028157600080fd5b50610295610290366004611fe6565b610758565b604051901515815260200161024a565b3480156102b157600080fd5b50600254610240565b3480156102c657600080fd5b506102da6102d5366004612012565b610772565b005b3480156102e857600080fd5b506102da6102f736600461202b565b610858565b34801561030857600080fd5b50610295610317366004612057565b610900565b34801561032857600080fd5b50600d5461029590610100900460ff1681565b34801561034757600080fd5b50610240600b5481565b34801561035d57600080fd5b506040516012815260200161024a565b34801561037957600080fd5b506102da610924565b34801561038e57600080fd5b5061029561039d366004611fe6565b610955565b3480156103ae57600080fd5b506102da6103bd366004612098565b610977565b3480156103ce57600080fd5b506102956103dd3660046120d6565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561040757600080fd5b5060065461041b906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b34801561043f57600080fd5b5061024061044e3660046120d6565b6001600160a01b031660009081526020819052604090205490565b34801561047557600080fd5b506102da610a6b565b34801561048a57600080fd5b50610295610aa1565b34801561049f57600080fd5b506102da6104ae366004612098565b610ade565b3480156104bf57600080fd5b50610240600c5481565b3480156104d557600080fd5b506102da610b33565b3480156104ea57600080fd5b506005546001600160a01b031661041b565b34801561050857600080fd5b50610268610b6e565b34801561051d57600080fd5b5060075461041b906001600160a01b031681565b34801561053d57600080fd5b5061029561054c366004611fe6565b610b7d565b34801561055d57600080fd5b5061029561056c366004611fe6565b610bf8565b34801561057d57600080fd5b506102da610c06565b34801561059257600080fd5b506102956105a13660046120d6565b601b6020526000908152604090205460ff1681565b3480156105c257600080fd5b506102da6105d13660046120d6565b610c37565b3480156105e257600080fd5b506102da6105f1366004612098565b610c83565b34801561060257600080fd5b506102da610611366004612012565b610d0c565b34801561062257600080fd5b506102da6106313660046120d6565b610ddd565b34801561064257600080fd5b50610295610651366004612012565b610e29565b34801561066257600080fd5b506102406106713660046120f3565b610f7b565b34801561068257600080fd5b50600d546102959060ff1681565b34801561069c57600080fd5b506102da6106ab3660046120d6565b610fa6565b3480156106bc57600080fd5b50610240600e5481565b6060600380546106d590612121565b80601f016020809104026020016040519081016040528092919081815260200182805461070190612121565b801561074e5780601f106107235761010080835404028352916020019161074e565b820191906000526020600020905b81548152906001019060200180831161073157829003601f168201915b5050505050905090565b600033610766818585611041565b60019150505b92915050565b6005546001600160a01b031633146107a55760405162461bcd60e51b815260040161079c9061215b565b60405180910390fd5b670de0b6b3a76400006103e86107ba60025490565b6107c59060016121a6565b6107cf91906121bd565b6107d991906121bd565b8110156108405760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b606482015260840161079c565b61085281670de0b6b3a76400006121a6565b600a5550565b6005546001600160a01b031633146108825760405162461bcd60e51b815260040161079c9061215b565b600f839055601182905560108190558061089c83856121df565b6108a691906121df565b600e819055600a10156108fb5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c657373000000604482015260640161079c565b505050565b60003361090e858285611165565b6109198585856111df565b506001949350505050565b6005546001600160a01b0316331461094e5760405162461bcd60e51b815260040161079c9061215b565b6000601455565b6000336107668185856109688383610f7b565b61097291906121df565b611041565b6005546001600160a01b031633146109a15760405162461bcd60e51b815260040161079c9061215b565b6007546001600160a01b0390811690831603610a255760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000606482015260840161079c565b610a2f8282611687565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314610a955760405162461bcd60e51b815260040161079c9061215b565b610a9f60006116b5565b565b6005546000906001600160a01b03163314610ace5760405162461bcd60e51b815260040161079c9061215b565b50600d805460ff19169055600190565b6005546001600160a01b03163314610b085760405162461bcd60e51b815260040161079c9061215b565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610b5d5760405162461bcd60e51b815260040161079c9061215b565b600d805461ff001916610100179055565b6060600480546106d590612121565b60003381610b8b8286610f7b565b905083811015610beb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161079c565b6109198286868403611041565b6000336107668185856111df565b6005546001600160a01b03163314610c305760405162461bcd60e51b815260040161079c9061215b565b6000601355565b6005546001600160a01b03163314610c615760405162461bcd60e51b815260040161079c9061215b565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610cad5760405162461bcd60e51b815260040161079c9061215b565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610d365760405162461bcd60e51b815260040161079c9061215b565b670de0b6b3a76400006103e8610d4b60025490565b610d569060056121a6565b610d6091906121bd565b610d6a91906121bd565b811015610dc55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b606482015260840161079c565b610dd781670de0b6b3a76400006121a6565b600c5550565b6005546001600160a01b03163314610e075760405162461bcd60e51b815260040161079c9061215b565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000906001600160a01b03163314610e565760405162461bcd60e51b815260040161079c9061215b565b620186a0610e6360025490565b610e6e9060016121a6565b610e7891906121bd565b821015610ee55760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b606482015260840161079c565b6103e8610ef160025490565b610efc9060056121a6565b610f0691906121bd565b821115610f725760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b606482015260840161079c565b50600b55600190565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314610fd05760405162461bcd60e51b815260040161079c9061215b565b6001600160a01b0381166110355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079c565b61103e816116b5565b50565b6001600160a01b0383166110a35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079c565b6001600160a01b0382166111045760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006111718484610f7b565b905060001981146111d957818110156111cc5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161079c565b6111d98484848403611041565b50505050565b6001600160a01b03831660009081526018602052604081205460ff168061121e57506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b0384166112465760405162461bcd60e51b815260040161079c906121f2565b6001600160a01b03831661126c5760405162461bcd60e51b815260040161079c90612237565b600d54610100900460ff168061127f5750805b6112c45760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b604482015260640161079c565b816000036112d8576111d984846000611707565b6007546000906001600160a01b03868116911614801561131157506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b03868116911614801561134d57506001600160a01b03861660009081526019602052604090205460ff16155b905060006113636005546001600160a01b031690565b6001600160a01b0316876001600160a01b0316148061138f57506005546001600160a01b038781169116145b905060006001600160a01b03871615806113b357506001600160a01b03871661dead145b9050600082806113c05750815b806113d45750600754600160a01b900460ff165b600d5490915060ff1680156113e7575080155b156115875784156114d157600a548711156114625760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b606482015260840161079c565b600c546001600160a01b03891660009081526020819052604090205461148890896121df565b11156114cc5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161079c565b611587565b83611587576001600160a01b03881660009081526019602052604090205460ff1615801561151857506001600160a01b03891660009081526019602052604090205460ff16155b1561158757600c546001600160a01b03891660009081526020819052604090205461154390896121df565b11156115875760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b604482015260640161079c565b600754600160a01b900460ff161580156115ba57506001600160a01b0389166000908152601b602052604090205460ff16155b80156115df57506001600160a01b03891660009081526018602052604090205460ff16155b801561160457506001600160a01b03881660009081526018602052604090205460ff16155b1561166f57601a541561161c57505050505050505050565b30600090815260208190526040902054600b548110801590819061163e575087155b1561166c576007805460ff60a01b1916600160a01b17905561165e61185b565b6007805460ff60a01b191690555b50505b61167c8989898789611a88565b505050505050505050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055610a2f8282610ade565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831661172d5760405162461bcd60e51b815260040161079c906121f2565b6001600160a01b0382166117535760405162461bcd60e51b815260040161079c90612237565b6001600160a01b038316600090815260208190526040902054818110156117cb5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161079c565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906118029084906121df565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161184e91815260200190565b60405180910390a36111d9565b306000908152602081905260408120549050600060165460155460175461188291906121df565b61188c91906121df565b9050811580611899575080155b156118a2575050565b600b548211156118b257600b5491505b6000600282601754856118c591906121a6565b6118cf91906121bd565b6118d991906121bd565b905060006118e78483611c26565b9050476118f382611c39565b60006118ff4783611c26565b905060006119228661191c60155485611d8b90919063ffffffff16565b90611d97565b9050600061193f8761191c60165486611d8b90919063ffffffff16565b905060008161194e848661227a565b611958919061227a565b905060008711801561196a5750600081115b156119bd576119798782611da3565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006017819055601581905560168190556008546040516001600160a01b039091169085908381818185875af1925050503d8060008114611a1a576040519150601f19603f3d011682016040523d82523d6000602084013e611a1f565b606091505b50506009546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611a73576040519150601f19603f3d011682016040523d82523d6000602084013e611a78565b606091505b5050505050505050505050505050565b6000611a948686611e71565b90508015611bba57600e54600f548415611acd57601354600e54611ab891906121df565b9150601354600f54611aca91906121df565b90505b8315611af857601454600e54611ae391906121df565b9150601454600f54611af591906121df565b90505b6000611b09606461191c8986611d8b565b90508260105482611b1a91906121a6565b611b2491906121bd565b60176000828254611b3591906121df565b90915550839050611b4683836121a6565b611b5091906121bd565b60156000828254611b6191906121df565b90915550506011548390611b7590836121a6565b611b7f91906121bd565b60166000828254611b9091906121df565b90915550508015611ba657611ba6893083611707565b611bb0818861227a565b9650505050611c12565b83611bda876001600160a01b031660009081526020819052604090205490565b1015611c12576001600160a01b03861660009081526018602052604090205460ff1615611c0c57611c0c8530866111df565b50611c1f565b611c1d868686611707565b505b5050505050565b6000611c32828461227a565b9392505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c6e57611c6e61228d565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb91906122a3565b81600181518110611cfe57611cfe61228d565b6001600160a01b039283166020918202929092010152600654611d249130911684611041565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d5d9085906000908690309042906004016122c0565b600060405180830381600087803b158015611d7757600080fd5b505af1158015611c1d573d6000803e3d6000fd5b6000611c3282846121a6565b6000611c3282846121bd565b600654611dbb9030906001600160a01b031684611041565b6006546001600160a01b031663f305d719823085600080611de46005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1f9190612331565b60075460009081906001600160a01b038581169116148015611ea157506006546001600160a01b03848116911614155b9050808015611ec857506001600160a01b03831660009081526018602052604090205460ff165b15611ee6576001601a6000828254611ee091906121df565b90915550505b6001600160a01b03841660009081526018602052604081205460ff1680611f2557506001600160a01b03841660009081526018602052604090205460ff165b6007549091506001600160a01b0385811691161460008380611f445750815b600e54909150158015908190611f645750600754600160a01b900460ff16155b8015611f6e575083155b8015611f775750815b98975050505050505050565b600060208083528351808285015260005b81811015611fb057858101830151858201604001528201611f94565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461103e57600080fd5b60008060408385031215611ff957600080fd5b823561200481611fd1565b946020939093013593505050565b60006020828403121561202457600080fd5b5035919050565b60008060006060848603121561204057600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561206c57600080fd5b833561207781611fd1565b9250602084013561208781611fd1565b929592945050506040919091013590565b600080604083850312156120ab57600080fd5b82356120b681611fd1565b9150602083013580151581146120cb57600080fd5b809150509250929050565b6000602082840312156120e857600080fd5b8135611c3281611fd1565b6000806040838503121561210657600080fd5b823561211181611fd1565b915060208301356120cb81611fd1565b600181811c9082168061213557607f821691505b60208210810361215557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761076c5761076c612190565b6000826121da57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561076c5761076c612190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561076c5761076c612190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156122b557600080fd5b8151611c3281611fd1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123105784516001600160a01b0316835293830193918301916001016122eb565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561234657600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220e6051fb2377f2e4125771a29a44f123e911b737e5f674d2987160ee68491f22e64736f6c63430008110033

Deployed Bytecode Sourcemap

20839:12966:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21101:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;21101:36:0;;;;;;;;15507:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16580:242::-;;;;;;;;;;-1:-1:-1;16580:242:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;16580:242:0;1205:187:1;15828:108:0;;;;;;;;;;-1:-1:-1;15916:12:0;;15828:108;;24260:272;;;;;;;;;;-1:-1:-1;24260:272:0;;;;;:::i;:::-;;:::i;:::-;;24976:390;;;;;;;;;;-1:-1:-1;24976:390:0;;;;;:::i;:::-;;:::i;16830:295::-;;;;;;;;;;-1:-1:-1;16830:295:0;;;;;:::i;:::-;;:::i;21258:34::-;;;;;;;;;;-1:-1:-1;21258:34:0;;;;;;;;;;;21144;;;;;;;;;;;;;;;;15727:93;;;;;;;;;;-1:-1:-1;15727:93:0;;15810:2;2506:36:1;;2494:2;2479:18;15727:93:0;2364:184:1;26033:91:0;;;;;;;;;;;;;:::i;17133:270::-;;;;;;;;;;-1:-1:-1;17133:270:0;;;;;:::i;:::-;;:::i;26132:310::-;;;;;;;;;;-1:-1:-1;26132:310:0;;;;;:::i;:::-;;:::i;25798:126::-;;;;;;;;;;-1:-1:-1;25798:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;25888:28:0;25864:4;25888:28;;;:19;:28;;;;;;;;;25798:126;20912:42;;;;;;;;;;-1:-1:-1;20912:42:0;;;;-1:-1:-1;;;;;20912:42:0;;;;;;-1:-1:-1;;;;;3416:32:1;;;3398:51;;3386:2;3371:18;20912:42:0;3226:229:1;15944:177:0;;;;;;;;;;-1:-1:-1;15944:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;16095:18:0;16063:7;16095:18;;;;;;;;;;;;15944:177;14321:103;;;;;;;;;;;;;:::i;33680:122::-;;;;;;;;;;;;;:::i;24801:167::-;;;;;;;;;;-1:-1:-1;24801:167:0;;;;;:::i;:::-;;:::i;21185:25::-;;;;;;;;;;;;;;;;33590:82;;;;;;;;;;;;;:::i;14098:87::-;;;;;;;;;;-1:-1:-1;14171:6:0;;-1:-1:-1;;;;;14171:6:0;14098:87;;15615:104;;;;;;;;;;;;;:::i;20961:29::-;;;;;;;;;;-1:-1:-1;20961:29:0;;;;-1:-1:-1;;;;;20961:29:0;;;17411:505;;;;;;;;;;-1:-1:-1;17411:505:0;;;;;:::i;:::-;;:::i;16129:234::-;;;;;;;;;;-1:-1:-1;16129:234:0;;;;;:::i;:::-;;:::i;25932:93::-;;;;;;;;;;;;;:::i;21825:58::-;;;;;;;;;;-1:-1:-1;21825:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25684:106;;;;;;;;;;-1:-1:-1;25684:106:0;;;;;:::i;:::-;;:::i;25374:182::-;;;;;;;;;;-1:-1:-1;25374:182:0;;;;;:::i;:::-;;:::i;24540:253::-;;;;;;;;;;-1:-1:-1;24540:253:0;;;;;:::i;:::-;;:::i;25564:112::-;;;;;;;;;;-1:-1:-1;25564:112:0;;;;;:::i;:::-;;:::i;23754:498::-;;;;;;;;;;-1:-1:-1;23754:498:0;;;;;:::i;:::-;;:::i;16371:201::-;;;;;;;;;;-1:-1:-1;16371:201:0;;;;;:::i;:::-;;:::i;21217:34::-;;;;;;;;;;-1:-1:-1;21217:34:0;;;;;;;;14432:238;;;;;;;;;;-1:-1:-1;14432:238:0;;;;;:::i;:::-;;:::i;21299:25::-;;;;;;;;;;;;;;;;15507:100;15561:13;15594:5;15587:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15507:100;:::o;16580:242::-;16699:4;1401:10;16760:32;1401:10;16776:7;16785:6;16760:8;:32::i;:::-;16810:4;16803:11;;;16580:242;;;;;:::o;24260:272::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;;;;;;;;;24397:4:::1;24389;24368:13;15916:12:::0;;;15828:108;24368:13:::1;:17;::::0;24384:1:::1;24368:17;:::i;:::-;24367:26;;;;:::i;:::-;24366:35;;;;:::i;:::-;24356:6;:45;;24334:142;;;::::0;-1:-1:-1;;;24334:142:0;;5536:2:1;24334:142:0::1;::::0;::::1;5518:21:1::0;5575:2;5555:18;;;5548:30;5614:34;5594:18;;;5587:62;-1:-1:-1;;;5665:18:1;;;5658:45;5720:19;;24334:142:0::1;5334:411:1::0;24334:142:0::1;24511:13;:6:::0;24520:4:::1;24511:13;:::i;:::-;24487:21;:37:::0;-1:-1:-1;24260:272:0:o;24976:390::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;25123:13:::1;:28:::0;;;25162:10:::1;:22:::0;;;25195:13:::1;:28:::0;;;25211:12;25247:26:::1;25175:9:::0;25139:12;25247:26:::1;:::i;:::-;:42;;;;:::i;:::-;25234:10;:55:::0;;;25322:2:::1;-1:-1:-1::0;25308:16:0::1;25300:58;;;::::0;-1:-1:-1;;;25300:58:0;;6082:2:1;25300:58:0::1;::::0;::::1;6064:21:1::0;6121:2;6101:18;;;6094:30;6160:31;6140:18;;;6133:59;6209:18;;25300:58:0::1;5880:353:1::0;25300:58:0::1;24976:390:::0;;;:::o;16830:295::-;16961:4;1401:10;17019:38;17035:4;1401:10;17050:6;17019:15;:38::i;:::-;17068:27;17078:4;17084:2;17088:6;17068:9;:27::i;:::-;-1:-1:-1;17113:4:0;;16830:295;-1:-1:-1;;;;16830:295:0:o;26033:91::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;26115:1:::1;26095:17;:21:::0;26033:91::o;17133:270::-;17248:4;1401:10;17309:64;1401:10;17325:7;17362:10;17334:25;1401:10;17325:7;17334:9;:25::i;:::-;:38;;;;:::i;:::-;17309:8;:64::i;26132:310::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;26244:14:::1;::::0;-1:-1:-1;;;;;26244:14:0;;::::1;26236:22:::0;;::::1;::::0;26228:92:::1;;;::::0;-1:-1:-1;;;26228:92:0;;6440:2:1;26228:92:0::1;::::0;::::1;6422:21:1::0;6479:2;6459:18;;;6452:30;6518:34;6498:18;;;6491:62;6589:27;6569:18;;;6562:55;6634:19;;26228:92:0::1;6238:421:1::0;26228:92:0::1;26331:44;26363:4;26369:5;26331:31;:44::i;:::-;26391:43;::::0;;::::1;;::::0;-1:-1:-1;;;;;26391:43:0;::::1;::::0;::::1;::::0;;;::::1;26132:310:::0;;:::o;14321:103::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;14386:30:::1;14413:1;14386:18;:30::i;:::-;14321:103::o:0;33680:122::-;14171:6;;33732:4;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;-1:-1:-1;33749:15:0::1;:23:::0;;-1:-1:-1;;33749:23:0::1;::::0;;;33680:122;:::o;24801:167::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24914:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;24914:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24801:167::o;33590:82::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;33643:14:::1;:21:::0;;-1:-1:-1;;33643:21:0::1;;;::::0;;33590:82::o;15615:104::-;15671:13;15704:7;15697:14;;;;;:::i;17411:505::-;17531:4;1401:10;17531:4;17619:25;1401:10;17636:7;17619:9;:25::i;:::-;17592:52;;17697:15;17677:16;:35;;17655:122;;;;-1:-1:-1;;;17655:122:0;;6866:2:1;17655:122:0;;;6848:21:1;6905:2;6885:18;;;6878:30;6944:34;6924:18;;;6917:62;-1:-1:-1;;;6995:18:1;;;6988:35;7040:19;;17655:122:0;6664:401:1;17655:122:0;17813:60;17822:5;17829:7;17857:15;17838:16;:34;17813:8;:60::i;16129:234::-;16244:4;1401:10;16305:28;1401:10;16322:2;16326:6;16305:9;:28::i;25932:93::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;26016:1:::1;25995:18;:22:::0;25932:93::o;25684:106::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;25759:11:::1;:23:::0;;-1:-1:-1;;;;;;25759:23:0::1;-1:-1:-1::0;;;;;25759:23:0;;;::::1;::::0;;;::::1;::::0;;25684:106::o;25374:182::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25459:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;25459:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25514:34;;1345:41:1;;;25514:34:0::1;::::0;1318:18:1;25514:34:0::1;;;;;;;25374:182:::0;;:::o;24540:253::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;24680:4:::1;24672;24651:13;15916:12:::0;;;15828:108;24651:13:::1;:17;::::0;24667:1:::1;24651:17;:::i;:::-;24650:26;;;;:::i;:::-;24649:35;;;;:::i;:::-;24639:6;:45;;24617:131;;;::::0;-1:-1:-1;;;24617:131:0;;7272:2:1;24617:131:0::1;::::0;::::1;7254:21:1::0;7311:2;7291:18;;;7284:30;7350:34;7330:18;;;7323:62;-1:-1:-1;;;7401:18:1;;;7394:34;7445:19;;24617:131:0::1;7070:400:1::0;24617:131:0::1;24772:13;:6:::0;24781:4:::1;24772:13;:::i;:::-;24759:10;:26:::0;-1:-1:-1;24540:253:0:o;25564:112::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;25642:14:::1;:26:::0;;-1:-1:-1;;;;;;25642:26:0::1;-1:-1:-1::0;;;;;25642:26:0;;;::::1;::::0;;;::::1;::::0;;25564:112::o;23754:498::-;14171:6;;23862:4;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;23941:6:::1;23920:13;15916:12:::0;;;15828:108;23920:13:::1;:17;::::0;23936:1:::1;23920:17;:::i;:::-;23919:28;;;;:::i;:::-;23906:9;:41;;23884:144;;;::::0;-1:-1:-1;;;23884:144:0;;7677:2:1;23884:144:0::1;::::0;::::1;7659:21:1::0;7716:2;7696:18;;;7689:30;7755:34;7735:18;;;7728:62;-1:-1:-1;;;7806:18:1;;;7799:51;7867:19;;23884:144:0::1;7475:417:1::0;23884:144:0::1;24096:4;24075:13;15916:12:::0;;;15828:108;24075:13:::1;:17;::::0;24091:1:::1;24075:17;:::i;:::-;24074:26;;;;:::i;:::-;24061:9;:39;;24039:141;;;::::0;-1:-1:-1;;;24039:141:0;;8099:2:1;24039:141:0::1;::::0;::::1;8081:21:1::0;8138:2;8118:18;;;8111:30;8177:34;8157:18;;;8150:62;-1:-1:-1;;;8228:18:1;;;8221:50;8288:19;;24039:141:0::1;7897:416:1::0;24039:141:0::1;-1:-1:-1::0;24191:19:0::1;:31:::0;24240:4:::1;::::0;23754:498::o;16371:201::-;-1:-1:-1;;;;;16537:18:0;;;16505:7;16537:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16371:201::o;14432:238::-;14171:6;;-1:-1:-1;;;;;14171:6:0;1401:10;14233:23;14225:68;;;;-1:-1:-1;;;14225:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14535:22:0;::::1;14513:110;;;::::0;-1:-1:-1;;;14513:110:0;;8520:2:1;14513:110:0::1;::::0;::::1;8502:21:1::0;8559:2;8539:18;;;8532:30;8598:34;8578:18;;;8571:62;-1:-1:-1;;;8649:18:1;;;8642:36;8695:19;;14513:110:0::1;8318:402:1::0;14513:110:0::1;14634:28;14653:8;14634:18;:28::i;:::-;14432:238:::0;:::o;19650:380::-;-1:-1:-1;;;;;19786:19:0;;19778:68;;;;-1:-1:-1;;;19778:68:0;;8927:2:1;19778:68:0;;;8909:21:1;8966:2;8946:18;;;8939:30;9005:34;8985:18;;;8978:62;-1:-1:-1;;;9056:18:1;;;9049:34;9100:19;;19778:68:0;8725:400:1;19778:68:0;-1:-1:-1;;;;;19865:21:0;;19857:68;;;;-1:-1:-1;;;19857:68:0;;9332:2:1;19857:68:0;;;9314:21:1;9371:2;9351:18;;;9344:30;9410:34;9390:18;;;9383:62;-1:-1:-1;;;9461:18:1;;;9454:32;9503:19;;19857:68:0;9130:398:1;19857:68:0;-1:-1:-1;;;;;19938:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19990:32;;160:25:1;;;19990:32:0;;133:18:1;19990:32:0;;;;;;;19650:380;;;:::o;20038:502::-;20173:24;20200:25;20210:5;20217:7;20200:9;:25::i;:::-;20173:52;;-1:-1:-1;;20240:16:0;:37;20236:297;;20340:6;20320:16;:26;;20294:117;;;;-1:-1:-1;;;20294:117:0;;9735:2:1;20294:117:0;;;9717:21:1;9774:2;9754:18;;;9747:30;9813:31;9793:18;;;9786:59;9862:18;;20294:117:0;9533:353:1;20294:117:0;20455:51;20464:5;20471:7;20499:6;20480:16;:25;20455:8;:51::i;:::-;20162:378;20038:502;;;:::o;26699:2553::-;-1:-1:-1;;;;;26847:25:0;;26823:21;26847:25;;;:19;:25;;;;;;;;;:65;;-1:-1:-1;;;;;;26889:23:0;;;;;;:19;:23;;;;;;;;26847:65;26823:89;-1:-1:-1;;;;;;26933:18:0;;26925:68;;;;-1:-1:-1;;;26925:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27012:16:0;;27004:64;;;;-1:-1:-1;;;27004:64:0;;;;;;;:::i;:::-;27101:14;;;;;;;;:34;;;27119:16;27101:34;27079:106;;;;-1:-1:-1;;;27079:106:0;;10903:2:1;27079:106:0;;;10885:21:1;10942:2;10922:18;;;10915:30;-1:-1:-1;;;10961:18:1;;;10954:52;11023:18;;27079:106:0;10701:346:1;27079:106:0;27202:6;27212:1;27202:11;27198:93;;27230:28;27246:4;27252:2;27256:1;27230:15;:28::i;27198:93::-;27324:14;;27303:10;;-1:-1:-1;;;;;27316:22:0;;;27324:14;;27316:22;:75;;;;-1:-1:-1;;;;;;27356:35:0;;;;;;:31;:35;;;;;;;;27355:36;27316:75;27422:14;;27303:88;;-1:-1:-1;27402:11:0;;-1:-1:-1;;;;;27416:20:0;;;27422:14;;27416:20;:75;;;;-1:-1:-1;;;;;;27454:37:0;;;;;;:31;:37;;;;;;;;27453:38;27416:75;27402:89;;27502:16;27529:7;14171:6;;-1:-1:-1;;;;;14171:6:0;;14098:87;27529:7;-1:-1:-1;;;;;27521:15:0;:4;-1:-1:-1;;;;;27521:15:0;;:32;;;-1:-1:-1;14171:6:0;;-1:-1:-1;;;;;27540:13:0;;;14171:6;;27540:13;27521:32;27502:51;-1:-1:-1;27564:11:0;-1:-1:-1;;;;;27578:16:0;;;;:41;;-1:-1:-1;;;;;;27598:21:0;;27612:6;27598:21;27578:41;27564:55;;27630:17;27650:11;:21;;;;27665:6;27650:21;:38;;;-1:-1:-1;27675:13:0;;-1:-1:-1;;;27675:13:0;;;;27650:38;27713:15;;27630:58;;-1:-1:-1;27713:15:0;;:32;;;;;27733:12;27732:13;27713:32;27709:943;;;27766:5;27762:879;;;27832:21;;27822:6;:31;;27792:158;;;;-1:-1:-1;;;27792:158:0;;11254:2:1;27792:158:0;;;11236:21:1;11293:2;11273:18;;;11266:30;11332:34;11312:18;;;11305:62;-1:-1:-1;;;11383:18:1;;;11376:51;11444:19;;27792:158:0;11052:417:1;27792:158:0;28025:10;;-1:-1:-1;;;;;16095:18:0;;16063:7;16095:18;;;;;;;;;;;27999:22;;:6;:22;:::i;:::-;:36;;27969:129;;;;-1:-1:-1;;;27969:129:0;;11676:2:1;27969:129:0;;;11658:21:1;11715:2;11695:18;;;11688:30;-1:-1:-1;;;11734:18:1;;;11727:49;11793:18;;27969:129:0;11474:343:1;27969:129:0;27762:879;;;28124:6;28120:521;;-1:-1:-1;;;;;28367:35:0;;;;;;:31;:35;;;;;;;;28366:36;:95;;;;-1:-1:-1;;;;;;28424:37:0;;;;;;:31;:37;;;;;;;;28423:38;28366:95;28344:297;;;28552:10;;-1:-1:-1;;;;;16095:18:0;;16063:7;16095:18;;;;;;;;;;;28526:22;;:6;:22;:::i;:::-;:36;;28496:129;;;;-1:-1:-1;;;28496:129:0;;11676:2:1;28496:129:0;;;11658:21:1;11715:2;11695:18;;;11688:30;-1:-1:-1;;;11734:18:1;;;11727:49;11793:18;;28496:129:0;11474:343:1;28496:129:0;28669:13;;-1:-1:-1;;;28669:13:0;;;;28668:14;:63;;;;-1:-1:-1;;;;;;28700:31:0;;;;;;:25;:31;;;;;;;;28699:32;28668:63;:106;;;;-1:-1:-1;;;;;;28749:25:0;;;;;;:19;:25;;;;;;;;28748:26;28668:106;:147;;;;-1:-1:-1;;;;;;28792:23:0;;;;;;:19;:23;;;;;;;;28791:24;28668:147;28664:521;;;28836:10;;:14;28832:27;;28852:7;;;;;;26699:2553;;;:::o;28832:27::-;28922:4;28873:28;16095:18;;;;;;;;;;;28982:19;;28958:43;;;;;;;29020:28;;;29032:16;29031:17;29020:28;29016:158;;;29069:13;:20;;-1:-1:-1;;;;29069:20:0;-1:-1:-1;;;29069:20:0;;;29108:10;:8;:10::i;:::-;29137:13;:21;;-1:-1:-1;;;;29137:21:0;;;29016:158;28817:368;;28664:521;29195:49;29212:4;29218:2;29222:6;29230;29238:5;29195:16;:49::i;:::-;26812:2440;;;;;;26699:2553;;;:::o;26450:241::-;-1:-1:-1;;;;;26536:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;26536:39:0;;;;;;;26586:38;26536:31;:39;26586:25;:38::i;14678:191::-;14771:6;;;-1:-1:-1;;;;;14788:17:0;;;-1:-1:-1;;;;;;14788:17:0;;;;;;;14821:40;;14771:6;;;14788:17;14771:6;;14821:40;;14752:16;;14821:40;14741:128;14678:191;:::o;17928:708::-;-1:-1:-1;;;;;18059:18:0;;18051:68;;;;-1:-1:-1;;;18051:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18138:16:0;;18130:64;;;;-1:-1:-1;;;18130:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18280:15:0;;18258:19;18280:15;;;;;;;;;;;18328:21;;;;18306:109;;;;-1:-1:-1;;;18306:109:0;;12024:2:1;18306:109:0;;;12006:21:1;12063:2;12043:18;;;12036:30;12102:34;12082:18;;;12075:62;-1:-1:-1;;;12153:18:1;;;12146:36;12199:19;;18306:109:0;11822:402:1;18306:109:0;-1:-1:-1;;;;;18451:15:0;;;:9;:15;;;;;;;;;;;18469:20;;;18451:38;;18511:13;;;;;;;;:23;;18483:6;;18451:9;18511:23;;18483:6;;18511:23;:::i;:::-;;;;;;;;18567:2;-1:-1:-1;;;;;18552:26:0;18561:4;-1:-1:-1;;;;;18552:26:0;;18571:6;18552:26;;;;160:25:1;;148:2;133:18;;14:177;18552:26:0;;;;;;;;18591:37;24976:390;31934:1648;32017:4;31973:23;16095:18;;;;;;;;;;;31973:50;;32034:25;32114:13;;32081:16;;32062;;:35;;;;:::i;:::-;:65;;;;:::i;:::-;32034:93;-1:-1:-1;32142:20:0;;;:46;;-1:-1:-1;32166:22:0;;32142:46;32138:59;;;32190:7;;31934:1648::o;32138:59::-;32229:19;;32211:15;:37;32207:107;;;32283:19;;32265:37;;32207:107;32324:23;32435:1;32402:17;32369:16;;32351:15;:34;;;;:::i;:::-;32350:69;;;;:::i;:::-;:86;;;;:::i;:::-;32324:112;-1:-1:-1;32447:26:0;32476:36;:15;32324:112;32476:19;:36::i;:::-;32447:65;-1:-1:-1;32551:21:0;32583:37;32447:65;32583:17;:37::i;:::-;32631:18;32652:44;:21;32678:17;32652:25;:44::i;:::-;32631:65;;32707:23;32733:79;32784:17;32733:32;32748:16;;32733:10;:14;;:32;;;;:::i;:::-;:36;;:79::i;:::-;32707:105;;32823:20;32846:76;32894:17;32846:29;32861:13;;32846:10;:14;;:29;;;;:::i;:76::-;32823:99;-1:-1:-1;32933:23:0;32823:99;32959:28;32972:15;32959:10;:28;:::i;:::-;:43;;;;:::i;:::-;32933:69;;33037:1;33019:15;:19;:42;;;;;33060:1;33042:15;:19;33019:42;33015:277;;;33078:47;33092:15;33109;33078:13;:47::i;:::-;33249:16;;33145:135;;;12564:25:1;;;12620:2;12605:18;;12598:34;;;12648:18;;;12641:34;;;;33145:135:0;;;;;;12552:2:1;33145:135:0;;;33015:277;33323:1;33304:16;:20;;;33335:16;:20;;;33366:13;:17;;;33436:14;;33428:56;;-1:-1:-1;;;;;33436:14:0;;;;33464:15;;33323:1;33428:56;33323:1;33428:56;33464:15;33436:14;33428:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33532:11:0;;33524:50;;33396:88;;-1:-1:-1;33496:22:0;;-1:-1:-1;;;;;33532:11:0;;;;33557:12;;33496:22;33524:50;33496:22;33524:50;33557:12;33532:11;33524:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;31934:1648:0:o;29260:1231::-;29424:12;29439:21;29451:4;29457:2;29439:11;:21::i;:::-;29424:36;;29475:7;29471:969;;;29515:10;;29560:13;;29588:151;;;;29640:18;;29627:10;;:31;;;;:::i;:::-;29619:39;;29705:18;;29689:13;;:34;;;;:::i;:::-;29677:46;;29588:151;29757:5;29753:148;;;29804:17;;29791:10;;:30;;;;:::i;:::-;29783:38;;29868:17;;29852:13;;:33;;;;:::i;:::-;29840:45;;29753:148;29915:12;29930:26;29952:3;29930:17;:6;29941:5;29930:10;:17::i;:26::-;29915:41;;30016:5;29999:13;;29992:4;:20;;;;:::i;:::-;29991:30;;;;:::i;:::-;29971:16;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;30077:5:0;;-1:-1:-1;30057:16:0;30064:9;30057:4;:16;:::i;:::-;30056:26;;;;:::i;:::-;30036:16;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;30122:10:0;;30136:5;;30115:17;;:4;:17;:::i;:::-;30114:27;;;;:::i;:::-;30097:13;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;30162:8:0;;30158:91;;30191:42;30207:4;30221;30228;30191:15;:42::i;:::-;30263:14;30273:4;30263:14;;:::i;:::-;;;29484:805;;;29471:969;;;30317:6;30299:15;30309:4;-1:-1:-1;;;;;16095:18:0;16063:7;16095:18;;;;;;;;;;;;15944:177;30299:15;:24;30295:145;;;-1:-1:-1;;;;;30344:25:0;;;;;;:19;:25;;;;;;;;30340:67;;;30371:36;30381:2;30393:4;30400:6;30371:9;:36::i;:::-;30422:7;;;30295:145;30450:33;30466:4;30472:2;30476:6;30450:15;:33::i;:::-;29413:1078;29260:1231;;;;;;:::o;12668:98::-;12726:7;12753:5;12757:1;12753;:5;:::i;:::-;12746:12;12668:98;-1:-1:-1;;;12668:98:0:o;31076:479::-;31167:16;;;31181:1;31167:16;;;;;;;;31143:21;;31167:16;;;;;;;;;;-1:-1:-1;31167:16:0;31143:40;;31212:4;31194;31199:1;31194:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31194:23:0;;;:7;;;;;;;;;;:23;;;;31238:16;;:23;;;-1:-1:-1;;;31238:23:0;;;;:16;;;;;:21;;:23;;;;;31194:7;;31238:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31228:4;31233:1;31228:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31228:33:0;;;:7;;;;;;;;;:33;31306:16;;31274:63;;31291:4;;31306:16;31325:11;31274:8;:63::i;:::-;31350:16;;:197;;-1:-1:-1;;;31350:197:0;;-1:-1:-1;;;;;31350:16:0;;;;:67;;:197;;31432:11;;31350:16;;31474:4;;31501;;31521:15;;31350:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12774:98;12832:7;12859:5;12863:1;12859;:5;:::i;12880:98::-;12938:7;12965:5;12969:1;12965;:5;:::i;31563:363::-;31677:16;;31645:63;;31662:4;;-1:-1:-1;;;;;31677:16:0;31696:11;31645:8;:63::i;:::-;31719:16;;-1:-1:-1;;;;;31719:16:0;:32;31759:9;31792:4;31812:11;31719:16;;31870:7;14171:6;;-1:-1:-1;;;;;14171:6:0;;14098:87;31870:7;31719:199;;;;;;-1:-1:-1;;;;;;31719:199:0;;;-1:-1:-1;;;;;14760:15:1;;;31719:199:0;;;14742:34:1;14792:18;;;14785:34;;;;14835:18;;;14828:34;;;;14878:18;;;14871:34;14942:15;;;14921:19;;;14914:44;31892:15:0;14974:19:1;;;14967:35;14676:19;;31719:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30499:569::-;30601:14;;30563:4;;;;-1:-1:-1;;;;;30593:22:0;;;30601:14;;30593:22;:57;;;;-1:-1:-1;30633:16:0;;-1:-1:-1;;;;;30619:31:0;;;30633:16;;30619:31;;30593:57;30580:70;;30665:5;:32;;;;-1:-1:-1;;;;;;30674:23:0;;;;;;:19;:23;;;;;;;;30665:32;30661:53;;;30713:1;30699:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;30661:53:0;-1:-1:-1;;;;;30750:25:0;;30725:22;30750:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;30779:23:0;;;;;;:19;:23;;;;;;;;30750:52;30833:14;;30725:77;;-1:-1:-1;;;;;;30827:20:0;;;30833:14;;30827:20;30813:11;30873:5;;:15;;;30882:6;30873:15;30916:10;;30859:29;;-1:-1:-1;30916:14:0;;;;;;30963:39;;-1:-1:-1;30989:13:0;;-1:-1:-1;;;30989:13:0;;;;30988:14;30963:39;:74;;;;;31020:17;31019:18;30963:74;:97;;;;;31054:6;30963:97;30942:118;30499:569;-1:-1:-1;;;;;;;;30499:569:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:316::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;-1:-1:-1;;1767:23:1;;;1837:2;1822:18;;1809:32;;-1:-1:-1;1888:2:1;1873:18;;;1860:32;;1582:316;-1:-1:-1;1582:316:1:o;1903:456::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2104:9;2091:23;2123:31;2148:5;2123:31;:::i;:::-;2173:5;-1:-1:-1;2230:2:1;2215:18;;2202:32;2243:33;2202:32;2243:33;:::i;:::-;1903:456;;2295:7;;-1:-1:-1;;;2349:2:1;2334:18;;;;2321:32;;1903:456::o;2553:416::-;2618:6;2626;2679:2;2667:9;2658:7;2654:23;2650:32;2647:52;;;2695:1;2692;2685:12;2647:52;2734:9;2721:23;2753:31;2778:5;2753:31;:::i;:::-;2803:5;-1:-1:-1;2860:2:1;2845:18;;2832:32;2902:15;;2895:23;2883:36;;2873:64;;2933:1;2930;2923:12;2873:64;2956:7;2946:17;;;2553:416;;;;;:::o;2974:247::-;3033:6;3086:2;3074:9;3065:7;3061:23;3057:32;3054:52;;;3102:1;3099;3092:12;3054:52;3141:9;3128:23;3160:31;3185:5;3160:31;:::i;3668:388::-;3736:6;3744;3797:2;3785:9;3776:7;3772:23;3768:32;3765:52;;;3813:1;3810;3803:12;3765:52;3852:9;3839:23;3871:31;3896:5;3871:31;:::i;:::-;3921:5;-1:-1:-1;3978:2:1;3963:18;;3950:32;3991:33;3950:32;3991:33;:::i;4061:380::-;4140:1;4136:12;;;;4183;;;4204:61;;4258:4;4250:6;4246:17;4236:27;;4204:61;4311:2;4303:6;4300:14;4280:18;4277:38;4274:161;;4357:10;4352:3;4348:20;4345:1;4338:31;4392:4;4389:1;4382:15;4420:4;4417:1;4410:15;4274:161;;4061:380;;;:::o;4446:356::-;4648:2;4630:21;;;4667:18;;;4660:30;4726:34;4721:2;4706:18;;4699:62;4793:2;4778:18;;4446:356::o;4807:127::-;4868:10;4863:3;4859:20;4856:1;4849:31;4899:4;4896:1;4889:15;4923:4;4920:1;4913:15;4939:168;5012:9;;;5043;;5060:15;;;5054:22;;5040:37;5030:71;;5081:18;;:::i;5112:217::-;5152:1;5178;5168:132;;5222:10;5217:3;5213:20;5210:1;5203:31;5257:4;5254:1;5247:15;5285:4;5282:1;5275:15;5168:132;-1:-1:-1;5314:9:1;;5112:217::o;5750:125::-;5815:9;;;5836:10;;;5833:36;;;5849:18;;:::i;9891:401::-;10093:2;10075:21;;;10132:2;10112:18;;;10105:30;10171:34;10166:2;10151:18;;10144:62;-1:-1:-1;;;10237:2:1;10222:18;;10215:35;10282:3;10267:19;;9891:401::o;10297:399::-;10499:2;10481:21;;;10538:2;10518:18;;;10511:30;10577:34;10572:2;10557:18;;10550:62;-1:-1:-1;;;10643:2:1;10628:18;;10621:33;10686:3;10671:19;;10297:399::o;12229:128::-;12296:9;;;12317:11;;;12314:37;;;12331:18;;:::i;13028:127::-;13089:10;13084:3;13080:20;13077:1;13070:31;13120:4;13117:1;13110:15;13144:4;13141:1;13134:15;13160:251;13230:6;13283:2;13271:9;13262:7;13258:23;13254:32;13251:52;;;13299:1;13296;13289:12;13251:52;13331:9;13325:16;13350:31;13375:5;13350:31;:::i;13416:980::-;13678:4;13726:3;13715:9;13711:19;13757:6;13746:9;13739:25;13783:2;13821:6;13816:2;13805:9;13801:18;13794:34;13864:3;13859:2;13848:9;13844:18;13837:31;13888:6;13923;13917:13;13954:6;13946;13939:22;13992:3;13981:9;13977:19;13970:26;;14031:2;14023:6;14019:15;14005:29;;14052:1;14062:195;14076:6;14073:1;14070:13;14062:195;;;14141:13;;-1:-1:-1;;;;;14137:39:1;14125:52;;14232:15;;;;14197:12;;;;14173:1;14091:9;14062:195;;;-1:-1:-1;;;;;;;14313:32:1;;;;14308:2;14293:18;;14286:60;-1:-1:-1;;;14377:3:1;14362:19;14355:35;14274:3;13416:980;-1:-1:-1;;;13416:980:1:o;15013:306::-;15101:6;15109;15117;15170:2;15158:9;15149:7;15145:23;15141:32;15138:52;;;15186:1;15183;15176:12;15138:52;15215:9;15209:16;15199:26;;15265:2;15254:9;15250:18;15244:25;15234:35;;15309:2;15298:9;15294:18;15288:25;15278:35;;15013:306;;;;;:::o

Swarm Source

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