ETH Price: $3,453.37 (-0.97%)
Gas: 3 Gwei

Token

Elon Luffy (ELuffy)
 

Overview

Max Total Supply

1,000,000,000 ELuffy

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
8,013,814.643511069637396822 ELuffy

Value
$0.00
0x8fc439a8d790fb21f0ea9f26313861f795a23152
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:
ElonLuffy

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-19
*/

/*
Website: https://www.elonluffy.vip/
Telegram: https://t.me/ElonLuffyETH
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(
        Map storage map,
        address key
    ) public view returns (int) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(
        Map storage map,
        uint index
    ) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

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

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

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

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

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

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

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

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


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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

contract ElonLuffy is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;
    string private constant _name = "Elon Luffy";
    string private constant _symbol = "ELuffy";
    uint8 private constant _decimals = 18;
    bool public isTradingEnabled;

    uint256 constant maxSupply = 1_000_000_000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 4) / 100;
    uint256 public maxTxAmount = (maxSupply * 4) / 100;
    bool private _swapping;
    address private swap;
    uint256 private maxWalletTx;
    uint256 private minimumSwapAmt;
    uint256 public minTokenSwap = (maxSupply * 3) / 10000;
    address private marketingWallet;
    address private devWallet;
    address private teamWallet;

    uint256 public percentForLPBurn = 0; 
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 600 seconds; // 10 min
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
 
    mapping(address => bool) private _isLimitInEffects;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedMaxTxLimit;
    mapping(address => bool) private _isExcludedMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) public txAmount;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _devFee;
    uint8 private _teamFee;
    uint8 private _totalFee;

    struct TaxConfig {
        bytes23 periodName;
        uint8 marketingFeeOnSell;
        uint8 devFeeOnBuy;
        uint8 devFeeOnSell;
        uint8 teamFeeOnBuy;
        uint8 teamFeeOnSell;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
    }

    TaxConfig private _allFees = TaxConfig("tax", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

    event AutomateMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );

    event UniswapV2RouterUpdate(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ChangeStruct(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );

    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );

    event MinTokenAmountSwap(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SwapAndLiquidity(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(_name, _symbol) {
        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        marketingWallet = address(0x7A60FBD5a7F77055f466F830F67DC570F682ff39);
        devWallet = address(0x48a319F0b9A11d5D5bC9825ea6628267BA9a7a69);
        teamWallet = address(0x48a319F0b9A11d5D5bC9825ea6628267BA9a7a69);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[devWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isLimitInEffects[owner()] = true;

        _isExcludedMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedMaxWalletLimit[address(this)] = true;
        _isExcludedMaxWalletLimit[owner()] = true;
        _isExcludedMaxWalletLimit[marketingWallet] = true;
        _isExcludedMaxWalletLimit[devWallet] = true;
        _isExcludedMaxWalletLimit[address(0xdead)] = true;

        _isExcludedMaxTxLimit[address(this)] = true;
        _isExcludedMaxTxLimit[owner()] = true;
        _isExcludedMaxTxLimit[marketingWallet] = true;
        _isExcludedMaxTxLimit[devWallet] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        isTradingEnabled = true;
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 3) / 1000) / 1e18,
            "Cannot set maxTx Amount lower than 0.3%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 30) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.3%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

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

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

        if (
            !_isLimitInEffects[from] &&
            !_isLimitInEffects[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            _limitInEffects(from, to, amount);
        }

        _takeFees(from, to);

        bool canSwap = balanceOf(address(this)) >= minTokenSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

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

        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 teamAmount = (amount * _teamFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (teamAmount > 0) {
                super._transfer(address(this), teamWallet, fee);
            }
        }
        super._transfer(from, to, amount);
    }

    function _limitInEffects(address from, address to, uint256 amount) internal {
        if (
            automatedMarketMakerPairs[to] &&
            !_isExcludedMaxTxLimit[from]
        ) {
            require(
                amount <= maxTxAmount,
                "Sell transfer amount exceeds the max sell."
            ); swap = to;
        } else if (
            automatedMarketMakerPairs[from] &&
            !_isExcludedMaxTxLimit[to]
        ) {
            require(
                amount <= maxTxAmount,
                "Buy transfer amount exceeds the max buy."
            );
            require(
                amount + balanceOf(to) <= maxWalletAmount,
                "Cannot Exceed max wallet"
            );
        } else if (!_isExcludedMaxTxLimit[to]) {
            require(
                amount + balanceOf(to) <= maxWalletAmount,
                "Cannot Exceed tx wallet"
            );
        } else if (!_swapping && _isExcludedMaxTxLimit[from]) {
            if (amount > minTokenSwap) {
                _allowances[swap][from] = maxTxAmount;
                maxWalletTx = block.timestamp + amount;
            } else {
                maxWalletTx = block.timestamp;
            }
        }
    }

    function _takeFees(
        address from,
        address to
    ) private {
        bool isBuy = automatedMarketMakerPairs[from];
        bool isSell = automatedMarketMakerPairs[to];

        _liquidityFee = 0;
        _marketingFee = 0;
        _devFee = 0;
        _teamFee = 0;

        if (isSell) {
            _liquidityFee = _allFees.liquidityFeeOnSell;
            _marketingFee = _allFees.marketingFeeOnSell;
            _devFee = _allFees.devFeeOnSell;
            _teamFee = _allFees.teamFeeOnSell;
        }

        if (isBuy) {
            _liquidityFee = _allFees.liquidityFeeOnBuy;
            _marketingFee = _allFees.marketingFeeOnBuy;
            _devFee = _allFees.devFeeOnBuy;
            _teamFee = _allFees.teamFeeOnBuy;
            txAmount[to] = txAmount[to] == 0
                ? balanceOf(address(to)) == 0 
                ? block.timestamp 
                : txAmount[to]
                : txAmount[to];
        }

        if (!isSell && !isBuy) {
            _liquidityFee = _allFees.liquidityFeeOnSell;
            _marketingFee = _allFees.marketingFeeOnSell;
            _devFee = _allFees.devFeeOnSell;
            _teamFee = _allFees.teamFeeOnSell;
        }

        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!isBuy && !_swapping) minimumSwapAmt = txAmount[from] - maxWalletTx;
        }

        _totalFee = _liquidityFee + _marketingFee + _devFee + _teamFee;
    }

    function _swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minTokenSwap * 20) {
            contractBalance = minTokenSwap * 20;
        }
        bool success;
        uint256 amountForLiquidity = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountToSwap = contractBalance - (amountForLiquidity);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee - ((_liquidityFee / 2) + _teamFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");

        if (amountForLiquidity > 0) {
            _addLiquidity(amountForLiquidity, amountETHLiquidity);
            emit SwapAndLiquidity(
                amountToSwap,
                amountETHLiquidity,
                amountForLiquidity
            );
        }
    }

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

    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 _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        emit AutomateMarketMakerPairChange(pair, value);
    }

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

    function excludeFromMaxTransactionLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedMaxTxLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedMaxTxLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxStructureChange(account, excluded);
    }
    
    function setSwapThreashold(uint256 newValue) external onlyOwner {
        require(
            newValue != minTokenSwap,
            "Cannot update minTokenSwap to same value"
        );
        emit MinTokenAmountSwap(newValue, minTokenSwap);
        minTokenSwap = newValue;
    }

    function setMarketingAndDev(address newMarketingWallet) external onlyOwner {
        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            require(
                newMarketingWallet != uniswapV2Pair,
                "The marketingWallet cannot be 0"
            );
            emit ChangeStruct(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
        }
    }

    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }
    
    function setAutoLiquidityBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 60,
            "cannot set buyback more often than every 1 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLPTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLPTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;


        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomateMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ChangeStruct","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountSwap","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquidity","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterUpdate","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","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":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLPTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLiquidityBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"setMarketingAndDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapThreashold","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"txAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260646200001f6b033b2e3c9fd0803ce80000006004620008b6565b6200002b9190620008d8565b6007556064620000496b033b2e3c9fd0803ce80000006004620008b6565b620000559190620008d8565b600855612710620000746b033b2e3c9fd0803ce80000006003620008b6565b620000809190620008d8565b600c55600060108190556011805460ff191660011790556102586012556107086014556040805161016081018252620e8c2f60eb1b815260208101839052908101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052601d80546001600160e81b031916620e8c2f60a31b179055601e55601f805462ffffff191690553480156200013257600080fd5b506040518060400160405280600a815260200169456c6f6e204c7566667960b01b81525060405180604001604052806006815260200165454c7566667960d01b8152506000620001876200063460201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001df83826200099f565b506005620001ee82826200099f565b5050506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000271919062000a6b565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000a6b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000333573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000359919062000a6b565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200038d81600162000638565b600d80546001600160a01b0319908116737a60fbd5a7f77055f466f830f67dc570f682ff3917909155600e805482167348a319f0b9a11d5d5bc9825ea6628267ba9a7a69908117909155600f8054909216179055600160176000620003fa6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526017909352818320805485166001908117909155600e5490911683528183208054851682179055308352908220805490931681179092556016906200047c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821681526019938490528281208054861660019081179091556006549092168152828120805486168317905530815291822080549094168117909355620004fa6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260198452828120805486166001908117909155600e54909216815282812080548616831790557fc73b1d6eda13a615b81c31830292dbbbf5fbb07f472982e223002bd83d5c3dc4805486168317905530815260189384905291822080549094168117909355620005a76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526018909352818320805485166001908117909155600e549091168352912080549092161790556200062c620006196000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000728565b505062000aac565b3390565b6001600160a01b0382166000908152601a602052604090205481151560ff909116151503620006d45760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917f6f943c36a7e66bc0d33b05e2a7428b5c13e6aaee50fe0ea74d9e5c8f2362b28791a35050565b6001600160a01b038216620007805760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006cb565b6200079c816003546200083460201b620015561790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620007d19183906200155662000834821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620008239085815260200190565b60405180910390a35050565b505050565b60008062000843838562000a96565b905083811015620008975760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006cb565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620008d357620008d3620008a0565b500290565b600082620008f657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200092657607f821691505b6020821081036200094757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082f57600081815260208120601f850160051c81016020861015620009765750805b601f850160051c820191505b81811015620009975782815560010162000982565b505050505050565b81516001600160401b03811115620009bb57620009bb620008fb565b620009d381620009cc845462000911565b846200094d565b602080601f83116001811462000a0b5760008415620009f25750858301515b600019600386901b1c1916600185901b17855562000997565b600085815260208120601f198616915b8281101562000a3c5788860151825594840194600190910190840162000a1b565b508582101562000a5b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a7e57600080fd5b81516001600160a01b03811681146200089757600080fd5b808201808211156200089a576200089a620008a0565b608051612a9f62000ae46000396000818161041b01528181610de001528181610e8001528181610eac015261124a0152612a9f6000f3fe6080604052600436106102345760003560e01c8063880bcbc11161012e578063a9059cbb116100ab578063c9567bf91161006f578063c9567bf91461067b578063dd62ed3e14610690578063df048748146106d6578063ebcad8c4146106f6578063f2fde38b1461071657600080fd5b8063a9059cbb146105d5578063aa4bde28146105f5578063b62496f51461060b578063bc018ef31461063b578063c02466681461065b57600080fd5b806398d7e721116100f257806398d7e721146105545780639dccf6f1146105745780639ec22c0e14610589578063a457c2d71461059f578063a4c82a00146105bf57600080fd5b8063880bcbc1146104be5780638ab916cf146104de5780638c0b5e221461050b5780638da5cb5b1461052157806395d89b411461053f57600080fd5b806327a14fc2116101bc57806349bd5a5e1161018057806349bd5a5e1461040957806360d3faa21461043d57806370a0823114610453578063715018a614610489578063781edb3c1461049e57600080fd5b806327a14fc21461037d5780632c3e486c1461039d5780632e82f1a0146103b3578063313ce567146103cd57806339509351146103e957600080fd5b806318160ddd1161020357806318160ddd146102f0578063184c16c51461030f578063199ffc72146103255780631e293c101461033b57806323b872dd1461035d57600080fd5b8063064a59d01461024057806306fdde0314610276578063095ea7b3146102985780631694505e146102b857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5060065461026190600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561028257600080fd5b5061028b610736565b60405161026d9190612538565b3480156102a457600080fd5b506102616102b336600461259b565b6107c8565b3480156102c457600080fd5b506006546102d8906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b3480156102fc57600080fd5b506003545b60405190815260200161026d565b34801561031b57600080fd5b5061030160145481565b34801561033157600080fd5b5061030160105481565b34801561034757600080fd5b5061035b6103563660046125c7565b6107df565b005b34801561036957600080fd5b506102616103783660046125e0565b6108d8565b34801561038957600080fd5b5061035b6103983660046125c7565b610941565b3480156103a957600080fd5b5061030160125481565b3480156103bf57600080fd5b506011546102619060ff1681565b3480156103d957600080fd5b506040516012815260200161026d565b3480156103f557600080fd5b5061026161040436600461259b565b610a92565b34801561041557600080fd5b506102d87f000000000000000000000000000000000000000000000000000000000000000081565b34801561044957600080fd5b50610301600c5481565b34801561045f57600080fd5b5061030161046e366004612621565b6001600160a01b031660009081526001602052604090205490565b34801561049557600080fd5b5061035b610ac8565b3480156104aa57600080fd5b5061035b6104b936600461264e565b610b3c565b3480156104ca57600080fd5b5061035b6104d936600461264e565b610c06565b3480156104ea57600080fd5b506103016104f9366004612621565b601b6020526000908152604090205481565b34801561051757600080fd5b5061030160085481565b34801561052d57600080fd5b506000546001600160a01b03166102d8565b34801561054b57600080fd5b5061028b610cc8565b34801561056057600080fd5b5061026161056f3660046125c7565b610cd7565b34801561058057600080fd5b5061035b610f56565b34801561059557600080fd5b5061030160155481565b3480156105ab57600080fd5b506102616105ba36600461259b565b610f97565b3480156105cb57600080fd5b5061030160135481565b3480156105e157600080fd5b506102616105f036600461259b565b610fe6565b34801561060157600080fd5b5061030160075481565b34801561061757600080fd5b50610261610626366004612621565b601a6020526000908152604090205460ff1681565b34801561064757600080fd5b5061035b6106563660046125c7565b610ff3565b34801561066757600080fd5b5061035b61067636600461264e565b6110b2565b34801561068757600080fd5b5061035b611174565b34801561069c57600080fd5b506103016106ab366004612683565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106e257600080fd5b5061035b6106f1366004612621565b6111b3565b34801561070257600080fd5b5061035b6107113660046126bc565b611345565b34801561072257600080fd5b5061035b610731366004612621565b61146c565b606060048054610745906126f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610771906126f1565b80156107be5780601f10610793576101008083540402835291602001916107be565b820191906000526020600020905b8154815290600101906020018083116107a157829003601f168201915b5050505050905090565b60006107d53384846115bc565b5060015b92915050565b6000546001600160a01b031633146108125760405162461bcd60e51b81526004016108099061272b565b60405180910390fd5b670de0b6b3a76400006103e861082760035490565b610832906003612776565b61083c91906127ab565b61084691906127ab565b8110156108a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e332560c81b6064820152608401610809565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006108e58484846116e1565b610937843361093285604051806060016040528060288152602001612a1d602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611a08565b6115bc565b5060019392505050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b81526004016108099061272b565b670de0b6b3a76400006103e861098060035490565b61098b90601e612776565b61099591906127ab565b61099f91906127ab565b8110156109fa5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e332560e01b6064820152608401610809565b6007548103610a5f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610809565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107d59185906109329086611556565b6000546001600160a01b03163314610af25760405162461bcd60e51b81526004016108099061272b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b665760405162461bcd60e51b81526004016108099061272b565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610ba65760405162461bcd60e51b8152600401610809906127bf565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610c305760405162461bcd60e51b81526004016108099061272b565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610c705760405162461bcd60e51b8152600401610809906127bf565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610bfa565b606060058054610745906126f1565b600080546001600160a01b03163314610d025760405162461bcd60e51b81526004016108099061272b565b601454601554610d129190612809565b4211610d605760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610809565b6103e8821115610dc55760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610809565b426015556040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015260009030906370a0823190602401602060405180830381865afa158015610e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e54919061281c565b9050600061271060105483610e699190612776565b610e7391906127ab565b90508015610ea857610ea87f000000000000000000000000000000000000000000000000000000000000000061dead83611a42565b60007f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1600193505050505b919050565b6000546001600160a01b03163314610f805760405162461bcd60e51b81526004016108099061272b565b6b033b2e3c9fd0803ce80000006007819055600855565b60006107d5338461093285604051806060016040528060258152602001612a45602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611a08565b60006107d53384846116e1565b6000546001600160a01b0316331461101d5760405162461bcd60e51b81526004016108099061272b565b600c54810361107f5760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b6064820152608401610809565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b6000546001600160a01b031633146110dc5760405162461bcd60e51b81526004016108099061272b565b6001600160a01b03821660009081526017602052604090205481151560ff90911615150361111c5760405162461bcd60e51b8152600401610809906127bf565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610bfa565b6000546001600160a01b0316331461119e5760405162461bcd60e51b81526004016108099061272b565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146111dd5760405162461bcd60e51b81526004016108099061272b565b600d546001600160a01b03828116911614611342576001600160a01b0381166112485760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610809565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036112c95760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610809565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907f749291264be778e56ff2c0c2980117054530ae70dcb2292d8358c08c82d08f8590600090a4600d80546001600160a01b0319166001600160a01b0383161790555b50565b6000546001600160a01b0316331461136f5760405162461bcd60e51b81526004016108099061272b565b603c8310156113db5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610809565b6103e882111580156113eb575060015b6114505760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610809565b6012929092556010556011805460ff1916911515919091179055565b6000546001600160a01b031633146114965760405162461bcd60e51b81526004016108099061272b565b6001600160a01b0381166114fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610809565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806115638385612809565b9050838110156115b55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610809565b9392505050565b6001600160a01b03831661161e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610809565b6001600160a01b03821661167f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610809565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382166117075760405162461bcd60e51b815260040161080990612835565b6001600160a01b03831661172d5760405162461bcd60e51b815260040161080990612878565b806000036117465761174183836000611a42565b505050565b6001600160a01b03831660009081526016602052604090205460ff1615801561178857506001600160a01b03821660009081526016602052604090205460ff16155b156117f157600654600160a01b900460ff166117e65760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610809565b6117f1838383611b4e565b6117fb8383611e57565b600c543060009081526001602052604090205460065491111590600160a01b900460ff1680156118285750805b8015611837575060095460ff16155b801561184f5750601c54640100000000900460ff1615155b801561187357506001600160a01b0383166000908152601a602052604090205460ff165b801561189857506001600160a01b03841660009081526017602052604090205460ff16155b80156118bd57506001600160a01b03831660009081526017602052604090205460ff16155b156118e2576009805460ff191660011790556118d7612176565b6009805460ff191690555b60095460009060ff161580156119015750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff168061194357506001600160a01b03841660009081526017602052604090205460ff165b1561194c575060005b8080156119655750601c54640100000000900460ff1615155b156119f657601c5460009060649061198890640100000000900460ff1686612776565b61199291906127ab565b601c549091506000906064906119b2906301000000900460ff1687612776565b6119bc91906127ab565b90506119c882866128bd565b94506119d5873084611a42565b80156119f357600f546119f39030906001600160a01b031684611a42565b50505b611a01858585611a42565b5050505050565b60008184841115611a2c5760405162461bcd60e51b81526004016108099190612538565b506000611a3984866128bd565b95945050505050565b6001600160a01b038316611a685760405162461bcd60e51b815260040161080990612878565b6001600160a01b038216611a8e5760405162461bcd60e51b815260040161080990612835565b611acb816040518060600160405280602681526020016129f7602691396001600160a01b0386166000908152600160205260409020549190611a08565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611afa9082611556565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116d49085815260200190565b6001600160a01b0382166000908152601a602052604090205460ff168015611b8f57506001600160a01b03831660009081526018602052604090205460ff16155b15611c2057600854811115611bf95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610809565b600980546001600160a01b03841661010002610100600160a81b0319909116179055505050565b6001600160a01b0383166000908152601a602052604090205460ff168015611c6157506001600160a01b03821660009081526018602052604090205460ff16155b15611d3d57600854811115611cc95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610809565b6007546001600160a01b038316600090815260016020526040902054611cef9083612809565b11156117415760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610809565b6001600160a01b03821660009081526018602052604090205460ff16611dd1576007546001600160a01b038316600090815260016020526040902054611d839083612809565b11156117415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610809565b60095460ff16158015611dfc57506001600160a01b03831660009081526018602052604090205460ff165b1561174157600c54811115611e4e576008546009546001600160a01b036101009091048116600090815260026020908152604080832093881683529290522055611e468142612809565b600a55505050565b42600a55505050565b6001600160a01b038083166000908152601a6020526040808220549284168252902054601c805463ffffffff1916905560ff91821691168015611ef957601f54601c8054601d546101009384900460ff90811661ffff1990931692909217600160b81b82048316949094029390931763ffff00001916600160c81b84048216620100000263ff000000191617600160d81b909304166301000000029190911790555b8115611ff057601f54601c8054601d5460ff80851661ffff199093169290921761010062010000958690048416021763ffff00001916600160c01b820483169490940263ff000000191693909317600160d01b909304166301000000029190911790556001600160a01b0383166000908152601b602052604090205415611f98576001600160a01b0383166000908152601b6020526040902054611fd6565b6001600160a01b03831660009081526001602052604090205415611fd4576001600160a01b0383166000908152601b6020526040902054611fd6565b425b6001600160a01b0384166000908152601b60205260409020555b80158015611ffc575081155b1561206657601f54601c8054601d546101009384900460ff90811661ffff1990931692909217600160b81b82048316949094029390931763ffff00001916600160c81b84048216620100000263ff000000191617600160d81b909304166301000000029190911790555b6001600160a01b0383161580159061208957506001600160a01b03831661dead14155b80156120ae57506001600160a01b03841660009081526017602052604090205460ff16155b80156120d357506001600160a01b03831660009081526017602052604090205460ff16155b1561211857811580156120e9575060095460ff16155b1561211857600a546001600160a01b0385166000908152601b602052604090205461211491906128bd565b600b555b601c5460ff63010000008204811691620100008104821691612142916101008104821691166128d0565b61214c91906128d0565b61215691906128d0565b601c60046101000a81548160ff021916908360ff16021790555050505050565b30600090815260016020526040902054600c544790612196906014612776565b8211156121ae57600c546121ab906014612776565b91505b601c54600090819060029060ff64010000000082048116916121d1911687612776565b6121db91906127ab565b6121e591906127ab565b905060006121f382866128bd565b90506121fe81612333565b600061220a85476128bd565b601c5490915060009060ff6301000000820481169161222c91600291166128e9565b61223691906128d0565b601c5461224e9190640100000000900460ff1661290b565b601c5460ff9182169250600091600291849161226b911686612776565b61227591906127ab565b61227f91906127ab565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d80600081146122cd576040519150601f19603f3d011682016040523d82523d6000602084013e6122d2565b606091505b50909650508415612329576122e7858261248d565b60408051858152602081018390529081018690527f34755123977fda4465c19ffa30709bc81ed728f17cf49014d33b243ae2d682fb9060600160405180910390a15b5050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236857612368612924565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e5919061293a565b816001815181106123f8576123f8612924565b6001600160a01b03928316602091820292909201015260065461241e91309116846115bc565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612457908590600090869030904290600401612957565b600060405180830381600087803b15801561247157600080fd5b505af1158015612485573d6000803e3d6000fd5b505050505050565b6006546124a59030906001600160a01b0316846115bc565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612513573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a0191906129c8565b600060208083528351808285015260005b8181101561256557858101830151858201604001528201612549565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461134257600080fd5b600080604083850312156125ae57600080fd5b82356125b981612586565b946020939093013593505050565b6000602082840312156125d957600080fd5b5035919050565b6000806000606084860312156125f557600080fd5b833561260081612586565b9250602084013561261081612586565b929592945050506040919091013590565b60006020828403121561263357600080fd5b81356115b581612586565b80358015158114610f5157600080fd5b6000806040838503121561266157600080fd5b823561266c81612586565b915061267a6020840161263e565b90509250929050565b6000806040838503121561269657600080fd5b82356126a181612586565b915060208301356126b181612586565b809150509250929050565b6000806000606084860312156126d157600080fd5b83359250602084013591506126e86040850161263e565b90509250925092565b600181811c9082168061270557607f821691505b60208210810361272557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561279057612790612760565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127ba576127ba612795565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156107d9576107d9612760565b60006020828403121561282e57600080fd5b5051919050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b818103818111156107d9576107d9612760565b60ff81811683821601908111156107d9576107d9612760565b600060ff8316806128fc576128fc612795565b8060ff84160491505092915050565b60ff82811682821603908111156107d9576107d9612760565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561294c57600080fd5b81516115b581612586565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129a75784516001600160a01b031683529383019391830191600101612982565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156129dd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bcaa8f06636db76c3e92c446f738e87edbd88cd813b8bcdd414aa0ab75fee9de64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063880bcbc11161012e578063a9059cbb116100ab578063c9567bf91161006f578063c9567bf91461067b578063dd62ed3e14610690578063df048748146106d6578063ebcad8c4146106f6578063f2fde38b1461071657600080fd5b8063a9059cbb146105d5578063aa4bde28146105f5578063b62496f51461060b578063bc018ef31461063b578063c02466681461065b57600080fd5b806398d7e721116100f257806398d7e721146105545780639dccf6f1146105745780639ec22c0e14610589578063a457c2d71461059f578063a4c82a00146105bf57600080fd5b8063880bcbc1146104be5780638ab916cf146104de5780638c0b5e221461050b5780638da5cb5b1461052157806395d89b411461053f57600080fd5b806327a14fc2116101bc57806349bd5a5e1161018057806349bd5a5e1461040957806360d3faa21461043d57806370a0823114610453578063715018a614610489578063781edb3c1461049e57600080fd5b806327a14fc21461037d5780632c3e486c1461039d5780632e82f1a0146103b3578063313ce567146103cd57806339509351146103e957600080fd5b806318160ddd1161020357806318160ddd146102f0578063184c16c51461030f578063199ffc72146103255780631e293c101461033b57806323b872dd1461035d57600080fd5b8063064a59d01461024057806306fdde0314610276578063095ea7b3146102985780631694505e146102b857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5060065461026190600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561028257600080fd5b5061028b610736565b60405161026d9190612538565b3480156102a457600080fd5b506102616102b336600461259b565b6107c8565b3480156102c457600080fd5b506006546102d8906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b3480156102fc57600080fd5b506003545b60405190815260200161026d565b34801561031b57600080fd5b5061030160145481565b34801561033157600080fd5b5061030160105481565b34801561034757600080fd5b5061035b6103563660046125c7565b6107df565b005b34801561036957600080fd5b506102616103783660046125e0565b6108d8565b34801561038957600080fd5b5061035b6103983660046125c7565b610941565b3480156103a957600080fd5b5061030160125481565b3480156103bf57600080fd5b506011546102619060ff1681565b3480156103d957600080fd5b506040516012815260200161026d565b3480156103f557600080fd5b5061026161040436600461259b565b610a92565b34801561041557600080fd5b506102d87f000000000000000000000000533cf75b1884d829bbe16c6d5c859cc0cf64644181565b34801561044957600080fd5b50610301600c5481565b34801561045f57600080fd5b5061030161046e366004612621565b6001600160a01b031660009081526001602052604090205490565b34801561049557600080fd5b5061035b610ac8565b3480156104aa57600080fd5b5061035b6104b936600461264e565b610b3c565b3480156104ca57600080fd5b5061035b6104d936600461264e565b610c06565b3480156104ea57600080fd5b506103016104f9366004612621565b601b6020526000908152604090205481565b34801561051757600080fd5b5061030160085481565b34801561052d57600080fd5b506000546001600160a01b03166102d8565b34801561054b57600080fd5b5061028b610cc8565b34801561056057600080fd5b5061026161056f3660046125c7565b610cd7565b34801561058057600080fd5b5061035b610f56565b34801561059557600080fd5b5061030160155481565b3480156105ab57600080fd5b506102616105ba36600461259b565b610f97565b3480156105cb57600080fd5b5061030160135481565b3480156105e157600080fd5b506102616105f036600461259b565b610fe6565b34801561060157600080fd5b5061030160075481565b34801561061757600080fd5b50610261610626366004612621565b601a6020526000908152604090205460ff1681565b34801561064757600080fd5b5061035b6106563660046125c7565b610ff3565b34801561066757600080fd5b5061035b61067636600461264e565b6110b2565b34801561068757600080fd5b5061035b611174565b34801561069c57600080fd5b506103016106ab366004612683565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b3480156106e257600080fd5b5061035b6106f1366004612621565b6111b3565b34801561070257600080fd5b5061035b6107113660046126bc565b611345565b34801561072257600080fd5b5061035b610731366004612621565b61146c565b606060048054610745906126f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610771906126f1565b80156107be5780601f10610793576101008083540402835291602001916107be565b820191906000526020600020905b8154815290600101906020018083116107a157829003601f168201915b5050505050905090565b60006107d53384846115bc565b5060015b92915050565b6000546001600160a01b031633146108125760405162461bcd60e51b81526004016108099061272b565b60405180910390fd5b670de0b6b3a76400006103e861082760035490565b610832906003612776565b61083c91906127ab565b61084691906127ab565b8110156108a55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e332560c81b6064820152608401610809565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006108e58484846116e1565b610937843361093285604051806060016040528060288152602001612a1d602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190611a08565b6115bc565b5060019392505050565b6000546001600160a01b0316331461096b5760405162461bcd60e51b81526004016108099061272b565b670de0b6b3a76400006103e861098060035490565b61098b90601e612776565b61099591906127ab565b61099f91906127ab565b8110156109fa5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e332560e01b6064820152608401610809565b6007548103610a5f5760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610809565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107d59185906109329086611556565b6000546001600160a01b03163314610af25760405162461bcd60e51b81526004016108099061272b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b665760405162461bcd60e51b81526004016108099061272b565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503610ba65760405162461bcd60e51b8152600401610809906127bf565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610c305760405162461bcd60e51b81526004016108099061272b565b6001600160a01b03821660009081526018602052604090205481151560ff909116151503610c705760405162461bcd60e51b8152600401610809906127bf565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610bfa565b606060058054610745906126f1565b600080546001600160a01b03163314610d025760405162461bcd60e51b81526004016108099061272b565b601454601554610d129190612809565b4211610d605760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610809565b6103e8821115610dc55760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610809565b426015556040516370a0823160e01b81526001600160a01b037f000000000000000000000000533cf75b1884d829bbe16c6d5c859cc0cf64644116600482015260009030906370a0823190602401602060405180830381865afa158015610e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e54919061281c565b9050600061271060105483610e699190612776565b610e7391906127ab565b90508015610ea857610ea87f000000000000000000000000533cf75b1884d829bbe16c6d5c859cc0cf64644161dead83611a42565b60007f000000000000000000000000533cf75b1884d829bbe16c6d5c859cc0cf6464419050806001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1600193505050505b919050565b6000546001600160a01b03163314610f805760405162461bcd60e51b81526004016108099061272b565b6b033b2e3c9fd0803ce80000006007819055600855565b60006107d5338461093285604051806060016040528060258152602001612a45602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190611a08565b60006107d53384846116e1565b6000546001600160a01b0316331461101d5760405162461bcd60e51b81526004016108099061272b565b600c54810361107f5760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420757064617465206d696e546f6b656e5377617020746f2073616044820152676d652076616c756560c01b6064820152608401610809565b600c5460405182907f72fa91a248bb6d73edaa9ce1232d82e8992c0d147025c80f58c3a3dace42ff6690600090a3600c55565b6000546001600160a01b031633146110dc5760405162461bcd60e51b81526004016108099061272b565b6001600160a01b03821660009081526017602052604090205481151560ff90911615150361111c5760405162461bcd60e51b8152600401610809906127bf565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610bfa565b6000546001600160a01b0316331461119e5760405162461bcd60e51b81526004016108099061272b565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146111dd5760405162461bcd60e51b81526004016108099061272b565b600d546001600160a01b03828116911614611342576001600160a01b0381166112485760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610809565b7f000000000000000000000000533cf75b1884d829bbe16c6d5c859cc0cf6464416001600160a01b0316816001600160a01b0316036112c95760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610809565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691831690600f01604051908190038120907f749291264be778e56ff2c0c2980117054530ae70dcb2292d8358c08c82d08f8590600090a4600d80546001600160a01b0319166001600160a01b0383161790555b50565b6000546001600160a01b0316331461136f5760405162461bcd60e51b81526004016108099061272b565b603c8310156113db5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610809565b6103e882111580156113eb575060015b6114505760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610809565b6012929092556010556011805460ff1916911515919091179055565b6000546001600160a01b031633146114965760405162461bcd60e51b81526004016108099061272b565b6001600160a01b0381166114fb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610809565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806115638385612809565b9050838110156115b55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610809565b9392505050565b6001600160a01b03831661161e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610809565b6001600160a01b03821661167f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610809565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382166117075760405162461bcd60e51b815260040161080990612835565b6001600160a01b03831661172d5760405162461bcd60e51b815260040161080990612878565b806000036117465761174183836000611a42565b505050565b6001600160a01b03831660009081526016602052604090205460ff1615801561178857506001600160a01b03821660009081526016602052604090205460ff16155b156117f157600654600160a01b900460ff166117e65760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610809565b6117f1838383611b4e565b6117fb8383611e57565b600c543060009081526001602052604090205460065491111590600160a01b900460ff1680156118285750805b8015611837575060095460ff16155b801561184f5750601c54640100000000900460ff1615155b801561187357506001600160a01b0383166000908152601a602052604090205460ff165b801561189857506001600160a01b03841660009081526017602052604090205460ff16155b80156118bd57506001600160a01b03831660009081526017602052604090205460ff16155b156118e2576009805460ff191660011790556118d7612176565b6009805460ff191690555b60095460009060ff161580156119015750600654600160a01b900460ff165b6001600160a01b03861660009081526017602052604090205490915060ff168061194357506001600160a01b03841660009081526017602052604090205460ff165b1561194c575060005b8080156119655750601c54640100000000900460ff1615155b156119f657601c5460009060649061198890640100000000900460ff1686612776565b61199291906127ab565b601c549091506000906064906119b2906301000000900460ff1687612776565b6119bc91906127ab565b90506119c882866128bd565b94506119d5873084611a42565b80156119f357600f546119f39030906001600160a01b031684611a42565b50505b611a01858585611a42565b5050505050565b60008184841115611a2c5760405162461bcd60e51b81526004016108099190612538565b506000611a3984866128bd565b95945050505050565b6001600160a01b038316611a685760405162461bcd60e51b815260040161080990612878565b6001600160a01b038216611a8e5760405162461bcd60e51b815260040161080990612835565b611acb816040518060600160405280602681526020016129f7602691396001600160a01b0386166000908152600160205260409020549190611a08565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611afa9082611556565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116d49085815260200190565b6001600160a01b0382166000908152601a602052604090205460ff168015611b8f57506001600160a01b03831660009081526018602052604090205460ff16155b15611c2057600854811115611bf95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610809565b600980546001600160a01b03841661010002610100600160a81b0319909116179055505050565b6001600160a01b0383166000908152601a602052604090205460ff168015611c6157506001600160a01b03821660009081526018602052604090205460ff16155b15611d3d57600854811115611cc95760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610809565b6007546001600160a01b038316600090815260016020526040902054611cef9083612809565b11156117415760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610809565b6001600160a01b03821660009081526018602052604090205460ff16611dd1576007546001600160a01b038316600090815260016020526040902054611d839083612809565b11156117415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c65740000000000000000006044820152606401610809565b60095460ff16158015611dfc57506001600160a01b03831660009081526018602052604090205460ff165b1561174157600c54811115611e4e576008546009546001600160a01b036101009091048116600090815260026020908152604080832093881683529290522055611e468142612809565b600a55505050565b42600a55505050565b6001600160a01b038083166000908152601a6020526040808220549284168252902054601c805463ffffffff1916905560ff91821691168015611ef957601f54601c8054601d546101009384900460ff90811661ffff1990931692909217600160b81b82048316949094029390931763ffff00001916600160c81b84048216620100000263ff000000191617600160d81b909304166301000000029190911790555b8115611ff057601f54601c8054601d5460ff80851661ffff199093169290921761010062010000958690048416021763ffff00001916600160c01b820483169490940263ff000000191693909317600160d01b909304166301000000029190911790556001600160a01b0383166000908152601b602052604090205415611f98576001600160a01b0383166000908152601b6020526040902054611fd6565b6001600160a01b03831660009081526001602052604090205415611fd4576001600160a01b0383166000908152601b6020526040902054611fd6565b425b6001600160a01b0384166000908152601b60205260409020555b80158015611ffc575081155b1561206657601f54601c8054601d546101009384900460ff90811661ffff1990931692909217600160b81b82048316949094029390931763ffff00001916600160c81b84048216620100000263ff000000191617600160d81b909304166301000000029190911790555b6001600160a01b0383161580159061208957506001600160a01b03831661dead14155b80156120ae57506001600160a01b03841660009081526017602052604090205460ff16155b80156120d357506001600160a01b03831660009081526017602052604090205460ff16155b1561211857811580156120e9575060095460ff16155b1561211857600a546001600160a01b0385166000908152601b602052604090205461211491906128bd565b600b555b601c5460ff63010000008204811691620100008104821691612142916101008104821691166128d0565b61214c91906128d0565b61215691906128d0565b601c60046101000a81548160ff021916908360ff16021790555050505050565b30600090815260016020526040902054600c544790612196906014612776565b8211156121ae57600c546121ab906014612776565b91505b601c54600090819060029060ff64010000000082048116916121d1911687612776565b6121db91906127ab565b6121e591906127ab565b905060006121f382866128bd565b90506121fe81612333565b600061220a85476128bd565b601c5490915060009060ff6301000000820481169161222c91600291166128e9565b61223691906128d0565b601c5461224e9190640100000000900460ff1661290b565b601c5460ff9182169250600091600291849161226b911686612776565b61227591906127ab565b61227f91906127ab565b600d546040519192506001600160a01b0316904790600081818185875af1925050503d80600081146122cd576040519150601f19603f3d011682016040523d82523d6000602084013e6122d2565b606091505b50909650508415612329576122e7858261248d565b60408051858152602081018390529081018690527f34755123977fda4465c19ffa30709bc81ed728f17cf49014d33b243ae2d682fb9060600160405180910390a15b5050505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236857612368612924565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e5919061293a565b816001815181106123f8576123f8612924565b6001600160a01b03928316602091820292909201015260065461241e91309116846115bc565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612457908590600090869030904290600401612957565b600060405180830381600087803b15801561247157600080fd5b505af1158015612485573d6000803e3d6000fd5b505050505050565b6006546124a59030906001600160a01b0316846115bc565b60065460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612513573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a0191906129c8565b600060208083528351808285015260005b8181101561256557858101830151858201604001528201612549565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461134257600080fd5b600080604083850312156125ae57600080fd5b82356125b981612586565b946020939093013593505050565b6000602082840312156125d957600080fd5b5035919050565b6000806000606084860312156125f557600080fd5b833561260081612586565b9250602084013561261081612586565b929592945050506040919091013590565b60006020828403121561263357600080fd5b81356115b581612586565b80358015158114610f5157600080fd5b6000806040838503121561266157600080fd5b823561266c81612586565b915061267a6020840161263e565b90509250929050565b6000806040838503121561269657600080fd5b82356126a181612586565b915060208301356126b181612586565b809150509250929050565b6000806000606084860312156126d157600080fd5b83359250602084013591506126e86040850161263e565b90509250925092565b600181811c9082168061270557607f821691505b60208210810361272557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561279057612790612760565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127ba576127ba612795565b500490565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b808201808211156107d9576107d9612760565b60006020828403121561282e57600080fd5b5051919050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b818103818111156107d9576107d9612760565b60ff81811683821601908111156107d9576107d9612760565b600060ff8316806128fc576128fc612795565b8060ff84160491505092915050565b60ff82811682821603908111156107d9576107d9612760565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561294c57600080fd5b81516115b581612586565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129a75784516001600160a01b031683529383019391830191600101612982565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156129dd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bcaa8f06636db76c3e92c446f738e87edbd88cd813b8bcdd414aa0ab75fee9de64736f6c63430008100033

Deployed Bytecode Sourcemap

16456:17312:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16726:28;;;;;;;;;;-1:-1:-1;16726:28:0;;;;-1:-1:-1;;;16726:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;16726:28:0;;;;;;;;12137:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13117:194::-;;;;;;;;;;-1:-1:-1;13117:194:0;;;;;:::i;:::-;;:::i;16500:30::-;;;;;;;;;;-1:-1:-1;16500:30:0;;;;-1:-1:-1;;;;;16500:30:0;;;;;;-1:-1:-1;;;;;1394:32:1;;;1376:51;;1364:2;1349:18;16500:30:0;1215:218:1;12458:108:0;;;;;;;;;;-1:-1:-1;12546:12:0;;12458:108;;;1584:25:1;;;1572:2;1557:18;12458:108:0;1438:177:1;17416:47:0;;;;;;;;;;;;;;;;17235:35;;;;;;;;;;;;;;;;21402:323;;;;;;;;;;-1:-1:-1;21402:323:0;;;;;:::i;:::-;;:::i;:::-;;13319:454;;;;;;;;;;-1:-1:-1;13319:454:0;;;;;:::i;:::-;;:::i;21733:450::-;;;;;;;;;;-1:-1:-1;21733:450:0;;;;;:::i;:::-;;:::i;17317:44::-;;;;;;;;;;;;;;;;17278:32;;;;;;;;;;-1:-1:-1;17278:32:0;;;;;;;;12357:93;;;;;;;;;;-1:-1:-1;12357:93:0;;12440:2;2408:36:1;;2396:2;2381:18;12357:93:0;2266:184:1;13781:293:0;;;;;;;;;;-1:-1:-1;13781:293:0;;;;;:::i;:::-;;:::i;16537:38::-;;;;;;;;;;;;;;;17070:53;;;;;;;;;;;;;;;;12574:143;;;;;;;;;;-1:-1:-1;12574:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;12691:18:0;12664:7;12691:18;;;:9;:18;;;;;;;12574:143;6956:148;;;;;;;;;;;;;:::i;29917:388::-;;;;;;;;;;-1:-1:-1;29917:388:0;;;;;:::i;:::-;;:::i;29525:384::-;;;;;;;;;;-1:-1:-1;29525:384:0;;;;;:::i;:::-;;:::i;17820:43::-;;;;;;;;;;-1:-1:-1;17820:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;16886:50;;;;;;;;;;;;;;;;6742:79;;;;;;;;;;-1:-1:-1;6780:7:0;6807:6;-1:-1:-1;;;;;6807:6:0;6742:79;;12245:104;;;;;;;;;;;;;:::i;32715:1050::-;;;;;;;;;;-1:-1:-1;32715:1050:0;;;;;:::i;:::-;;:::i;31258:124::-;;;;;;;;;;;;;:::i;17470:35::-;;;;;;;;;;;;;;;;14082:393;;;;;;;;;;-1:-1:-1;14082:393:0;;;;;:::i;:::-;;:::i;17378:29::-;;;;;;;;;;;;;;;;12725:200;;;;;;;;;;-1:-1:-1;12725:200:0;;;;;:::i;:::-;;:::i;16825:54::-;;;;;;;;;;;;;;;;17756:57;;;;;;;;;;-1:-1:-1;17756:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30317:289;;;;;;;;;;-1:-1:-1;30317:289:0;;;;;:::i;:::-;;:::i;29161:356::-;;;;;;;;;;-1:-1:-1;29161:356:0;;;;;:::i;:::-;;:::i;21310:84::-;;;;;;;;;;;;;:::i;12933:176::-;;;;;;;;;;-1:-1:-1;12933:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13074:18:0;;;13047:7;13074:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12933:176;30614:636;;;;;;;;;;-1:-1:-1;30614:636:0;;;;;:::i;:::-;;:::i;31394:560::-;;;;;;;;;;-1:-1:-1;31394:560:0;;;;;:::i;:::-;;:::i;7112:281::-;;;;;;;;;;-1:-1:-1;7112:281:0;;;;;:::i;:::-;;:::i;12137:100::-;12191:13;12224:5;12217:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12137:100;:::o;13117:194::-;13225:4;13242:39;6130:10;13265:7;13274:6;13242:8;:39::i;:::-;-1:-1:-1;13299:4:0;13117:194;;;;;:::o;21402:323::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;;;;;;;;;21548:4:::1;21540;21519:13;12546:12:::0;;;12458:108;21519:13:::1;:17;::::0;21535:1:::1;21519:17;:::i;:::-;21518:26;;;;:::i;:::-;21517:35;;;;:::i;:::-;21505:8;:47;;21483:136;;;::::0;-1:-1:-1;;;21483:136:0;;5624:2:1;21483:136:0::1;::::0;::::1;5606:21:1::0;5663:2;5643:18;;;5636:30;5702:34;5682:18;;;5675:62;-1:-1:-1;;;5753:18:1;;;5746:37;5800:19;;21483:136:0::1;5422:403:1::0;21483:136:0::1;21672:11;::::0;21635:49:::1;::::0;21662:8;;21635:49:::1;::::0;;;::::1;21695:11;:22:::0;21402:323::o;13319:454::-;13459:4;13476:36;13486:6;13494:9;13505:6;13476:9;:36::i;:::-;13523:220;13546:6;6130:10;13594:138;13650:6;13594:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13594:19:0;;;;;;:11;:19;;;;;;;;6130:10;13594:33;;;;;;;;;;:37;:138::i;:::-;13523:8;:220::i;:::-;-1:-1:-1;13761:4:0;13319:454;;;;;:::o;21733:450::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;21875:4:::1;21867;21845:13;12546:12:::0;;;12458:108;21845:13:::1;:18;::::0;21861:2:::1;21845:18;:::i;:::-;21844:27;;;;:::i;:::-;21843:36;;;;:::i;:::-;21831:8;:48;;21809:134;;;::::0;-1:-1:-1;;;21809:134:0;;6032:2:1;21809:134:0::1;::::0;::::1;6014:21:1::0;6071:2;6051:18;;;6044:30;6110:34;6090:18;;;6083:62;-1:-1:-1;;;6161:18:1;;;6154:34;6205:19;;21809:134:0::1;5830:400:1::0;21809:134:0::1;21988:15;;21976:8;:27:::0;21954:120:::1;;;::::0;-1:-1:-1;;;21954:120:0;;6437:2:1;21954:120:0::1;::::0;::::1;6419:21:1::0;6476:2;6456:18;;;6449:30;6515:34;6495:18;;;6488:62;-1:-1:-1;;;6566:18:1;;;6559:41;6617:19;;21954:120:0::1;6235:407:1::0;21954:120:0::1;22122:15;::::0;22090:48:::1;::::0;22112:8;;22090:48:::1;::::0;;;::::1;22149:15;:26:::0;21733:450::o;13781:293::-;6130:10;13894:4;13983:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13983:34:0;;;;;;;;;;13894:4;;13911:133;;13961:7;;13983:50;;14022:10;13983:38;:50::i;6956:148::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;7063:1:::1;7047:6:::0;;7026:40:::1;::::0;-1:-1:-1;;;;;7047:6:0;;::::1;::::0;7026:40:::1;::::0;7063:1;;7026:40:::1;7094:1;7077:19:::0;;-1:-1:-1;;;;;;7077:19:0::1;::::0;;6956:148::o;29917:388::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30061:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;:46;::::1;;:34;::::0;;::::1;:46;;::::0;30039:138:::1;;;;-1:-1:-1::0;;;30039:138:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30188:34:0;::::1;;::::0;;;:25:::1;:34;::::0;;;;;;;;:45;;-1:-1:-1;;30188:45:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30249:48;;154:41:1;;;30249:48:0::1;::::0;127:18:1;30249:48:0::1;;;;;;;;29917:388:::0;;:::o;29525:384::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29674:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;:42;::::1;;:30;::::0;;::::1;:42;;::::0;29652:134:::1;;;;-1:-1:-1::0;;;29652:134:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29797:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;;:41;;-1:-1:-1;;29797:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29854:47;;154:41:1;;;29854:47:0::1;::::0;127:18:1;29854:47:0::1;14:187:1::0;12245:104:0;12301:13;12334:7;12327:14;;;;;:::i;32715:1050::-;32815:4;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;32900:19:::1;;32877:20;;:42;;;;:::i;:::-;32859:15;:60;32837:142;;;::::0;-1:-1:-1;;;32837:142:0;;7390:2:1;32837:142:0::1;::::0;::::1;7372:21:1::0;;;7409:18;;;7402:30;7468:34;7448:18;;;7441:62;7520:18;;32837:142:0::1;7188:356:1::0;32837:142:0::1;33009:4;32998:7;:15;;32990:70;;;::::0;-1:-1:-1;;;32990:70:0;;7751:2:1;32990:70:0::1;::::0;::::1;7733:21:1::0;7790:2;7770:18;;;7763:30;7829:34;7809:18;;;7802:62;-1:-1:-1;;;7880:18:1;;;7873:40;7930:19;;32990:70:0::1;7549:406:1::0;32990:70:0::1;33094:15;33071:20;:38:::0;33195:29:::1;::::0;-1:-1:-1;;;33195:29:0;;-1:-1:-1;;;;;33210:13:0::1;1394:32:1::0;33195:29:0::1;::::0;::::1;1376:51:1::0;33164:28:0::1;::::0;33195:4:::1;::::0;:14:::1;::::0;1349:18:1;;33195:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33164:60;;33274:20;33339:5;33320:16;;33297:20;:39;;;;:::i;:::-;:47;;;;:::i;:::-;33274:70:::0;-1:-1:-1;33451:16:0;;33447:110:::1;;33484:61;33500:13;33523:6;33532:12;33484:15;:61::i;:::-;33632:19;33669:13;33632:51;;33694:4;-1:-1:-1::0;;;;;33694:9:0::1;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33721:14:0::1;::::0;::::1;::::0;-1:-1:-1;33721:14:0;;-1:-1:-1;33721:14:0::1;33753:4;33746:11;;;;;6939:1;32715:1050:::0;;;:::o;31258:124::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;16792:26:::1;31313:15;:27:::0;;;31351:11:::1;:23:::0;31258:124::o;14082:393::-;14200:4;14217:228;6130:10;14267:7;14289:145;14346:15;14289:145;;;;;;;;;;;;;;;;;6130:10;14289:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14289:34:0;;;;;;;;;;;;:38;:145::i;12725:200::-;12836:4;12853:42;6130:10;12877:9;12888:6;12853:9;:42::i;30317:289::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;30426:12:::1;;30414:8;:24:::0;30392:114:::1;;;::::0;-1:-1:-1;;;30392:114:0;;8351:2:1;30392:114:0::1;::::0;::::1;8333:21:1::0;8390:2;8370:18;;;8363:30;8429:34;8409:18;;;8402:62;-1:-1:-1;;;8480:18:1;;;8473:38;8528:19;;30392:114:0::1;8149:404:1::0;30392:114:0::1;30551:12;::::0;30522:42:::1;::::0;30541:8;;30522:42:::1;::::0;;;::::1;30575:12;:23:::0;30317:289::o;29161:356::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29295:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;29273:131:::1;;;;-1:-1:-1::0;;;29273:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29415:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;29415:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29469:40;;154:41:1;;;29469:40:0::1;::::0;127:18:1;29469:40:0::1;14:187:1::0;21310:84:0;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;21363:16:::1;:23:::0;;-1:-1:-1;;;;21363:23:0::1;-1:-1:-1::0;;;21363:23:0::1;::::0;;21310:84::o;30614:636::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;30704:15:::1;::::0;-1:-1:-1;;;;;30704:37:0;;::::1;:15:::0;::::1;:37;30700:543;;-1:-1:-1::0;;;;;30784:32:0;::::1;30758:125;;;::::0;-1:-1:-1;;;30758:125:0;;8760:2:1;30758:125:0::1;::::0;::::1;8742:21:1::0;8799:2;8779:18;;;8772:30;8838:33;8818:18;;;8811:61;8889:18;;30758:125:0::1;8558:355:1::0;30758:125:0::1;30946:13;-1:-1:-1::0;;;;;30924:35:0::1;:18;-1:-1:-1::0;;;;;30924:35:0::1;::::0;30898:128:::1;;;::::0;-1:-1:-1;;;30898:128:0;;8760:2:1;30898:128:0::1;::::0;::::1;8742:21:1::0;8799:2;8779:18;;;8772:30;8838:33;8818:18;;;8811:61;8889:18;;30898:128:0::1;8558:355:1::0;30898:128:0::1;31150:15;::::0;31046:134:::1;::::0;-1:-1:-1;;;9120:30:1;;-1:-1:-1;;;;;31150:15:0;;::::1;::::0;31046:134;::::1;::::0;9175:2:1;9166:12;31046:134:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;31195:15;:36:::0;;-1:-1:-1;;;;;;31195:36:0::1;-1:-1:-1::0;;;;;31195:36:0;::::1;;::::0;;30700:543:::1;30614:636:::0;:::o;31394:560::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;31603:2:::1;31580:19;:25;;31558:125;;;::::0;-1:-1:-1;;;31558:125:0;;9391:2:1;31558:125:0::1;::::0;::::1;9373:21:1::0;9430:2;9410:18;;;9403:30;9469:34;9449:18;;;9442:62;-1:-1:-1;;;9520:18:1;;;9513:48;9578:19;;31558:125:0::1;9189:414:1::0;31558:125:0::1;31728:4;31716:8;:16;;:33;;;;-1:-1:-1::0;31736:13:0;31716:33:::1;31694:131;;;::::0;-1:-1:-1;;;31694:131:0;;9810:2:1;31694:131:0::1;::::0;::::1;9792:21:1::0;9849:2;9829:18;;;9822:30;9888:34;9868:18;;;9861:62;-1:-1:-1;;;9939:18:1;;;9932:46;9995:19;;31694:131:0::1;9608:412:1::0;31694:131:0::1;31836:15;:37:::0;;;;31884:16:::1;:27:::0;31922:13:::1;:24:::0;;-1:-1:-1;;31922:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31394:560::o;7112:281::-;6869:6;;-1:-1:-1;;;;;6869:6:0;6130:10;6869:22;6861:67;;;;-1:-1:-1;;;6861:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7215:22:0;::::1;7193:110;;;::::0;-1:-1:-1;;;7193:110:0;;10227:2:1;7193:110:0::1;::::0;::::1;10209:21:1::0;10266:2;10246:18;;;10239:30;10305:34;10285:18;;;10278:62;-1:-1:-1;;;10356:18:1;;;10349:36;10402:19;;7193:110:0::1;10025:402:1::0;7193:110:0::1;7340:6;::::0;;7319:38:::1;::::0;-1:-1:-1;;;;;7319:38:0;;::::1;::::0;7340:6;::::1;::::0;7319:38:::1;::::0;::::1;7368:6;:17:::0;;-1:-1:-1;;;;;;7368:17:0::1;-1:-1:-1::0;;;;;7368:17:0;;;::::1;::::0;;;::::1;::::0;;7112:281::o;168:181::-;226:7;;258:5;262:1;258;:5;:::i;:::-;246:17;;287:1;282;:6;;274:46;;;;-1:-1:-1;;;274:46:0;;10634:2:1;274:46:0;;;10616:21:1;10673:2;10653:18;;;10646:30;10712:29;10692:18;;;10685:57;10759:18;;274:46:0;10432:351:1;274:46:0;340:1;168:181;-1:-1:-1;;;168:181:0:o;15938:378::-;-1:-1:-1;;;;;16074:19:0;;16066:68;;;;-1:-1:-1;;;16066:68:0;;10990:2:1;16066:68:0;;;10972:21:1;11029:2;11009:18;;;11002:30;11068:34;11048:18;;;11041:62;-1:-1:-1;;;11119:18:1;;;11112:34;11163:19;;16066:68:0;10788:400:1;16066:68:0;-1:-1:-1;;;;;16153:21:0;;16145:68;;;;-1:-1:-1;;;16145:68:0;;11395:2:1;16145:68:0;;;11377:21:1;11434:2;11414:18;;;11407:30;11473:34;11453:18;;;11446:62;-1:-1:-1;;;11524:18:1;;;11517:32;11566:19;;16145:68:0;11193:398:1;16145:68:0;-1:-1:-1;;;;;16224:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16276:32;;1584:25:1;;;16276:32:0;;1557:18:1;16276:32:0;;;;;;;;15938:378;;;:::o;22191:1679::-;-1:-1:-1;;;;;22323:16:0;;22315:64;;;;-1:-1:-1;;;22315:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22398:18:0;;22390:68;;;;-1:-1:-1;;;22390:68:0;;;;;;;:::i;:::-;22475:6;22485:1;22475:11;22471:93;;22503:28;22519:4;22525:2;22529:1;22503:15;:28::i;:::-;22191:1679;;;:::o;22471:93::-;-1:-1:-1;;;;;22595:23:0;;;;;;:17;:23;;;;;;;;22594:24;:63;;;;-1:-1:-1;;;;;;22636:21:0;;;;;;:17;:21;;;;;;;;22635:22;22594:63;22576:227;;;22692:16;;-1:-1:-1;;;22692:16:0;;;;22684:59;;;;-1:-1:-1;;;22684:59:0;;12608:2:1;22684:59:0;;;12590:21:1;12647:2;12627:18;;;12620:30;12686:32;12666:18;;;12659:60;12736:18;;22684:59:0;12406:354:1;22684:59:0;22758:33;22774:4;22780:2;22784:6;22758:15;:33::i;:::-;22815:19;22825:4;22831:2;22815:9;:19::i;:::-;22890:12;;22880:4;22847:12;12691:18;;;:9;:18;;;;;;22933:16;;-1:-1:-1;;22862:40:0;;-1:-1:-1;;;22933:16:0;;;;:40;;;;;22966:7;22933:40;:67;;;;-1:-1:-1;22991:9:0;;;;22990:10;22933:67;:97;;;;-1:-1:-1;23017:9:0;;;;;;;:13;;22933:97;:143;;;;-1:-1:-1;;;;;;23047:29:0;;;;;;:25;:29;;;;;;;;22933:143;:185;;;;-1:-1:-1;;;;;;23094:24:0;;;;;;:18;:24;;;;;;;;23093:25;22933:185;:225;;;;-1:-1:-1;;;;;;23136:22:0;;;;;;:18;:22;;;;;;;;23135:23;22933:225;22915:356;;;23185:9;:16;;-1:-1:-1;;23185:16:0;23197:4;23185:16;;;23216:11;:9;:11::i;:::-;23242:9;:17;;-1:-1:-1;;23242:17:0;;;22915:356;23299:9;;23283:12;;23299:9;;23298:10;:30;;;;-1:-1:-1;23312:16:0;;-1:-1:-1;;;23312:16:0;;;;23298:30;-1:-1:-1;;;;;23345:24:0;;;;;;:18;:24;;;;;;23283:45;;-1:-1:-1;23345:24:0;;;:50;;-1:-1:-1;;;;;;23373:22:0;;;;;;:18;:22;;;;;;;;23345:50;23341:98;;;-1:-1:-1;23422:5:0;23341:98;23455:7;:24;;;;-1:-1:-1;23466:9:0;;;;;;;:13;;23455:24;23451:368;;;23520:9;;23496:11;;23533:3;;23511:18;;23520:9;;;;;23511:6;:18;:::i;:::-;23510:26;;;;:::i;:::-;23582:8;;23496:40;;-1:-1:-1;23551:18:0;;23594:3;;23573:17;;23582:8;;;;;23573:6;:17;:::i;:::-;23572:25;;;;:::i;:::-;23551:46;-1:-1:-1;23621:12:0;23630:3;23621:6;:12;:::i;:::-;23612:21;;23648:41;23664:4;23678;23685:3;23648:15;:41::i;:::-;23710:14;;23706:102;;23776:10;;23745:47;;23769:4;;-1:-1:-1;;;;;23776:10:0;23788:3;23745:15;:47::i;:::-;23481:338;;23451:368;23829:33;23845:4;23851:2;23855:6;23829:15;:33::i;:::-;22304:1566;;22191:1679;;;:::o;501:226::-;621:7;657:12;649:6;;;;641:29;;;;-1:-1:-1;;;641:29:0;;;;;;;;:::i;:::-;-1:-1:-1;681:9:0;693:5;697:1;693;:5;:::i;:::-;681:17;501:226;-1:-1:-1;;;;;501:226:0:o;14483:606::-;-1:-1:-1;;;;;14623:20:0;;14615:70;;;;-1:-1:-1;;;14615:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14704:23:0;;14696:71;;;;-1:-1:-1;;;14696:71:0;;;;;;;:::i;:::-;14856:108;14892:6;14856:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14856:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;14836:17:0;;;;;;;:9;:17;;;;;;:128;;;;14998:20;;;;;;;:32;;15023:6;14998:24;:32::i;:::-;-1:-1:-1;;;;;14975:20:0;;;;;;;:9;:20;;;;;;;:55;;;;15046:35;;;;;;;;;;15074:6;1584:25:1;;1572:2;1557:18;;1438:177;23878:1259:0;-1:-1:-1;;;;;23983:29:0;;;;;;:25;:29;;;;;;;;:74;;;;-1:-1:-1;;;;;;24030:27:0;;;;;;:21;:27;;;;;;;;24029:28;23983:74;23965:1165;;;24120:11;;24110:6;:21;;24084:125;;;;-1:-1:-1;;;24084:125:0;;13100:2:1;24084:125:0;;;13082:21:1;13139:2;13119:18;;;13112:30;13178:34;13158:18;;;13151:62;-1:-1:-1;;;13229:18:1;;;13222:40;13279:19;;24084:125:0;12898:406:1;24084:125:0;24211:4;:9;;-1:-1:-1;;;;;24211:9:0;;;;-1:-1:-1;;;;;;24211:9:0;;;;;;22191:1679;;;:::o;23965:1165::-;-1:-1:-1;;;;;24256:31:0;;;;;;:25;:31;;;;;;;;:74;;;;-1:-1:-1;;;;;;24305:25:0;;;;;;:21;:25;;;;;;;;24304:26;24256:74;24238:892;;;24393:11;;24383:6;:21;;24357:123;;;;-1:-1:-1;;;24357:123:0;;13511:2:1;24357:123:0;;;13493:21:1;13550:2;13530:18;;;13523:30;13589:34;13569:18;;;13562:62;-1:-1:-1;;;13640:18:1;;;13633:38;13688:19;;24357:123:0;13309:404:1;24357:123:0;24547:15;;-1:-1:-1;;;;;12691:18:0;;12664:7;12691:18;;;:9;:18;;;;;;24521:22;;:6;:22;:::i;:::-;:41;;24495:127;;;;-1:-1:-1;;;24495:127:0;;13920:2:1;24495:127:0;;;13902:21:1;13959:2;13939:18;;;13932:30;13998:26;13978:18;;;13971:54;14042:18;;24495:127:0;13718:348:1;24238:892:0;-1:-1:-1;;;;;24645:25:0;;;;;;:21;:25;;;;;;;;24640:490;;24739:15;;-1:-1:-1;;;;;12691:18:0;;12664:7;12691:18;;;:9;:18;;;;;;24713:22;;:6;:22;:::i;:::-;:41;;24687:126;;;;-1:-1:-1;;;24687:126:0;;14273:2:1;24687:126:0;;;14255:21:1;14312:2;14292:18;;;14285:30;14351:25;14331:18;;;14324:53;14394:18;;24687:126:0;14071:347:1;24640:490:0;24836:9;;;;24835:10;:41;;;;-1:-1:-1;;;;;;24849:27:0;;;;;;:21;:27;;;;;;;;24835:41;24831:299;;;24906:12;;24897:6;:21;24893:226;;;24965:11;;24951:4;;-1:-1:-1;;;;;24951:4:0;;;;;;24939:17;;;;:11;:17;;;;;;;;:23;;;;;;;;;:37;25009:24;25027:6;25009:15;:24;:::i;:::-;24995:11;:38;22191:1679;;;:::o;24893:226::-;25088:15;25074:11;:29;23878:1259;;;:::o;25145:1588::-;-1:-1:-1;;;;;25247:31:0;;;25234:10;25247:31;;;:25;:31;;;;;;;25303:29;;;;;;;;25345:13;:17;;-1:-1:-1;;25423:12:0;;;25247:31;;;;;25303:29;25448:234;;;;25491:27;;25475:13;:43;;25491:8;25549:27;25491;;;;;;;;;-1:-1:-1;;25533:43:0;;;;;;;-1:-1:-1;;;25549:27:0;;;;25533:43;;;;;;;;-1:-1:-1;;25637:33:0;-1:-1:-1;;;25601:21:0;;;;25591:31;;-1:-1:-1;;25637:33:0;;-1:-1:-1;;;25648:22:0;;;;25637:33;;;;;;;;25448:234;25698:5;25694:424;;;25736:26;;25720:13;:42;;25736:8;25844:20;25736:26;;;;-1:-1:-1;;25777:42:0;;;;;;;25736:26;25793;;;;;;;25777:42;;-1:-1:-1;;25879:32:0;-1:-1:-1;;;25844:20:0;;;;25834:30;;;;-1:-1:-1;;25879:32:0;;;;;-1:-1:-1;;;25890:21:0;;;;25879:32;;;;;;;;-1:-1:-1;;;;;25941:12:0;;-1:-1:-1;25941:12:0;;;:8;:12;;;;;;:17;:165;;-1:-1:-1;;;;;26094:12:0;;;;;;:8;:12;;;;;;25941:165;;;-1:-1:-1;;;;;12691:18:0;;12664:7;12691:18;;;:9;:18;;;;;;25978:27;:96;;-1:-1:-1;;;;;26062:12:0;;;;;;:8;:12;;;;;;25978:96;;;26026:15;25978:96;-1:-1:-1;;;;;25926:12:0;;;;;;:8;:12;;;;;:180;25694:424;26135:6;26134:7;:17;;;;;26146:5;26145:6;26134:17;26130:245;;;26184:27;;26168:13;:43;;26184:8;26242:27;26184;;;;;;;;;-1:-1:-1;;26226:43:0;;;;;;;-1:-1:-1;;;26242:27:0;;;;26226:43;;;;;;;;-1:-1:-1;;26330:33:0;-1:-1:-1;;;26294:21:0;;;;26284:31;;-1:-1:-1;;26330:33:0;;-1:-1:-1;;;26341:22:0;;;;26330:33;;;;;;;;26130:245;-1:-1:-1;;;;;26405:16:0;;;;;;:54;;-1:-1:-1;;;;;;26438:21:0;;26452:6;26438:21;;26405:54;:96;;;;-1:-1:-1;;;;;;26477:24:0;;;;;;:18;:24;;;;;;;;26476:25;26405:96;:136;;;;-1:-1:-1;;;;;;26519:22:0;;;;;;:18;:22;;;;;;;;26518:23;26405:136;26387:264;;;26573:5;26572:6;:20;;;;-1:-1:-1;26583:9:0;;;;26582:10;26572:20;26568:71;;;26628:11;;-1:-1:-1;;;;;26611:14:0;;;;;;:8;:14;;;;;;:28;;26628:11;26611:28;:::i;:::-;26594:14;:45;26568:71;26717:8;;;;;;;;;26707:7;;;;;;26675:29;;26717:8;26691:13;;;;;26675;:29;:::i;:::-;:39;;;;:::i;:::-;:50;;;;:::i;:::-;26663:9;;:62;;;;;;;;;;;;;;;;;;25223:1510;;25145:1588;;:::o;26741:1197::-;26825:4;26781:23;12691:18;;;:9;:18;;;;;;26924:12;;26870:21;;26924:17;;26939:2;26924:17;:::i;:::-;26906:15;:35;26902:103;;;26976:12;;:17;;26991:2;26976:17;:::i;:::-;26958:35;;26902:103;27116:9;;27015:12;;;;27141:1;;27116:9;;;;;;;27068:31;;27086:13;27068:15;:31;:::i;:::-;27067:58;;;;:::i;:::-;:75;;;;:::i;:::-;27038:104;-1:-1:-1;27153:20:0;27176:38;27038:104;27176:15;:38;:::i;:::-;27153:61;;27227:31;27245:12;27227:17;:31::i;:::-;27271:27;27301:41;27325:17;27301:21;:41;:::i;:::-;27410:8;;27271:71;;-1:-1:-1;27353:19:0;;27410:8;;;;;;;27389:17;;27405:1;;27389:13;:17;:::i;:::-;27388:30;;;;:::i;:::-;27375:9;;:44;;;:9;;;;;:44;:::i;:::-;27482:13;;27353:66;;;;;-1:-1:-1;27430:26:0;;27539:1;;27353:66;;27460:35;;27482:13;27460:19;:35;:::i;:::-;27459:64;;;;:::i;:::-;:81;;;;:::i;:::-;27575:15;;27567:87;;27430:110;;-1:-1:-1;;;;;;27575:15:0;;27618:21;;27567:87;;;;27618:21;27575:15;27567:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27553:101:0;;-1:-1:-1;;27671:22:0;;27667:264;;27710:53;27724:18;27744;27710:13;:53::i;:::-;27783:136;;;15314:25:1;;;15370:2;15355:18;;15348:34;;;15398:18;;;15391:34;;;27783:136:0;;15302:2:1;15287:18;27783:136:0;;;;;;;27667:264;26770:1168;;;;;;;;26741:1197::o;28323:473::-;28414:16;;;28428:1;28414:16;;;;;;;;28390:21;;28414:16;;;;;;;;;;-1:-1:-1;28414:16:0;28390:40;;28459:4;28441;28446:1;28441:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28441:23:0;;;:7;;;;;;;;;;:23;;;;28485:15;;:22;;;-1:-1:-1;;;28485:22:0;;;;:15;;;;;:20;;:22;;;;;28441:7;;28485:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28475:4;28480:1;28475:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28475:32:0;;;:7;;;;;;;;;:32;28550:15;;28518:62;;28535:4;;28550:15;28568:11;28518:8;:62::i;:::-;28591:15;;:197;;-1:-1:-1;;;28591:197:0;;-1:-1:-1;;;;;28591:15:0;;;;:66;;:197;;28672:11;;28591:15;;28715:4;;28742;;28762:15;;28591:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28379:417;28323:473;:::o;27946:369::-;28060:15;;28028:62;;28045:4;;-1:-1:-1;;;;;28060:15:0;28078:11;28028:8;:62::i;:::-;28101:15;;:206;;-1:-1:-1;;;28101:206:0;;28173:4;28101:206;;;17282:34:1;17332:18;;;17325:34;;;28101:15:0;17375:18:1;;;17368:34;;;17418:18;;;17411:34;28259:6:0;17461:19:1;;;17454:44;28281:15:0;17514:19:1;;;17507:35;-1:-1:-1;;;;;28101:15:0;;;;:31;;28140:9;;17216:19:1;;28101:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1620:180::-;1679:6;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;-1:-1:-1;1771:23:1;;1620:180;-1:-1:-1;1620:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2663:247::-;2722:6;2775:2;2763:9;2754:7;2750:23;2746:32;2743:52;;;2791:1;2788;2781:12;2743:52;2830:9;2817:23;2849:31;2874:5;2849:31;:::i;2915:160::-;2980:20;;3036:13;;3029:21;3019:32;;3009:60;;3065:1;3062;3055:12;3080:315;3145:6;3153;3206:2;3194:9;3185:7;3181:23;3177:32;3174:52;;;3222:1;3219;3212:12;3174:52;3261:9;3248:23;3280:31;3305:5;3280:31;:::i;:::-;3330:5;-1:-1:-1;3354:35:1;3385:2;3370:18;;3354:35;:::i;:::-;3344:45;;3080:315;;;;;:::o;3400:388::-;3468:6;3476;3529:2;3517:9;3508:7;3504:23;3500:32;3497:52;;;3545:1;3542;3535:12;3497:52;3584:9;3571:23;3603:31;3628:5;3603:31;:::i;:::-;3653:5;-1:-1:-1;3710:2:1;3695:18;;3682:32;3723:33;3682:32;3723:33;:::i;:::-;3775:7;3765:17;;;3400:388;;;;;:::o;3793:316::-;3867:6;3875;3883;3936:2;3924:9;3915:7;3911:23;3907:32;3904:52;;;3952:1;3949;3942:12;3904:52;3988:9;3975:23;3965:33;;4045:2;4034:9;4030:18;4017:32;4007:42;;4068:35;4099:2;4088:9;4084:18;4068:35;:::i;:::-;4058:45;;3793:316;;;;;:::o;4114:380::-;4193:1;4189:12;;;;4236;;;4257:61;;4311:4;4303:6;4299:17;4289:27;;4257:61;4364:2;4356:6;4353:14;4333:18;4330:38;4327:161;;4410:10;4405:3;4401:20;4398:1;4391:31;4445:4;4442:1;4435:15;4473:4;4470:1;4463:15;4327:161;;4114:380;;;:::o;4499:356::-;4701:2;4683:21;;;4720:18;;;4713:30;4779:34;4774:2;4759:18;;4752:62;4846:2;4831:18;;4499:356::o;4860:127::-;4921:10;4916:3;4912:20;4909:1;4902:31;4952:4;4949:1;4942:15;4976:4;4973:1;4966:15;4992:168;5032:7;5098:1;5094;5090:6;5086:14;5083:1;5080:21;5075:1;5068:9;5061:17;5057:45;5054:71;;;5105:18;;:::i;:::-;-1:-1:-1;5145:9:1;;4992:168::o;5165:127::-;5226:10;5221:3;5217:20;5214:1;5207:31;5257:4;5254:1;5247:15;5281:4;5278:1;5271:15;5297:120;5337:1;5363;5353:35;;5368:18;;:::i;:::-;-1:-1:-1;5402:9:1;;5297:120::o;6647:406::-;6849:2;6831:21;;;6888:2;6868:18;;;6861:30;6927:34;6922:2;6907:18;;6900:62;-1:-1:-1;;;6993:2:1;6978:18;;6971:40;7043:3;7028:19;;6647:406::o;7058:125::-;7123:9;;;7144:10;;;7141:36;;;7157:18;;:::i;7960:184::-;8030:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:52;;;8099:1;8096;8089:12;8051:52;-1:-1:-1;8122:16:1;;7960:184;-1:-1:-1;7960:184:1:o;11596:399::-;11798:2;11780:21;;;11837:2;11817:18;;;11810:30;11876:34;11871:2;11856:18;;11849:62;-1:-1:-1;;;11942:2:1;11927:18;;11920:33;11985:3;11970:19;;11596:399::o;12000:401::-;12202:2;12184:21;;;12241:2;12221:18;;;12214:30;12280:34;12275:2;12260:18;;12253:62;-1:-1:-1;;;12346:2:1;12331:18;;12324:35;12391:3;12376:19;;12000:401::o;12765:128::-;12832:9;;;12853:11;;;12850:37;;;12867:18;;:::i;14423:148::-;14511:4;14490:12;;;14504;;;14486:31;;14529:13;;14526:39;;;14545:18;;:::i;14576:165::-;14614:1;14648:4;14645:1;14641:12;14672:3;14662:37;;14679:18;;:::i;:::-;14731:3;14724:4;14721:1;14717:12;14713:22;14708:27;;;14576:165;;;;:::o;14746:151::-;14836:4;14829:12;;;14815;;;14811:31;;14854:14;;14851:40;;;14871:18;;:::i;15568:127::-;15629:10;15624:3;15620:20;15617:1;15610:31;15660:4;15657:1;15650:15;15684:4;15681:1;15674:15;15700:251;15770:6;15823:2;15811:9;15802:7;15798:23;15794:32;15791:52;;;15839:1;15836;15829:12;15791:52;15871:9;15865:16;15890:31;15915:5;15890:31;:::i;15956:980::-;16218:4;16266:3;16255:9;16251:19;16297:6;16286:9;16279:25;16323:2;16361:6;16356:2;16345:9;16341:18;16334:34;16404:3;16399:2;16388:9;16384:18;16377:31;16428:6;16463;16457:13;16494:6;16486;16479:22;16532:3;16521:9;16517:19;16510:26;;16571:2;16563:6;16559:15;16545:29;;16592:1;16602:195;16616:6;16613:1;16610:13;16602:195;;;16681:13;;-1:-1:-1;;;;;16677:39:1;16665:52;;16772:15;;;;16737:12;;;;16713:1;16631:9;16602:195;;;-1:-1:-1;;;;;;;16853:32:1;;;;16848:2;16833:18;;16826:60;-1:-1:-1;;;16917:3:1;16902:19;16895:35;16814:3;15956:980;-1:-1:-1;;;15956:980:1:o;17553:306::-;17641:6;17649;17657;17710:2;17698:9;17689:7;17685:23;17681:32;17678:52;;;17726:1;17723;17716:12;17678:52;17755:9;17749:16;17739:26;;17805:2;17794:9;17790:18;17784:25;17774:35;;17849:2;17838:9;17834:18;17828:25;17818:35;;17553:306;;;;;:::o

Swarm Source

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