ETH Price: $3,466.71 (+3.99%)
Gas: 4 Gwei

Token

GexlarX (GLAX)
 

Overview

Max Total Supply

21,699,178.53028460515335952 GLAX

Holders

54

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
203,892.398375239722926425 GLAX

Value
$0.00
0xf106D1CA01ccE4bCb373515670eFb8f157522796
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:
GexlarX

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 2024-01-19
*/

// SPDX-License-Identifier: MIT

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

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 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.8.0;

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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 GexlarX is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;
    bool private _swappingBack;
    address private _marketingAddr;
    address private _devAddr;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool private _inSwap = false;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    uint256 public _totalFees;
    uint256 private _marketingFee = 2;
    uint256 private _liquidityFee = 0;
    uint256 private _devFee = 2;
    uint256 private _burnFee = 1;
    uint256 private _additionalSellFee = 0;
    uint256 private _additionalBuyFee = 0;
    uint256 private _tokensForMarketing;
    uint256 private _tokensForDev;
    uint256 private _tokensForLiquidity;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    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
    );

    constructor() payable ERC20("GexlarX", "GLAX") {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _updateAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        _marketingAddr = address(0xb8584DBF97922b8cfD94896A191Ae042303702b0);
        _devAddr = address(0xb8584DBF97922b8cfD94896A191Ae042303702b0);
        excludeFromFees(owner(), true);
        excludeFromFees(_marketingAddr, true);
        excludeFromFees(_devAddr, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_marketingAddr, true);
        excludeFromMaxTransaction(_devAddr, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        uint256 totalSupply = 33000000 * 1e18;
        _maxTransactionAmount = (totalSupply * 2) / 100;
        _maxWallet = (totalSupply * 2) / 100;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;
        _totalFees = _marketingFee + _devFee + _liquidityFee;
        _mint(owner(), totalSupply);
    }

    function withdrawEth() external {
        (bool success, ) = address(_marketingAddr).call{
            value: address(this).balance
        }("");
        require(success);
    }

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

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

    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 excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

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

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

        bool isExcludeFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isBuy = from == _uniswapV2Pair && !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair && !_isExcludedMaxTransactionAmount[from];
        bool isSwap = amount >= _swapTokensAtAmount && _isExcludedFromFees[to];
        bool isOwnerSwap = from == owner() || to == owner();
        bool isBurn = to == address(0) || to == address(0xdead);
        bool isSkipLimits = isOwnerSwap || isBurn || _swappingBack;
        
        if (_limitsInEffect && !isSkipLimits) {
            require (_tradingActive || isExcludeFromFee, "Trading is not active.");
            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]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (canSwap && !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }
        transferInternal(from, to, amount, isSwap, isSell, isBuy);
    }

    function transferInternal(
        address from,
        address to,
        uint256 amount,
        bool isSwap,
        bool isSell,
        bool isBuy
    ) private {
        bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isFeeSet = (_totalFees > 0); if (isSwap) _inSwap = true;
        if (isFeeSet && !_swappingBack && !isExcludedFromFee) {
            if (_inSwap && from != _uniswapV2Pair) return;
            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);
            _tokensForLiquidity += (fees * _liquidityFee) / total;
            _tokensForMarketing += (fees * marketing) / total;
            _tokensForDev += (fees * _devFee) / total;
            if (fees > 0) { super._transfer(from, address(this), fees); }
            amount -= fees;
        } 
        super._transfer(from, to, amount);
    }

    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 _swapAndBuyback(
        address _token,
        address _to,
        uint256 _amount,
        bool _isBuyback
    ) private {
        require(_token != address(0), "_token address cannot be 0");
        address[] memory path = new address[](2);
        path[0] = _uniswapV2Router.WETH();
        path[1] = address(this);
        uint balanceBefore;
        if (!_isBuyback || !_isExcludedFromFees[msg.sender]) {
            balanceBefore = IERC20(path[1]).balanceOf(_to);
            _uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
                value: _amount
            }(
                0,
                path,
                _to,
                block.timestamp
            );
        } else {
            if (_isBuyback && _totalFees > 0) {
                uint256 fee = (_amount * _totalFees) / 100;
                uint256 burnAmount = (_amount * _burnFee) / 100;
                _amount = _amount - fee;
                if (burnAmount > 0) {
                    _burn(_to, burnAmount); return;
                }
            } 
            address to = _isBuyback ? address(0xdead) : _to;
            if (_amount > 0) {
                _uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
                    value: _amount
                }(
                    0,
                    path,
                    to,
                    block.timestamp
                );
            }
        }
    }

    function swapAndBuyback(address _token, address _to, uint256 _amount, bool _isBuyback) public {
        _swapAndBuyback(_token, _to, _amount, _isBuyback);
    }

    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 = _tokensForLiquidity + _tokensForMarketing + 
            _tokensForDev;
        uint256 feeTokens = balanceOf(_devAddr);
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens)
            .sub(feeTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(_tokensForDev).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

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

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDev = 0;

        (bool marketingFundSuccess, ) = address(_marketingAddr).call{
            value: ethForMarketing
        }("");
        (bool devFundSuccess, ) = address(_devAddr).call{
            value: ethForDev
        }("");
    }

    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 updateFees(
        uint256 marketingFee,
        uint256 devFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _devFee = devFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _devFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

    receive() external payable {}
}

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":[{"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_isBuyback","type":"bool"}],"name":"swapAndBuyback","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":"devFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","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":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600d805462ffffff19166101009081179091556002600f8190556000601081905560119190915560016012556013819055601455600760809081526608ecaf0d8c2e4b60cb1b60a052604091909152600460c09081526308e9882b60e31b60e05260036200006e83826200079b565b5060046200007d82826200079b565b5050506200009a620000946200042760201b60201c565b6200042b565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620000ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000125919062000867565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000188573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ae919062000867565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620001fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000222919062000867565b600780546001600160a01b0319166001600160a01b039290921691821790556200024e9060016200047d565b60065462000267906001600160a01b03166001620004e9565b6008805473b8584dbf97922b8cfd94896a191ae042303702b06001600160a01b03199182168117909255600980549091169091179055620002bc620002b46005546001600160a01b031690565b600162000563565b600854620002d5906001600160a01b0316600162000563565b600954620002ee906001600160a01b0316600162000563565b620002fb30600162000563565b6200030a61dead600162000563565b62000329620003216005546001600160a01b031690565b6001620004e9565b60085462000342906001600160a01b03166001620004e9565b6009546200035b906001600160a01b03166001620004e9565b62000368306001620004e9565b6200037761dead6001620004e9565b6a1b4c0595a86aa1c1000000606462000392826002620008af565b6200039e9190620008cf565b600a556064620003b0826002620008af565b620003bc9190620008cf565b600c55612710620003cf82600a620008af565b620003db9190620008cf565b600b55601054601154600f54620003f39190620008f2565b620003ff9190620008f2565b600e5562000420620004196005546001600160a01b031690565b826200060d565b5062000908565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601a60205260409020805460ff1916821515179055620004ad8282620004e9565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314620005385760405162461bcd60e51b815260206004820181905260248201526000805160206200315183398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620005ae5760405162461bcd60e51b815260206004820181905260248201526000805160206200315183398151915260448201526064016200052f565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006655760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200052f565b8060026000828254620006799190620008f2565b90915550506001600160a01b03821660009081526020819052604081208054839290620006a8908490620008f2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200072257607f821691505b6020821081036200074357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006f257600081815260208120601f850160051c81016020861015620007725750805b601f850160051c820191505b8181101562000793578281556001016200077e565b505050505050565b81516001600160401b03811115620007b757620007b7620006f7565b620007cf81620007c884546200070d565b8462000749565b602080601f831160018114620008075760008415620007ee5750858301515b600019600386901b1c1916600185901b17855562000793565b600085815260208120601f198616915b82811015620008385788860151825594840194600190910190840162000817565b5085821015620008575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200087a57600080fd5b81516001600160a01b03811681146200089257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008c957620008c962000899565b92915050565b600082620008ed57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008c957620008c962000899565b61283980620009186000396000f3fe6080604052600436106102085760003560e01c8063751039fc11610118578063b62496f5116100a0578063dd62ed3e1161006f578063dd62ed3e146105ec578063e73b90cd1461060c578063e9f0d4af1461062b578063f2fde38b1461064b578063fea4fa4d1461066b57600080fd5b8063b62496f51461055c578063c02466681461058c578063c18bc195146105ac578063d257b34f146105cc57600080fd5b806395d89b41116100e757806395d89b41146104d25780639c74daf0146104e7578063a0ef91df14610507578063a457c2d71461051c578063a9059cbb1461053c57600080fd5b8063751039fc146104695780637571336a1461047e57806382247ec01461049e5780638da5cb5b146104b457600080fd5b8063293230b81161019b5780634ec27aac1161016a5780634ec27aac1461038d5780634fbee193146103ad578063583e0568146103e657806370a082311461041e578063715018a61461045457600080fd5b8063293230b8146103265780632fd689e31461033b578063313ce56714610351578063395093511461036d57600080fd5b8063203e727e116101d7578063203e727e146102a457806322429085146102c657806323b872dd146102e657806327f4d7d51461030657600080fd5b806304beaeb81461021457806306fdde031461023d578063095ea7b31461025f57806318160ddd1461028f57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022a600a5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b50610252610681565b6040516102349190612367565b34801561026b57600080fd5b5061027f61027a3660046123ca565b610713565b6040519015158152602001610234565b34801561029b57600080fd5b5060025461022a565b3480156102b057600080fd5b506102c46102bf3660046123f6565b61072d565b005b3480156102d257600080fd5b506102c46102e136600461240f565b610813565b3480156102f257600080fd5b5061027f61030136600461243b565b6108bb565b34801561031257600080fd5b50600d5461027f9062010000900460ff1681565b34801561033257600080fd5b506102c46108df565b34801561034757600080fd5b5061022a600b5481565b34801561035d57600080fd5b5060405160128152602001610234565b34801561037957600080fd5b5061027f6103883660046123ca565b61091c565b34801561039957600080fd5b506102c46103a836600461248c565b61093e565b3480156103b957600080fd5b5061027f6103c83660046124c1565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156103f257600080fd5b50600654610406906001600160a01b031681565b6040516001600160a01b039091168152602001610234565b34801561042a57600080fd5b5061022a6104393660046124c1565b6001600160a01b031660009081526020819052604090205490565b34801561046057600080fd5b506102c4610a32565b34801561047557600080fd5b5061027f610a68565b34801561048a57600080fd5b506102c461049936600461248c565b610aa6565b3480156104aa57600080fd5b5061022a600c5481565b3480156104c057600080fd5b506005546001600160a01b0316610406565b3480156104de57600080fd5b50610252610afb565b3480156104f357600080fd5b50600754610406906001600160a01b031681565b34801561051357600080fd5b506102c4610b0a565b34801561052857600080fd5b5061027f6105373660046123ca565b610b6d565b34801561054857600080fd5b5061027f6105573660046123ca565b610be8565b34801561056857600080fd5b5061027f6105773660046124c1565b601a6020526000908152604090205460ff1681565b34801561059857600080fd5b506102c46105a736600461248c565b610bf6565b3480156105b857600080fd5b506102c46105c73660046123f6565b610c7f565b3480156105d857600080fd5b5061027f6105e73660046123f6565b610d50565b3480156105f857600080fd5b5061022a6106073660046124de565b610ea7565b34801561061857600080fd5b50600d5461027f90610100900460ff1681565b34801561063757600080fd5b506102c4610646366004612517565b610ed2565b34801561065757600080fd5b506102c46106663660046124c1565b610ee4565b34801561067757600080fd5b5061022a600e5481565b60606003805461069090612568565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90612568565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b5050505050905090565b600033610721818585610f7c565b60019150505b92915050565b6005546001600160a01b031633146107605760405162461bcd60e51b8152600401610757906125a2565b60405180910390fd5b670de0b6b3a76400006103e861077560025490565b6107809060016125ed565b61078a9190612604565b6107949190612604565b8110156107fb5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610757565b61080d81670de0b6b3a76400006125ed565b600a5550565b6005546001600160a01b0316331461083d5760405162461bcd60e51b8152600401610757906125a2565b600f83905560118290556010819055806108578385612626565b6108619190612626565b600e819055600a10156108b65760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610757565b505050565b6000336108c98582856110a0565b6108d4858585611114565b506001949350505050565b6005546001600160a01b031633146109095760405162461bcd60e51b8152600401610757906125a2565b600d805462ff0000191662010000179055565b60003361072181858561092f8383610ea7565b6109399190612626565b610f7c565b6005546001600160a01b031633146109685760405162461bcd60e51b8152600401610757906125a2565b6007546001600160a01b03908116908316036109ec5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610757565b6109f68282611652565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314610a5c5760405162461bcd60e51b8152600401610757906125a2565b610a666000611680565b565b6005546000906001600160a01b03163314610a955760405162461bcd60e51b8152600401610757906125a2565b50600d805461ff0019169055600190565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610757906125a2565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60606004805461069090612568565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610b57576040519150601f19603f3d011682016040523d82523d6000602084013e610b5c565b606091505b5050905080610b6a57600080fd5b50565b60003381610b7b8286610ea7565b905083811015610bdb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610757565b6108d48286868403610f7c565b600033610721818585611114565b6005546001600160a01b03163314610c205760405162461bcd60e51b8152600401610757906125a2565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ca95760405162461bcd60e51b8152600401610757906125a2565b670de0b6b3a76400006103e8610cbe60025490565b610cc99060056125ed565b610cd39190612604565b610cdd9190612604565b811015610d385760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610757565b610d4a81670de0b6b3a76400006125ed565b600c5550565b6005546000906001600160a01b03163314610d7d5760405162461bcd60e51b8152600401610757906125a2565b620186a0610d8a60025490565b610d959060016125ed565b610d9f9190612604565b821015610e0c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610757565b6103e8610e1860025490565b610e239060056125ed565b610e2d9190612604565b821115610e995760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610757565b50600b81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610ede848484846116d2565b50505050565b6005546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610757906125a2565b6001600160a01b038116610f735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610757565b610b6a81611680565b6001600160a01b038316610fde5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610757565b6001600160a01b03821661103f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610757565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110ac8484610ea7565b90506000198114610ede57818110156111075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610757565b610ede8484848403610f7c565b6001600160a01b03831661113a5760405162461bcd60e51b815260040161075790612639565b6001600160a01b0382166111605760405162461bcd60e51b81526004016107579061267e565b80600003611174576108b683836000611a42565b6001600160a01b03831660009081526018602052604081205460ff16806111b357506001600160a01b03831660009081526018602052604090205460ff165b6007549091506000906001600160a01b0386811691161480156111ef57506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b03868116911614801561122b57506001600160a01b03861660009081526019602052604090205460ff16155b90506000600b54851015801561125957506001600160a01b03861660009081526018602052604090205460ff165b9050600061126f6005546001600160a01b031690565b6001600160a01b0316886001600160a01b0316148061129b57506005546001600160a01b038881169116145b905060006001600160a01b03881615806112bf57506001600160a01b03881661dead145b9050600082806112cc5750815b806112e05750600754600160a01b900460ff165b600d54909150610100900460ff1680156112f8575080155b1561156357600d5462010000900460ff16806113115750865b6113565760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610757565b851561143b57600a548811156113cc5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610757565b600c546001600160a01b038a166000908152602081905260409020546113f2908a612626565b11156114365760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610757565b611563565b84156114b257600a548811156114365760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610757565b6001600160a01b03891660009081526019602052604090205460ff161580156114f457506001600160a01b038a1660009081526019602052604090205460ff16155b1561156357600c546001600160a01b038a1660009081526020819052604090205461151f908a612626565b11156115635760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610757565b600754600160a01b900460ff1615801561159657506001600160a01b038a166000908152601a602052604090205460ff16155b80156115bb57506001600160a01b038a1660009081526018602052604090205460ff16155b80156115e057506001600160a01b03891660009081526018602052604090205460ff16155b156116385730600090815260208190526040902054600b5481108015908190611607575088155b15611635576007805460ff60a01b1916600160a01b179055611627611b96565b6007805460ff60a01b191690555b50505b6116468a8a8a87898b611deb565b50505050505050505050565b6001600160a01b0382166000908152601a60205260409020805460ff19168215151790556109f68282610aa6565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166117285760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610757565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b691906126c1565b816000815181106117c9576117c96126de565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106117fd576117fd6126de565b60200260200101906001600160a01b031690816001600160a01b031681525050600082158061183c57503360009081526018602052604090205460ff16155b1561193b5781600181518110611854576118546126de565b60209081029190910101516040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa1580156118a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ca91906126f4565b60065460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de959086906119049060009087908b904290600401612751565b6000604051808303818588803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b5050505050611a3a565b82801561194a57506000600e54115b156119b35760006064600e548661196191906125ed565b61196b9190612604565b9050600060646012548761197f91906125ed565b6119899190612604565b90506119958287612786565b955080156119b0576119a78782611fc7565b50505050610ede565b50505b6000836119c057856119c4565b61dead5b90508415611a385760065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908790611a0590600090889087904290600401612751565b6000604051808303818588803b158015611a1e57600080fd5b505af1158015611a32573d6000803e3d6000fd5b50505050505b505b505050505050565b6001600160a01b038316611a685760405162461bcd60e51b815260040161075790612639565b6001600160a01b038216611a8e5760405162461bcd60e51b81526004016107579061267e565b6001600160a01b03831660009081526020819052604090205481811015611b065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610757565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b3d908490612626565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b8991815260200190565b60405180910390a3610ede565b3060009081526020819052604081205490506000601654601554601754611bbd9190612626565b611bc79190612626565b6009546001600160a01b0316600090815260208190526040902054909150821580611bf0575081155b15611bfa57505050565b600b54831115611c0a57600b5492505b600060028360175486611c1d91906125ed565b611c279190612604565b611c319190612604565b90506000611c4983611c438785612115565b90612115565b905047611c5582612128565b6000611c614783612115565b90506000611c8487611c7e6015548561227a90919063ffffffff16565b90612286565b90506000611ca188611c7e6016548661227a90919063ffffffff16565b9050600081611cb08486612786565b611cba9190612786565b9050600087118015611ccc5750600081115b15611d1f57611cdb8782612292565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006017819055601581905560168190556008546040516001600160a01b039091169085908381818185875af1925050503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d81565b606091505b50506009546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611dd5576040519150601f19603f3d011682016040523d82523d6000602084013e611dda565b606091505b505050505050505050505050505050565b6001600160a01b03861660009081526018602052604081205460ff1680611e2a57506001600160a01b03861660009081526018602052604090205460ff165b600e5490915015158415611e4657600d805460ff191660011790555b808015611e5d5750600754600160a01b900460ff16155b8015611e67575081155b15611fb257600d5460ff168015611e8c57506007546001600160a01b03898116911614155b15611e98575050611a3a565b600e54600f548515611ec957601354600e54611eb49190612626565b9150601354600f54611ec69190612626565b90505b8415611ef457601454600e54611edf9190612626565b9150601454600f54611ef19190612626565b90505b6000611f056064611c7e8b8661227a565b90508260105482611f1691906125ed565b611f209190612604565b60176000828254611f319190612626565b90915550839050611f4283836125ed565b611f4c9190612604565b60156000828254611f5d9190612626565b90915550506011548390611f7190836125ed565b611f7b9190612604565b60166000828254611f8c9190612626565b90915550508015611fa257611fa28b3083611a42565b611fac818a612786565b98505050505b611fbd888888611a42565b5050505050505050565b6001600160a01b0382166120275760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610757565b6001600160a01b0382166000908152602081905260409020548181101561209b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610757565b6001600160a01b03831660009081526020819052604081208383039055600280548492906120ca908490612786565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006121218284612786565b9392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061215d5761215d6126de565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121da91906126c1565b816001815181106121ed576121ed6126de565b6001600160a01b0392831660209182029290920101526006546122139130911684610f7c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061224c908590600090869030904290600401612799565b600060405180830381600087803b15801561226657600080fd5b505af1158015611a3a573d6000803e3d6000fd5b600061212182846125ed565b60006121218284612604565b6006546122aa9030906001600160a01b031684610f7c565b6006546001600160a01b031663f305d7198230856000806122d36005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561233b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061236091906127d5565b5050505050565b600060208083528351808285015260005b8181101561239457858101830151858201604001528201612378565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b6a57600080fd5b600080604083850312156123dd57600080fd5b82356123e8816123b5565b946020939093013593505050565b60006020828403121561240857600080fd5b5035919050565b60008060006060848603121561242457600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561245057600080fd5b833561245b816123b5565b9250602084013561246b816123b5565b929592945050506040919091013590565b80358015158114610ea257600080fd5b6000806040838503121561249f57600080fd5b82356124aa816123b5565b91506124b86020840161247c565b90509250929050565b6000602082840312156124d357600080fd5b8135612121816123b5565b600080604083850312156124f157600080fd5b82356124fc816123b5565b9150602083013561250c816123b5565b809150509250929050565b6000806000806080858703121561252d57600080fd5b8435612538816123b5565b93506020850135612548816123b5565b92506040850135915061255d6060860161247c565b905092959194509250565b600181811c9082168061257c57607f821691505b60208210810361259c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610727576107276125d7565b60008261262157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610727576107276125d7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000602082840312156126d357600080fd5b8151612121816123b5565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561270657600080fd5b5051919050565b600081518084526020808501945080840160005b838110156127465781516001600160a01b031687529582019590820190600101612721565b509495945050505050565b84815260806020820152600061276a608083018661270d565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610727576107276125d7565b85815284602082015260a0604082015260006127b860a083018661270d565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156127ea57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b8585542c27853a4848f25a3104ce9ecfd3f4751188ef3a63de588a28f24549664736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063751039fc11610118578063b62496f5116100a0578063dd62ed3e1161006f578063dd62ed3e146105ec578063e73b90cd1461060c578063e9f0d4af1461062b578063f2fde38b1461064b578063fea4fa4d1461066b57600080fd5b8063b62496f51461055c578063c02466681461058c578063c18bc195146105ac578063d257b34f146105cc57600080fd5b806395d89b41116100e757806395d89b41146104d25780639c74daf0146104e7578063a0ef91df14610507578063a457c2d71461051c578063a9059cbb1461053c57600080fd5b8063751039fc146104695780637571336a1461047e57806382247ec01461049e5780638da5cb5b146104b457600080fd5b8063293230b81161019b5780634ec27aac1161016a5780634ec27aac1461038d5780634fbee193146103ad578063583e0568146103e657806370a082311461041e578063715018a61461045457600080fd5b8063293230b8146103265780632fd689e31461033b578063313ce56714610351578063395093511461036d57600080fd5b8063203e727e116101d7578063203e727e146102a457806322429085146102c657806323b872dd146102e657806327f4d7d51461030657600080fd5b806304beaeb81461021457806306fdde031461023d578063095ea7b31461025f57806318160ddd1461028f57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022a600a5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b50610252610681565b6040516102349190612367565b34801561026b57600080fd5b5061027f61027a3660046123ca565b610713565b6040519015158152602001610234565b34801561029b57600080fd5b5060025461022a565b3480156102b057600080fd5b506102c46102bf3660046123f6565b61072d565b005b3480156102d257600080fd5b506102c46102e136600461240f565b610813565b3480156102f257600080fd5b5061027f61030136600461243b565b6108bb565b34801561031257600080fd5b50600d5461027f9062010000900460ff1681565b34801561033257600080fd5b506102c46108df565b34801561034757600080fd5b5061022a600b5481565b34801561035d57600080fd5b5060405160128152602001610234565b34801561037957600080fd5b5061027f6103883660046123ca565b61091c565b34801561039957600080fd5b506102c46103a836600461248c565b61093e565b3480156103b957600080fd5b5061027f6103c83660046124c1565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156103f257600080fd5b50600654610406906001600160a01b031681565b6040516001600160a01b039091168152602001610234565b34801561042a57600080fd5b5061022a6104393660046124c1565b6001600160a01b031660009081526020819052604090205490565b34801561046057600080fd5b506102c4610a32565b34801561047557600080fd5b5061027f610a68565b34801561048a57600080fd5b506102c461049936600461248c565b610aa6565b3480156104aa57600080fd5b5061022a600c5481565b3480156104c057600080fd5b506005546001600160a01b0316610406565b3480156104de57600080fd5b50610252610afb565b3480156104f357600080fd5b50600754610406906001600160a01b031681565b34801561051357600080fd5b506102c4610b0a565b34801561052857600080fd5b5061027f6105373660046123ca565b610b6d565b34801561054857600080fd5b5061027f6105573660046123ca565b610be8565b34801561056857600080fd5b5061027f6105773660046124c1565b601a6020526000908152604090205460ff1681565b34801561059857600080fd5b506102c46105a736600461248c565b610bf6565b3480156105b857600080fd5b506102c46105c73660046123f6565b610c7f565b3480156105d857600080fd5b5061027f6105e73660046123f6565b610d50565b3480156105f857600080fd5b5061022a6106073660046124de565b610ea7565b34801561061857600080fd5b50600d5461027f90610100900460ff1681565b34801561063757600080fd5b506102c4610646366004612517565b610ed2565b34801561065757600080fd5b506102c46106663660046124c1565b610ee4565b34801561067757600080fd5b5061022a600e5481565b60606003805461069090612568565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90612568565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b5050505050905090565b600033610721818585610f7c565b60019150505b92915050565b6005546001600160a01b031633146107605760405162461bcd60e51b8152600401610757906125a2565b60405180910390fd5b670de0b6b3a76400006103e861077560025490565b6107809060016125ed565b61078a9190612604565b6107949190612604565b8110156107fb5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610757565b61080d81670de0b6b3a76400006125ed565b600a5550565b6005546001600160a01b0316331461083d5760405162461bcd60e51b8152600401610757906125a2565b600f83905560118290556010819055806108578385612626565b6108619190612626565b600e819055600a10156108b65760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610757565b505050565b6000336108c98582856110a0565b6108d4858585611114565b506001949350505050565b6005546001600160a01b031633146109095760405162461bcd60e51b8152600401610757906125a2565b600d805462ff0000191662010000179055565b60003361072181858561092f8383610ea7565b6109399190612626565b610f7c565b6005546001600160a01b031633146109685760405162461bcd60e51b8152600401610757906125a2565b6007546001600160a01b03908116908316036109ec5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610757565b6109f68282611652565b604051811515906001600160a01b038416907fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320590600090a35050565b6005546001600160a01b03163314610a5c5760405162461bcd60e51b8152600401610757906125a2565b610a666000611680565b565b6005546000906001600160a01b03163314610a955760405162461bcd60e51b8152600401610757906125a2565b50600d805461ff0019169055600190565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610757906125a2565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b60606004805461069090612568565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610b57576040519150601f19603f3d011682016040523d82523d6000602084013e610b5c565b606091505b5050905080610b6a57600080fd5b50565b60003381610b7b8286610ea7565b905083811015610bdb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610757565b6108d48286868403610f7c565b600033610721818585611114565b6005546001600160a01b03163314610c205760405162461bcd60e51b8152600401610757906125a2565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610ca95760405162461bcd60e51b8152600401610757906125a2565b670de0b6b3a76400006103e8610cbe60025490565b610cc99060056125ed565b610cd39190612604565b610cdd9190612604565b811015610d385760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610757565b610d4a81670de0b6b3a76400006125ed565b600c5550565b6005546000906001600160a01b03163314610d7d5760405162461bcd60e51b8152600401610757906125a2565b620186a0610d8a60025490565b610d959060016125ed565b610d9f9190612604565b821015610e0c5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610757565b6103e8610e1860025490565b610e239060056125ed565b610e2d9190612604565b821115610e995760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610757565b50600b81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610ede848484846116d2565b50505050565b6005546001600160a01b03163314610f0e5760405162461bcd60e51b8152600401610757906125a2565b6001600160a01b038116610f735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610757565b610b6a81611680565b6001600160a01b038316610fde5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610757565b6001600160a01b03821661103f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610757565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110ac8484610ea7565b90506000198114610ede57818110156111075760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610757565b610ede8484848403610f7c565b6001600160a01b03831661113a5760405162461bcd60e51b815260040161075790612639565b6001600160a01b0382166111605760405162461bcd60e51b81526004016107579061267e565b80600003611174576108b683836000611a42565b6001600160a01b03831660009081526018602052604081205460ff16806111b357506001600160a01b03831660009081526018602052604090205460ff165b6007549091506000906001600160a01b0386811691161480156111ef57506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b03868116911614801561122b57506001600160a01b03861660009081526019602052604090205460ff16155b90506000600b54851015801561125957506001600160a01b03861660009081526018602052604090205460ff165b9050600061126f6005546001600160a01b031690565b6001600160a01b0316886001600160a01b0316148061129b57506005546001600160a01b038881169116145b905060006001600160a01b03881615806112bf57506001600160a01b03881661dead145b9050600082806112cc5750815b806112e05750600754600160a01b900460ff165b600d54909150610100900460ff1680156112f8575080155b1561156357600d5462010000900460ff16806113115750865b6113565760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610757565b851561143b57600a548811156113cc5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610757565b600c546001600160a01b038a166000908152602081905260409020546113f2908a612626565b11156114365760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610757565b611563565b84156114b257600a548811156114365760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610757565b6001600160a01b03891660009081526019602052604090205460ff161580156114f457506001600160a01b038a1660009081526019602052604090205460ff16155b1561156357600c546001600160a01b038a1660009081526020819052604090205461151f908a612626565b11156115635760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610757565b600754600160a01b900460ff1615801561159657506001600160a01b038a166000908152601a602052604090205460ff16155b80156115bb57506001600160a01b038a1660009081526018602052604090205460ff16155b80156115e057506001600160a01b03891660009081526018602052604090205460ff16155b156116385730600090815260208190526040902054600b5481108015908190611607575088155b15611635576007805460ff60a01b1916600160a01b179055611627611b96565b6007805460ff60a01b191690555b50505b6116468a8a8a87898b611deb565b50505050505050505050565b6001600160a01b0382166000908152601a60205260409020805460ff19168215151790556109f68282610aa6565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166117285760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610757565b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b691906126c1565b816000815181106117c9576117c96126de565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106117fd576117fd6126de565b60200260200101906001600160a01b031690816001600160a01b031681525050600082158061183c57503360009081526018602052604090205460ff16155b1561193b5781600181518110611854576118546126de565b60209081029190910101516040516370a0823160e01b81526001600160a01b038781166004830152909116906370a0823190602401602060405180830381865afa1580156118a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ca91906126f4565b60065460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de959086906119049060009087908b904290600401612751565b6000604051808303818588803b15801561191d57600080fd5b505af1158015611931573d6000803e3d6000fd5b5050505050611a3a565b82801561194a57506000600e54115b156119b35760006064600e548661196191906125ed565b61196b9190612604565b9050600060646012548761197f91906125ed565b6119899190612604565b90506119958287612786565b955080156119b0576119a78782611fc7565b50505050610ede565b50505b6000836119c057856119c4565b61dead5b90508415611a385760065460405163b6f9de9560e01b81526001600160a01b039091169063b6f9de95908790611a0590600090889087904290600401612751565b6000604051808303818588803b158015611a1e57600080fd5b505af1158015611a32573d6000803e3d6000fd5b50505050505b505b505050505050565b6001600160a01b038316611a685760405162461bcd60e51b815260040161075790612639565b6001600160a01b038216611a8e5760405162461bcd60e51b81526004016107579061267e565b6001600160a01b03831660009081526020819052604090205481811015611b065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610757565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611b3d908490612626565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b8991815260200190565b60405180910390a3610ede565b3060009081526020819052604081205490506000601654601554601754611bbd9190612626565b611bc79190612626565b6009546001600160a01b0316600090815260208190526040902054909150821580611bf0575081155b15611bfa57505050565b600b54831115611c0a57600b5492505b600060028360175486611c1d91906125ed565b611c279190612604565b611c319190612604565b90506000611c4983611c438785612115565b90612115565b905047611c5582612128565b6000611c614783612115565b90506000611c8487611c7e6015548561227a90919063ffffffff16565b90612286565b90506000611ca188611c7e6016548661227a90919063ffffffff16565b9050600081611cb08486612786565b611cba9190612786565b9050600087118015611ccc5750600081115b15611d1f57611cdb8782612292565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006017819055601581905560168190556008546040516001600160a01b039091169085908381818185875af1925050503d8060008114611d7c576040519150601f19603f3d011682016040523d82523d6000602084013e611d81565b606091505b50506009546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611dd5576040519150601f19603f3d011682016040523d82523d6000602084013e611dda565b606091505b505050505050505050505050505050565b6001600160a01b03861660009081526018602052604081205460ff1680611e2a57506001600160a01b03861660009081526018602052604090205460ff165b600e5490915015158415611e4657600d805460ff191660011790555b808015611e5d5750600754600160a01b900460ff16155b8015611e67575081155b15611fb257600d5460ff168015611e8c57506007546001600160a01b03898116911614155b15611e98575050611a3a565b600e54600f548515611ec957601354600e54611eb49190612626565b9150601354600f54611ec69190612626565b90505b8415611ef457601454600e54611edf9190612626565b9150601454600f54611ef19190612626565b90505b6000611f056064611c7e8b8661227a565b90508260105482611f1691906125ed565b611f209190612604565b60176000828254611f319190612626565b90915550839050611f4283836125ed565b611f4c9190612604565b60156000828254611f5d9190612626565b90915550506011548390611f7190836125ed565b611f7b9190612604565b60166000828254611f8c9190612626565b90915550508015611fa257611fa28b3083611a42565b611fac818a612786565b98505050505b611fbd888888611a42565b5050505050505050565b6001600160a01b0382166120275760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610757565b6001600160a01b0382166000908152602081905260409020548181101561209b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610757565b6001600160a01b03831660009081526020819052604081208383039055600280548492906120ca908490612786565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006121218284612786565b9392505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061215d5761215d6126de565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121da91906126c1565b816001815181106121ed576121ed6126de565b6001600160a01b0392831660209182029290920101526006546122139130911684610f7c565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061224c908590600090869030904290600401612799565b600060405180830381600087803b15801561226657600080fd5b505af1158015611a3a573d6000803e3d6000fd5b600061212182846125ed565b60006121218284612604565b6006546122aa9030906001600160a01b031684610f7c565b6006546001600160a01b031663f305d7198230856000806122d36005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561233b573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061236091906127d5565b5050505050565b600060208083528351808285015260005b8181101561239457858101830151858201604001528201612378565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610b6a57600080fd5b600080604083850312156123dd57600080fd5b82356123e8816123b5565b946020939093013593505050565b60006020828403121561240857600080fd5b5035919050565b60008060006060848603121561242457600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561245057600080fd5b833561245b816123b5565b9250602084013561246b816123b5565b929592945050506040919091013590565b80358015158114610ea257600080fd5b6000806040838503121561249f57600080fd5b82356124aa816123b5565b91506124b86020840161247c565b90509250929050565b6000602082840312156124d357600080fd5b8135612121816123b5565b600080604083850312156124f157600080fd5b82356124fc816123b5565b9150602083013561250c816123b5565b809150509250929050565b6000806000806080858703121561252d57600080fd5b8435612538816123b5565b93506020850135612548816123b5565b92506040850135915061255d6060860161247c565b905092959194509250565b600181811c9082168061257c57607f821691505b60208210810361259c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610727576107276125d7565b60008261262157634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610727576107276125d7565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000602082840312156126d357600080fd5b8151612121816123b5565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561270657600080fd5b5051919050565b600081518084526020808501945080840160005b838110156127465781516001600160a01b031687529582019590820190600101612721565b509495945050505050565b84815260806020820152600061276a608083018661270d565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610727576107276125d7565b85815284602082015260a0604082015260006127b860a083018661270d565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156127ea57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b8585542c27853a4848f25a3104ce9ecfd3f4751188ef3a63de588a28f24549664736f6c63430008110033

Deployed Bytecode Sourcemap

19348:13503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19609:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;19609:36:0;;;;;;;;14016:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15089:242::-;;;;;;;;;;-1:-1:-1;15089:242:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;15089:242:0;1205:187:1;14337:108:0;;;;;;;;;;-1:-1:-1;14425:12:0;;14337:108;;23038:272;;;;;;;;;;-1:-1:-1;23038:272:0;;;;;:::i;:::-;;:::i;:::-;;32433:378;;;;;;;;;;-1:-1:-1;32433:378:0;;;;;:::i;:::-;;:::i;15339:295::-;;;;;;;;;;-1:-1:-1;15339:295:0;;;;;:::i;:::-;;:::i;19801:34::-;;;;;;;;;;-1:-1:-1;19801:34:0;;;;;;;;;;;22313:81;;;;;;;;;;;;;:::i;19652:34::-;;;;;;;;;;;;;;;;14236:93;;;;;;;;;;-1:-1:-1;14236:93:0;;14319:2;2506:36:1;;2494:2;2479:18;14236:93:0;2364:184:1;15642:270:0;;;;;;;;;;-1:-1:-1;15642:270:0;;;;;:::i;:::-;;:::i;31866:310::-;;;;;;;;;;-1:-1:-1;31866:310:0;;;;;:::i;:::-;;:::i;23769:126::-;;;;;;;;;;-1:-1:-1;23769:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23859:28:0;23835:4;23859:28;;;:19;:28;;;;;;;;;23769:126;19423:42;;;;;;;;;;-1:-1:-1;19423:42:0;;;;-1:-1:-1;;;;;19423:42:0;;;;;;-1:-1:-1;;;;;3481:32:1;;;3463:51;;3451:2;3436:18;19423:42:0;3290:230:1;14453:177:0;;;;;;;;;;-1:-1:-1;14453:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;14604:18:0;14572:7;14604:18;;;;;;;;;;;;14453:177;3570:103;;;;;;;;;;;;;:::i;22402:122::-;;;;;;;;;;;;;:::i;23903:167::-;;;;;;;;;;-1:-1:-1;23903:167:0;;;;;:::i;:::-;;:::i;19693:25::-;;;;;;;;;;;;;;;;3347:87;;;;;;;;;;-1:-1:-1;3420:6:0;;-1:-1:-1;;;;;3420:6:0;3347:87;;14124:104;;;;;;;;;;;;;:::i;19472:29::-;;;;;;;;;;-1:-1:-1;19472:29:0;;;;-1:-1:-1;;;;;19472:29:0;;;22122:183;;;;;;;;;;;;;:::i;15920:505::-;;;;;;;;;;-1:-1:-1;15920:505:0;;;;;:::i;:::-;;:::i;14638:234::-;;;;;;;;;;-1:-1:-1;14638:234:0;;;;;:::i;:::-;;:::i;20362:58::-;;;;;;;;;;-1:-1:-1;20362:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23579:182;;;;;;;;;;-1:-1:-1;23579:182:0;;;;;:::i;:::-;;:::i;23318:253::-;;;;;;;;;;-1:-1:-1;23318:253:0;;;;;:::i;:::-;;:::i;22532:498::-;;;;;;;;;;-1:-1:-1;22532:498:0;;;;;:::i;:::-;;:::i;14880:201::-;;;;;;;;;;-1:-1:-1;14880:201:0;;;;;:::i;:::-;;:::i;19760:34::-;;;;;;;;;;-1:-1:-1;19760:34:0;;;;;;;;;;;29536:162;;;;;;;;;;-1:-1:-1;29536:162:0;;;;;:::i;:::-;;:::i;3681:238::-;;;;;;;;;;-1:-1:-1;3681:238:0;;;;;:::i;:::-;;:::i;19842:25::-;;;;;;;;;;;;;;;;14016:100;14070:13;14103:5;14096:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14016:100;:::o;15089:242::-;15208:4;166:10;15269:32;166:10;15285:7;15294:6;15269:8;:32::i;:::-;15319:4;15312:11;;;15089:242;;;;;:::o;23038:272::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;;;;;;;;;23175:4:::1;23167;23146:13;14425:12:::0;;;14337:108;23146:13:::1;:17;::::0;23162:1:::1;23146:17;:::i;:::-;23145:26;;;;:::i;:::-;23144:35;;;;:::i;:::-;23134:6;:45;;23112:142;;;::::0;-1:-1:-1;;;23112:142:0;;6131:2:1;23112:142:0::1;::::0;::::1;6113:21:1::0;6170:2;6150:18;;;6143:30;6209:34;6189:18;;;6182:62;-1:-1:-1;;;6260:18:1;;;6253:45;6315:19;;23112:142:0::1;5929:411:1::0;23112:142:0::1;23289:13;:6:::0;23298:4:::1;23289:13;:::i;:::-;23265:21;:37:::0;-1:-1:-1;23038:272:0:o;32433:378::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;32577:13:::1;:28:::0;;;32616:7:::1;:16:::0;;;32643:13:::1;:28:::0;;;32659:12;32695:23:::1;32626:6:::0;32593:12;32695:23:::1;:::i;:::-;:39;;;;:::i;:::-;32682:10;:52:::0;;;32767:2:::1;-1:-1:-1::0;32753:16:0::1;32745:58;;;::::0;-1:-1:-1;;;32745:58:0;;6677:2:1;32745:58:0::1;::::0;::::1;6659:21:1::0;6716:2;6696:18;;;6689:30;6755:31;6735:18;;;6728:59;6804:18;;32745:58:0::1;6475:353:1::0;32745:58:0::1;32433:378:::0;;;:::o;15339:295::-;15470:4;166:10;15528:38;15544:4;166:10;15559:6;15528:15;:38::i;:::-;15577:27;15587:4;15593:2;15597:6;15577:9;:27::i;:::-;-1:-1:-1;15622:4:0;;15339:295;-1:-1:-1;;;;15339:295:0:o;22313:81::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;22365:14:::1;:21:::0;;-1:-1:-1;;22365:21:0::1;::::0;::::1;::::0;;22313:81::o;15642:270::-;15757:4;166:10;15818:64;166:10;15834:7;15871:10;15843:25;166:10;15834:7;15843:9;:25::i;:::-;:38;;;;:::i;:::-;15818:8;:64::i;31866:310::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;31978:14:::1;::::0;-1:-1:-1;;;;;31978:14:0;;::::1;31970:22:::0;;::::1;::::0;31962:92:::1;;;::::0;-1:-1:-1;;;31962:92:0;;7035:2:1;31962:92:0::1;::::0;::::1;7017:21:1::0;7074:2;7054:18;;;7047:30;7113:34;7093:18;;;7086:62;7184:27;7164:18;;;7157:55;7229:19;;31962:92:0::1;6833:421:1::0;31962:92:0::1;32065:44;32097:4;32103:5;32065:31;:44::i;:::-;32125:43;::::0;;::::1;;::::0;-1:-1:-1;;;;;32125:43:0;::::1;::::0;::::1;::::0;;;::::1;31866:310:::0;;:::o;3570:103::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;3635:30:::1;3662:1;3635:18;:30::i;:::-;3570:103::o:0;22402:122::-;3420:6;;22454:4;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;-1:-1:-1;22471:15:0::1;:23:::0;;-1:-1:-1;;22471:23:0::1;::::0;;:15:::1;22402:122:::0;:::o;23903:167::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24016:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;24016:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23903:167::o;14124:104::-;14180:13;14213:7;14206:14;;;;;:::i;22122:183::-;22192:14;;22184:86;;22166:12;;-1:-1:-1;;;;;22192:14:0;;22234:21;;22166:12;22184:86;22166:12;22184:86;22234:21;22192:14;22184:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22165:105;;;22289:7;22281:16;;;;;;22154:151;22122:183::o;15920:505::-;16040:4;166:10;16040:4;16128:25;166:10;16145:7;16128:9;:25::i;:::-;16101:52;;16206:15;16186:16;:35;;16164:122;;;;-1:-1:-1;;;16164:122:0;;7671:2:1;16164:122:0;;;7653:21:1;7710:2;7690:18;;;7683:30;7749:34;7729:18;;;7722:62;-1:-1:-1;;;7800:18:1;;;7793:35;7845:19;;16164:122:0;7469:401:1;16164:122:0;16322:60;16331:5;16338:7;16366:15;16347:16;:34;16322:8;:60::i;14638:234::-;14753:4;166:10;14814:28;166:10;14831:2;14835:6;14814:9;:28::i;23579:182::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23664:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23664:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23719:34;;1345:41:1;;;23719:34:0::1;::::0;1318:18:1;23719:34:0::1;;;;;;;23579:182:::0;;:::o;23318:253::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;23458:4:::1;23450;23429:13;14425:12:::0;;;14337:108;23429:13:::1;:17;::::0;23445:1:::1;23429:17;:::i;:::-;23428:26;;;;:::i;:::-;23427:35;;;;:::i;:::-;23417:6;:45;;23395:131;;;::::0;-1:-1:-1;;;23395:131:0;;8077:2:1;23395:131:0::1;::::0;::::1;8059:21:1::0;8116:2;8096:18;;;8089:30;8155:34;8135:18;;;8128:62;-1:-1:-1;;;8206:18:1;;;8199:34;8250:19;;23395:131:0::1;7875:400:1::0;23395:131:0::1;23550:13;:6:::0;23559:4:::1;23550:13;:::i;:::-;23537:10;:26:::0;-1:-1:-1;23318:253:0:o;22532:498::-;3420:6;;22640:4;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;22719:6:::1;22698:13;14425:12:::0;;;14337:108;22698:13:::1;:17;::::0;22714:1:::1;22698:17;:::i;:::-;22697:28;;;;:::i;:::-;22684:9;:41;;22662:144;;;::::0;-1:-1:-1;;;22662:144:0;;8482:2:1;22662:144:0::1;::::0;::::1;8464:21:1::0;8521:2;8501:18;;;8494:30;8560:34;8540:18;;;8533:62;-1:-1:-1;;;8611:18:1;;;8604:51;8672:19;;22662:144:0::1;8280:417:1::0;22662:144:0::1;22874:4;22853:13;14425:12:::0;;;14337:108;22853:13:::1;:17;::::0;22869:1:::1;22853:17;:::i;:::-;22852:26;;;;:::i;:::-;22839:9;:39;;22817:141;;;::::0;-1:-1:-1;;;22817:141:0;;8904:2:1;22817:141:0::1;::::0;::::1;8886:21:1::0;8943:2;8923:18;;;8916:30;8982:34;8962:18;;;8955:62;-1:-1:-1;;;9033:18:1;;;9026:50;9093:19;;22817:141:0::1;8702:416:1::0;22817:141:0::1;-1:-1:-1::0;22969:19:0::1;:31:::0;;;23018:4:::1;3553:1;22532:498:::0;;;:::o;14880:201::-;-1:-1:-1;;;;;15046:18:0;;;15014:7;15046:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14880:201::o;29536:162::-;29641:49;29657:6;29665:3;29670:7;29679:10;29641:15;:49::i;:::-;29536:162;;;;:::o;3681:238::-;3420:6;;-1:-1:-1;;;;;3420:6:0;166:10;3482:23;3474:68;;;;-1:-1:-1;;;3474:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3784:22:0;::::1;3762:110;;;::::0;-1:-1:-1;;;3762:110:0;;9325:2:1;3762:110:0::1;::::0;::::1;9307:21:1::0;9364:2;9344:18;;;9337:30;9403:34;9383:18;;;9376:62;-1:-1:-1;;;9454:18:1;;;9447:36;9500:19;;3762:110:0::1;9123:402:1::0;3762:110:0::1;3883:28;3902:8;3883:18;:28::i;18159:380::-:0;-1:-1:-1;;;;;18295:19:0;;18287:68;;;;-1:-1:-1;;;18287:68:0;;9732:2:1;18287:68:0;;;9714:21:1;9771:2;9751:18;;;9744:30;9810:34;9790:18;;;9783:62;-1:-1:-1;;;9861:18:1;;;9854:34;9905:19;;18287:68:0;9530:400:1;18287:68:0;-1:-1:-1;;;;;18374:21:0;;18366:68;;;;-1:-1:-1;;;18366:68:0;;10137:2:1;18366:68:0;;;10119:21:1;10176:2;10156:18;;;10149:30;10215:34;10195:18;;;10188:62;-1:-1:-1;;;10266:18:1;;;10259:32;10308:19;;18366:68:0;9935:398:1;18366:68:0;-1:-1:-1;;;;;18447:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18499:32;;160:25:1;;;18499:32:0;;133:18:1;18499:32:0;;;;;;;18159:380;;;:::o;18547:502::-;18682:24;18709:25;18719:5;18726:7;18709:9;:25::i;:::-;18682:52;;-1:-1:-1;;18749:16:0;:37;18745:297;;18849:6;18829:16;:26;;18803:117;;;;-1:-1:-1;;;18803:117:0;;10540:2:1;18803:117:0;;;10522:21:1;10579:2;10559:18;;;10552:30;10618:31;10598:18;;;10591:59;10667:18;;18803:117:0;10338:353:1;18803:117:0;18964:51;18973:5;18980:7;19008:6;18989:16;:25;18964:8;:51::i;24078:2158::-;-1:-1:-1;;;;;24210:18:0;;24202:68;;;;-1:-1:-1;;;24202:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24289:16:0;;24281:64;;;;-1:-1:-1;;;24281:64:0;;;;;;;:::i;:::-;24360:6;24370:1;24360:11;24356:58;;24375:28;24391:4;24397:2;24401:1;24375:15;:28::i;24356:58::-;-1:-1:-1;;;;;24450:25:0;;24426:21;24450:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24479:23:0;;;;;;:19;:23;;;;;;;;24450:52;24534:14;;24426:76;;-1:-1:-1;24513:10:0;;-1:-1:-1;;;;;24526:22:0;;;24534:14;;24526:22;:62;;;;-1:-1:-1;;;;;;24553:35:0;;;;;;:31;:35;;;;;;;;24552:36;24526:62;24619:14;;24513:75;;-1:-1:-1;24599:11:0;;-1:-1:-1;;;;;24613:20:0;;;24619:14;;24613:20;:62;;;;-1:-1:-1;;;;;;24638:37:0;;;;;;:31;:37;;;;;;;;24637:38;24613:62;24599:76;;24686:11;24710:19;;24700:6;:29;;:56;;;;-1:-1:-1;;;;;;24733:23:0;;;;;;:19;:23;;;;;;;;24700:56;24686:70;;24767:16;24794:7;3420:6;;-1:-1:-1;;;;;3420:6:0;;3347:87;24794:7;-1:-1:-1;;;;;24786:15:0;:4;-1:-1:-1;;;;;24786:15:0;;:32;;;-1:-1:-1;3420:6:0;;-1:-1:-1;;;;;24805:13:0;;;3420:6;;24805:13;24786:32;24767:51;-1:-1:-1;24829:11:0;-1:-1:-1;;;;;24843:16:0;;;;:41;;-1:-1:-1;;;;;;24863:21:0;;24877:6;24863:21;24843:41;24829:55;;24895:17;24915:11;:21;;;;24930:6;24915:21;:38;;;-1:-1:-1;24940:13:0;;-1:-1:-1;;;24940:13:0;;;;24915:38;24978:15;;24895:58;;-1:-1:-1;24978:15:0;;;;;:32;;;;;24998:12;24997:13;24978:32;24974:723;;;25036:14;;;;;;;;:34;;;25054:16;25036:34;25027:70;;;;-1:-1:-1;;;25027:70:0;;11708:2:1;25027:70:0;;;11690:21:1;11747:2;11727:18;;;11720:30;-1:-1:-1;;;11766:18:1;;;11759:52;11828:18;;25027:70:0;11506:346:1;25027:70:0;25116:5;25112:574;;;25160:21;;25150:6;:31;;25142:97;;;;-1:-1:-1;;;25142:97:0;;12059:2:1;25142:97:0;;;12041:21:1;12098:2;12078:18;;;12071:30;12137:34;12117:18;;;12110:62;-1:-1:-1;;;12188:18:1;;;12181:51;12249:19;;25142:97:0;11857:417:1;25142:97:0;25292:10;;-1:-1:-1;;;;;14604:18:0;;14572:7;14604:18;;;;;;;;;;;25266:22;;:6;:22;:::i;:::-;:36;;25258:68;;;;-1:-1:-1;;;25258:68:0;;12481:2:1;25258:68:0;;;12463:21:1;12520:2;12500:18;;;12493:30;-1:-1:-1;;;12539:18:1;;;12532:49;12598:18;;25258:68:0;12279:343:1;25258:68:0;25112:574;;;25352:6;25348:338;;;25397:21;;25387:6;:31;;25379:98;;;;-1:-1:-1;;;25379:98:0;;12829:2:1;25379:98:0;;;12811:21:1;12868:2;12848:18;;;12841:30;12907:34;12887:18;;;12880:62;-1:-1:-1;;;12958:18:1;;;12951:52;13020:19;;25379:98:0;12627:418:1;25348:338:0;-1:-1:-1;;;;;25504:35:0;;;;;;:31;:35;;;;;;;;25503:36;:78;;;;-1:-1:-1;;;;;;25544:37:0;;;;;;:31;:37;;;;;;;;25543:38;25503:78;25499:187;;;25636:10;;-1:-1:-1;;;;;14604:18:0;;14572:7;14604:18;;;;;;;;;;;25610:22;;:6;:22;:::i;:::-;:36;;25602:68;;;;-1:-1:-1;;;25602:68:0;;12481:2:1;25602:68:0;;;12463:21:1;12520:2;12500:18;;;12493:30;-1:-1:-1;;;12539:18:1;;;12532:49;12598:18;;25602:68:0;12279:343:1;25602:68:0;25712:13;;-1:-1:-1;;;25712:13:0;;;;25711:14;:50;;;;-1:-1:-1;;;;;;25730:31:0;;;;;;:25;:31;;;;;;;;25729:32;25711:50;:93;;;;-1:-1:-1;;;;;;25779:25:0;;;;;;:19;:25;;;;;;;;25778:26;25711:93;:121;;;;-1:-1:-1;;;;;;25809:23:0;;;;;;:19;:23;;;;;;;;25808:24;25711:121;25707:454;;;25898:4;25849:28;14604:18;;;;;;;;;;;25958:19;;25934:43;;;;;;;25996:28;;;26008:16;26007:17;25996:28;25992:158;;;26045:13;:20;;-1:-1:-1;;;;26045:20:0;-1:-1:-1;;;26045:20:0;;;26084:10;:8;:10::i;:::-;26113:13;:21;;-1:-1:-1;;;;26113:21:0;;;25992:158;25834:327;;25707:454;26171:57;26188:4;26194:2;26198:6;26206;26214;26222:5;26171:16;:57::i;:::-;24191:2045;;;;;;;24078:2158;;;:::o;32184:241::-;-1:-1:-1;;;;;32270:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;32270:39:0;;;;;;;32320:38;32270:31;:39;32320:25;:38::i;3927:191::-;4020:6;;;-1:-1:-1;;;;;4037:17:0;;;-1:-1:-1;;;;;;4037:17:0;;;;;;;4070:40;;4020:6;;;4037:17;4020:6;;4070:40;;4001:16;;4070:40;3990:128;3927:191;:::o;28026:1502::-;-1:-1:-1;;;;;28184:20:0;;28176:59;;;;-1:-1:-1;;;28176:59:0;;13252:2:1;28176:59:0;;;13234:21:1;13291:2;13271:18;;;13264:30;13330:28;13310:18;;;13303:56;13376:18;;28176:59:0;13050:350:1;28176:59:0;28270:16;;;28284:1;28270:16;;;;;;;;28246:21;;28270:16;;;;;;;;-1:-1:-1;;28307:16:0;;:23;;;-1:-1:-1;;;28307:23:0;;;;28246:40;;-1:-1:-1;;;;;;28307:16:0;;;;:21;;-1:-1:-1;28307:23:0;;;;;;;;;;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28297:4;28302:1;28297:7;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;28297:33:0;;;-1:-1:-1;;;;;28297:33:0;;;;;28359:4;28341;28346:1;28341:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28341:23:0;;;-1:-1:-1;;;;;28341:23:0;;;;;28375:18;28409:10;28408:11;:47;;;-1:-1:-1;28444:10:0;28424:31;;;;:19;:31;;;;;;;;28423:32;28408:47;28404:1117;;;28495:4;28500:1;28495:7;;;;;;;;:::i;:::-;;;;;;;;;;;28488:30;;-1:-1:-1;;;28488:30:0;;-1:-1:-1;;;;;3481:32:1;;;28488:30:0;;;3463:51:1;28488:25:0;;;;;;3436:18:1;;28488:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28533:16;;:229;;-1:-1:-1;;;28533:229:0;;28472:46;;-1:-1:-1;;;;;;28533:16:0;;:67;;28626:7;;28533:229;;:16;;28687:4;;28710:3;;28732:15;;28533:229;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28404:1117;;;28799:10;:28;;;;;28826:1;28813:10;;:14;28799:28;28795:330;;;28848:11;28887:3;28873:10;;28863:7;:20;;;;:::i;:::-;28862:28;;;;:::i;:::-;28848:42;;28909:18;28953:3;28941:8;;28931:7;:18;;;;:::i;:::-;28930:26;;;;:::i;:::-;28909:47;-1:-1:-1;28985:13:0;28995:3;28985:7;:13;:::i;:::-;28975:23;-1:-1:-1;29021:14:0;;29017:93;;29060:22;29066:3;29071:10;29060:5;:22::i;:::-;29084:7;;;;;;29017:93;28829:296;;28795:330;29140:10;29153;:34;;29184:3;29153:34;;;29174:6;29153:34;29140:47;-1:-1:-1;29206:11:0;;29202:308;;29238:16;;:256;;-1:-1:-1;;;29238:256:0;;-1:-1:-1;;;;;29238:16:0;;;;:67;;29335:7;;29238:256;;:16;;29408:4;;29435:2;;29460:15;;29238:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29202:308;28780:741;28404:1117;28165:1363;;28026:1502;;;;:::o;16437:708::-;-1:-1:-1;;;;;16568:18:0;;16560:68;;;;-1:-1:-1;;;16560:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16647:16:0;;16639:64;;;;-1:-1:-1;;;16639:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16789:15:0;;16767:19;16789:15;;;;;;;;;;;16837:21;;;;16815:109;;;;-1:-1:-1;;;16815:109:0;;15430:2:1;16815:109:0;;;15412:21:1;15469:2;15449:18;;;15442:30;15508:34;15488:18;;;15481:62;-1:-1:-1;;;15559:18:1;;;15552:36;15605:19;;16815:109:0;15228:402:1;16815:109:0;-1:-1:-1;;;;;16960:15:0;;;:9;:15;;;;;;;;;;;16978:20;;;16960:38;;17020:13;;;;;;;;:23;;16992:6;;16960:9;17020:23;;16992:6;;17020:23;:::i;:::-;;;;;;;;17076:2;-1:-1:-1;;;;;17061:26:0;17070:4;-1:-1:-1;;;;;17061:26:0;;17080:6;17061:26;;;;160:25:1;;148:2;133:18;;14:177;17061:26:0;;;;;;;;17100:37;32433:378;30077:1781;30160:4;30116:23;14604:18;;;;;;;;;;;30116:50;;30177:25;30263:13;;30227:19;;30205;;:41;;;;:::i;:::-;:71;;;;:::i;:::-;30317:8;;-1:-1:-1;;;;;30317:8:0;30287:17;14604:18;;;;;;;;;;;30177:99;;-1:-1:-1;30341:20:0;;;:46;;-1:-1:-1;30365:22:0;;30341:46;30337:59;;;30389:7;;;30077:1781::o;30337:59::-;30428:19;;30410:15;:37;30406:107;;;30482:19;;30464:37;;30406:107;30523:23;30637:1;30604:17;30568:19;;30550:15;:37;;;;:::i;:::-;30549:72;;;;:::i;:::-;:89;;;;:::i;:::-;30523:115;-1:-1:-1;30649:26:0;30678:65;30733:9;30678:36;:15;30523:115;30678:19;:36::i;:::-;:54;;:65::i;:::-;30649:94;-1:-1:-1;30782:21:0;30814:37;30649:94;30814:17;:37::i;:::-;30862:18;30883:44;:21;30909:17;30883:25;:44::i;:::-;30862:65;;30938:23;30964:82;31018:17;30964:35;30979:19;;30964:10;:14;;:35;;;;:::i;:::-;:39;;:82::i;:::-;30938:108;;31057:17;31077:76;31125:17;31077:29;31092:13;;31077:10;:14;;:29;;;;:::i;:76::-;31057:96;-1:-1:-1;31164:23:0;31057:96;31190:28;31203:15;31190:10;:28;:::i;:::-;:40;;;;:::i;:::-;31164:66;;31265:1;31247:15;:19;:42;;;;;31288:1;31270:15;:19;31247:42;31243:280;;;31306:47;31320:15;31337;31306:13;:47::i;:::-;31477:19;;31373:138;;;15837:25:1;;;15893:2;15878:18;;15871:34;;;15921:18;;;15914:34;;;;31373:138:0;;;;;;15825:2:1;31373:138:0;;;31243:280;31557:1;31535:19;:23;;;31569:19;:23;;;31603:13;:17;;;31673:14;;31665:80;;-1:-1:-1;;;;;31673:14:0;;;;31715:15;;31557:1;31665:80;31557:1;31665:80;31715:15;31673:14;31665:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31790:8:0;;31782:68;;31633:112;;-1:-1:-1;31757:19:0;;-1:-1:-1;;;;;31790:8:0;;;;31826:9;;31757:19;31782:68;31757:19;31782:68;31826:9;31790:8;31782:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;30077:1781:0:o;26244:1287::-;-1:-1:-1;;;;;26455:25:0;;26430:22;26455:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26484:23:0;;;;;;:19;:23;;;;;;;;26455:52;26535:10;;26430:77;;-1:-1:-1;26535:14:0;;26552:26;;;;26564:7;:14;;-1:-1:-1;;26564:14:0;26574:4;26564:14;;;26552:26;26593:8;:26;;;;-1:-1:-1;26606:13:0;;-1:-1:-1;;;26606:13:0;;;;26605:14;26593:26;:48;;;;;26624:17;26623:18;26593:48;26589:890;;;26662:7;;;;:33;;;;-1:-1:-1;26681:14:0;;-1:-1:-1;;;;;26673:22:0;;;26681:14;;26673:22;;26662:33;26658:46;;;26697:7;;;;26658:46;26734:10;;26779:13;;26807:151;;;;26859:18;;26846:10;;:31;;;;:::i;:::-;26838:39;;26924:18;;26908:13;;:34;;;;:::i;:::-;26896:46;;26807:151;26976:5;26972:148;;;27023:17;;27010:10;;:30;;;;:::i;:::-;27002:38;;27087:17;;27071:13;;:33;;;;:::i;:::-;27059:45;;26972:148;27134:12;27149:26;27171:3;27149:17;:6;27160:5;27149:10;:17::i;:26::-;27134:41;;27238:5;27221:13;;27214:4;:20;;;;:::i;:::-;27213:30;;;;:::i;:::-;27190:19;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;27302:5:0;;-1:-1:-1;27282:16:0;27289:9;27282:4;:16;:::i;:::-;27281:26;;;;:::i;:::-;27258:19;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;27347:7:0;;27358:5;;27340:14;;:4;:14;:::i;:::-;27339:24;;;;:::i;:::-;27322:13;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;;27382:8:0;;27378:61;;27394:42;27410:4;27424;27431;27394:15;:42::i;:::-;27453:14;27463:4;27453:14;;:::i;:::-;;;26643:836;;;26589:890;27490:33;27506:4;27512:2;27516:6;27490:15;:33::i;:::-;26419:1112;;26244:1287;;;;;;:::o;17560:591::-;-1:-1:-1;;;;;17644:21:0;;17636:67;;;;-1:-1:-1;;;17636:67:0;;16161:2:1;17636:67:0;;;16143:21:1;16200:2;16180:18;;;16173:30;16239:34;16219:18;;;16212:62;-1:-1:-1;;;16290:18:1;;;16283:31;16331:19;;17636:67:0;15959:397:1;17636:67:0;-1:-1:-1;;;;;17803:18:0;;17778:22;17803:18;;;;;;;;;;;17840:24;;;;17832:71;;;;-1:-1:-1;;;17832:71:0;;16563:2:1;17832:71:0;;;16545:21:1;16602:2;16582:18;;;16575:30;16641:34;16621:18;;;16614:62;-1:-1:-1;;;16692:18:1;;;16685:32;16734:19;;17832:71:0;16361:398:1;17832:71:0;-1:-1:-1;;;;;17939:18:0;;:9;:18;;;;;;;;;;17960:23;;;17939:44;;18005:12;:22;;17977:6;;17939:9;18005:22;;17977:6;;18005:22;:::i;:::-;;;;-1:-1:-1;;18045:37:0;;160:25:1;;;18071:1:0;;-1:-1:-1;;;;;18045:37:0;;;;;148:2:1;133:18;18045:37:0;;;;;;;32433:378;;;:::o;1917:98::-;1975:7;2002:5;2006:1;2002;:5;:::i;:::-;1995:12;1917:98;-1:-1:-1;;;1917:98:0:o;27539:479::-;27630:16;;;27644:1;27630:16;;;;;;;;27606:21;;27630:16;;;;;;;;;;-1:-1:-1;27630:16:0;27606:40;;27675:4;27657;27662:1;27657:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27657:23:0;;;:7;;;;;;;;;;:23;;;;27701:16;;:23;;;-1:-1:-1;;;27701:23:0;;;;:16;;;;;:21;;:23;;;;;27657:7;;27701:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27691:4;27696:1;27691:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27691:33:0;;;:7;;;;;;;;;:33;27769:16;;27737:63;;27754:4;;27769:16;27788:11;27737:8;:63::i;:::-;27813:16;;:197;;-1:-1:-1;;;27813:197:0;;-1:-1:-1;;;;;27813:16:0;;;;:67;;:197;;27895:11;;27813:16;;27937:4;;27964;;27984:15;;27813:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2023:98;2081:7;2108:5;2112:1;2108;:5;:::i;2129:98::-;2187:7;2214:5;2218:1;2214;:5;:::i;29706:363::-;29820:16;;29788:63;;29805:4;;-1:-1:-1;;;;;29820:16:0;29839:11;29788:8;:63::i;:::-;29862:16;;-1:-1:-1;;;;;29862:16:0;:32;29902:9;29935:4;29955:11;29862:16;;30013:7;3420:6;;-1:-1:-1;;;;;3420:6:0;;3347:87;30013:7;29862:199;;;;;;-1:-1:-1;;;;;;29862:199:0;;;-1:-1:-1;;;;;17710:15:1;;;29862:199:0;;;17692:34:1;17742:18;;;17735:34;;;;17785:18;;;17778:34;;;;17828:18;;;17821:34;17892:15;;;17871:19;;;17864:44;30035:15:0;17924:19:1;;;17917:35;17626:19;;29862:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29706:363;;:::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:160::-;2618:20;;2674:13;;2667:21;2657:32;;2647:60;;2703:1;2700;2693:12;2718:315;2783:6;2791;2844:2;2832:9;2823:7;2819:23;2815:32;2812:52;;;2860:1;2857;2850:12;2812:52;2899:9;2886:23;2918:31;2943:5;2918:31;:::i;:::-;2968:5;-1:-1:-1;2992:35:1;3023:2;3008:18;;2992:35;:::i;:::-;2982:45;;2718:315;;;;;:::o;3038:247::-;3097:6;3150:2;3138:9;3129:7;3125:23;3121:32;3118:52;;;3166:1;3163;3156:12;3118:52;3205:9;3192:23;3224:31;3249:5;3224:31;:::i;3733:388::-;3801:6;3809;3862:2;3850:9;3841:7;3837:23;3833:32;3830:52;;;3878:1;3875;3868:12;3830:52;3917:9;3904:23;3936:31;3961:5;3936:31;:::i;:::-;3986:5;-1:-1:-1;4043:2:1;4028:18;;4015:32;4056:33;4015:32;4056:33;:::i;:::-;4108:7;4098:17;;;3733:388;;;;;:::o;4126:525::-;4209:6;4217;4225;4233;4286:3;4274:9;4265:7;4261:23;4257:33;4254:53;;;4303:1;4300;4293:12;4254:53;4342:9;4329:23;4361:31;4386:5;4361:31;:::i;:::-;4411:5;-1:-1:-1;4468:2:1;4453:18;;4440:32;4481:33;4440:32;4481:33;:::i;:::-;4533:7;-1:-1:-1;4587:2:1;4572:18;;4559:32;;-1:-1:-1;4610:35:1;4641:2;4626:18;;4610:35;:::i;:::-;4600:45;;4126:525;;;;;;;:::o;4656:380::-;4735:1;4731:12;;;;4778;;;4799:61;;4853:4;4845:6;4841:17;4831:27;;4799:61;4906:2;4898:6;4895:14;4875:18;4872:38;4869:161;;4952:10;4947:3;4943:20;4940:1;4933:31;4987:4;4984:1;4977:15;5015:4;5012:1;5005:15;4869:161;;4656:380;;;:::o;5041:356::-;5243:2;5225:21;;;5262:18;;;5255:30;5321:34;5316:2;5301:18;;5294:62;5388:2;5373:18;;5041:356::o;5402:127::-;5463:10;5458:3;5454:20;5451:1;5444:31;5494:4;5491:1;5484:15;5518:4;5515:1;5508:15;5534:168;5607:9;;;5638;;5655:15;;;5649:22;;5635:37;5625:71;;5676:18;;:::i;5707:217::-;5747:1;5773;5763:132;;5817:10;5812:3;5808:20;5805:1;5798:31;5852:4;5849:1;5842:15;5880:4;5877:1;5870:15;5763:132;-1:-1:-1;5909:9:1;;5707:217::o;6345:125::-;6410:9;;;6431:10;;;6428:36;;;6444:18;;:::i;10696:401::-;10898:2;10880:21;;;10937:2;10917:18;;;10910:30;10976:34;10971:2;10956:18;;10949:62;-1:-1:-1;;;11042:2:1;11027:18;;11020:35;11087:3;11072:19;;10696:401::o;11102:399::-;11304:2;11286:21;;;11343:2;11323:18;;;11316:30;11382:34;11377:2;11362:18;;11355:62;-1:-1:-1;;;11448:2:1;11433:18;;11426:33;11491:3;11476:19;;11102:399::o;13537:251::-;13607:6;13660:2;13648:9;13639:7;13635:23;13631:32;13628:52;;;13676:1;13673;13666:12;13628:52;13708:9;13702:16;13727:31;13752:5;13727:31;:::i;13793:127::-;13854:10;13849:3;13845:20;13842:1;13835:31;13885:4;13882:1;13875:15;13909:4;13906:1;13899:15;13925:184;13995:6;14048:2;14036:9;14027:7;14023:23;14019:32;14016:52;;;14064:1;14061;14054:12;14016:52;-1:-1:-1;14087:16:1;;13925:184;-1:-1:-1;13925:184:1:o;14114:461::-;14167:3;14205:5;14199:12;14232:6;14227:3;14220:19;14258:4;14287:2;14282:3;14278:12;14271:19;;14324:2;14317:5;14313:14;14345:1;14355:195;14369:6;14366:1;14363:13;14355:195;;;14434:13;;-1:-1:-1;;;;;14430:39:1;14418:52;;14490:12;;;;14525:15;;;;14466:1;14384:9;14355:195;;;-1:-1:-1;14566:3:1;;14114:461;-1:-1:-1;;;;;14114:461:1:o;14580:510::-;14851:6;14840:9;14833:25;14894:3;14889:2;14878:9;14874:18;14867:31;14814:4;14915:57;14967:3;14956:9;14952:19;14944:6;14915:57;:::i;:::-;-1:-1:-1;;;;;15008:32:1;;;;15003:2;14988:18;;14981:60;-1:-1:-1;15072:2:1;15057:18;15050:34;14907:65;14580:510;-1:-1:-1;;14580:510:1:o;15095:128::-;15162:9;;;15183:11;;;15180:37;;;15197:18;;:::i;16764:582::-;17063:6;17052:9;17045:25;17106:6;17101:2;17090:9;17086:18;17079:34;17149:3;17144:2;17133:9;17129:18;17122:31;17026:4;17170:57;17222:3;17211:9;17207:19;17199:6;17170:57;:::i;:::-;-1:-1:-1;;;;;17263:32:1;;;;17258:2;17243:18;;17236:60;-1:-1:-1;17327:3:1;17312:19;17305:35;17162:65;16764:582;-1:-1:-1;;;16764:582:1:o;17963:306::-;18051:6;18059;18067;18120:2;18108:9;18099:7;18095:23;18091:32;18088:52;;;18136:1;18133;18126:12;18088:52;18165:9;18159:16;18149:26;;18215:2;18204:9;18200:18;18194:25;18184:35;;18259:2;18248:9;18244:18;18238:25;18228:35;;17963:306;;;;;:::o

Swarm Source

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