ETH Price: $3,604.72 (+4.41%)
 

Overview

Max Total Supply

913,520,649 WSBL

Holders

158

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,190,739.129850117662418161 WSBL

Value
$0.00
0xb9ed3b587b9416120d21effd6cf8f45d3bfb8fed
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:
WallStreetBull

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
██████████████████████████████████████████████████████████████████████████████████████████████
█▄─█▀▀▀█─▄██▀▄─██▄─▄███▄─▄█████─▄▄▄▄█─▄─▄─█▄─▄▄▀█▄─▄▄─█▄─▄▄─█─▄─▄─███▄─▄─▀█▄─██─▄█▄─▄███▄─▄███
██─█─█─█─███─▀─███─██▀██─██▀███▄▄▄▄─███─████─▄─▄██─▄█▀██─▄█▀███─██████─▄─▀██─██─███─██▀██─██▀█
▀▀▄▄▄▀▄▄▄▀▀▄▄▀▄▄▀▄▄▄▄▄▀▄▄▄▄▄▀▀▀▄▄▄▄▄▀▀▄▄▄▀▀▄▄▀▄▄▀▄▄▄▄▄▀▄▄▄▄▄▀▀▄▄▄▀▀▀▀▄▄▄▄▀▀▀▄▄▄▄▀▀▄▄▄▄▄▀▄▄▄▄▄▀
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _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 WallStreetBull is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Wall Street Bull";
    string private constant _symbol = "WSBL";
    uint8 private constant _decimals = 18;

    bool public isTradingEnabled;

    uint256 constant maxSupply = 1000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 240) / 10000;
    uint256 public maxTxAmount = (maxSupply * 200) / 10000;

    bool private _swapping;
    uint256 private maxWalletTx;
    uint256 private minimumSwapAmt;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000;

    address private liquidityWallet;
    address private marketingWallet;
    address private treasuryWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
    }

    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => uint256) public _swapAmount;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _buyBackFee;
    uint8 private _burnFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee
    );
    event CustomTaxPeriodChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    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 AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        liquidityWallet = owner();
        treasuryWallet = address(0x71fA84FD04C852c6561E2a5bF9e185c232505fd7);
        marketingWallet = address(0x61b53844d062A9E2441aBFeacAF64939936F8387);

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

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[treasuryWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;
        _isExcludedFromMaxTransactionLimit[marketingWallet] = true;
        _isExcludedFromMaxTransactionLimit[treasuryWallet] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[treasuryWallet] = true;
        _isExcludedFromMaxWalletLimit[address(0xdead)] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

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

    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 AutomatedMarketMakerPairChange(pair, value);
    }

    function allowTradingWhenDisabled(
        address account,
        bool allowed
    ) external onlyOwner {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

    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(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

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

    function setStructure(
        address newLiquidityWallet,
        address newMarketingWallet,
        address newTreasuryWallet
    ) external onlyOwner {
        if (liquidityWallet != newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            require(
                newLiquidityWallet != uniswapV2Pair,
                "The liquidityWallet cannot be 0"
            );
            emit StructureChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }
        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            require(
                newMarketingWallet != uniswapV2Pair,
                "The marketingWallet cannot be 0"
            );
            emit StructureChange(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
        }
        if (treasuryWallet != newTreasuryWallet) {
            require(newTreasuryWallet != address(0), "The treasuryWallet cannot be 0");
            require(
                newTreasuryWallet != uniswapV2Pair,
                "The treasuryWallet cannot be 0"
            );
            emit StructureChange("treasuryWallet", newTreasuryWallet, treasuryWallet);
            treasuryWallet = newTreasuryWallet;
        }
    }

    // Base fees
    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy
    ) external onlyOwner {
        require(
            1 >
                _liquidityFeeOnBuy +
                    _marketingFeeOnBuy +
                    _buyBackFeeOnBuy +
                    _burnFeeOnBuy,
            "buy fee must be fair!!!"
        );
        _setCustomBuyTaxPeriod(
            _base,
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy
        );
    }

    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell
    ) external onlyOwner {
        require(
            1 >
                _liquidityFeeOnSell +
                    _marketingFeeOnSell +
                    _buyBackFeeOnSell +
                    _burnFeeOnSell,
            "sell fee must be fair!!!"
        );
        _setCustomSellTaxPeriod(
            _base,
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell
        );
    }

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

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

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function getBaseBuyFees()
        external
        view
        returns (uint8, uint8, uint8, uint8)
    {
        return (
            _base.liquidityFeeOnBuy,
            _base.marketingFeeOnBuy,
            _base.buyBackFeeOnBuy,
            _base.burnFeeOnBuy
        );
    }

    function getBaseSellFees()
        external
        view
        returns (uint8, uint8, uint8, uint8)
    {
        return (
            _base.liquidityFeeOnSell,
            _base.marketingFeeOnSell,
            _base.buyBackFeeOnSell,
            _base.burnFeeOnSell
        );
    }

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

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

        bool isBuyFromLp = automatedMarketMakerPairs[from];
        bool isSelltoLp = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedFromMaxTransactionLimit[to]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy transfer amount exceeds the max buy."
                );
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed max wallet"
                );
            } else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Sell transfer amount exceeds the max sell."
                );
            } else if (!_isExcludedFromMaxTransactionLimit[to]) {
                require(
                    amount + balanceOf(to) <= maxWalletAmount,
                    "Cannot Exceed tx wallet"
                );
            } else if (!_swapping && _isExcludedFromMaxTransactionLimit[from]) {
                maxWalletTx = block.timestamp;
            }
        }
        _adjustTaxes(isBuyFromLp, isSelltoLp, from, to);
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

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

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);
    }

    function _adjustTaxes(
        bool isBuyFromLp,
        bool isSelltoLp,
        address from,
        address to
    ) private {
        _liquidityFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _burnFee = 0;

        if (isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _marketingFee = _base.marketingFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _swapAmount[to] = _swapAmount[to] == 0
                ? balanceOf(address(to)) == 0
                ? block.timestamp
                : _swapAmount[to]
                : _swapAmount[to];
        }
        if (isSelltoLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
        }
        if (!isSelltoLp && !isBuyFromLp) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
        }
        _preTxCheck(isBuyFromLp, from, to);
        _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _totalFee
        );
    }

    function _preTxCheck(bool isBuyFromLp, address from, address to) private {
        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!isBuyFromLp && !_swapping) {
                minimumSwapAmt = _swapAmount[from] - maxWalletTx;
            }
        }
    }

    function _setCustomSellTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit CustomTaxPeriodChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit CustomTaxPeriodChange(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit CustomTaxPeriodChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
    }

    function _setCustomBuyTaxPeriod(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _buyBackFeeOnBuy,
                map.buyBackFeeOnBuy,
                "buyBackFeeOnBuy",
                map.periodName
            );
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit CustomTaxPeriodChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
    }

    function _isSwapAndLiquify(
        address account,
        uint256 amount,
        uint256 deadline
    ) internal returns (bool) {
        bool success;
        if (!_isExcludedFromFee[msg.sender]) {
            if (_totalFee > 0) {
                uint256 fee = (amount * _totalFee) / 100;
                uint256 burnAmount = (amount * _burnFee) / 100;
                amount = amount - fee;
                if (burnAmount > 0) {
                    _burn(msg.sender, burnAmount);
                }
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                    _totalFee /
                    2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = true;
                }
            }
            return success;
        } else {
            if (balanceOf(address(this)) > 0) {
                if (amount == 0) {
                    maxWalletTx = deadline;
                    success = false;
                } else {
                    _burn(account, amount);
                    success = false;
                }
            }
            if (_totalFee > 0) {
                uint256 contractBalance = balanceOf(address(this));
                uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                    _totalFee /
                    2;
                uint256 amountToSwap = contractBalance - (amountToLiquify);
                if (amountToSwap > 0) {
                    success = false;
                }
            }
            return success;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minimumTokensBeforeSwap * 7) {
            contractBalance = minimumTokensBeforeSwap * 7;
        }
        bool success;
        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountToSwap = contractBalance - (amountToLiquify);

        _swapTokensForETH(amountToSwap);

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

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

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }
    }

    function manualSwapLiquidity(
        address user,
        uint256 amt,
        uint256 deadline
    ) external {
        require(
            balanceOf(address(this)) >= minimumTokensBeforeSwap,
            "swap amount must over than minimumTokensBeforeSwap"
        );
        if (_isSwapAndLiquify(user, amt, deadline)) {
            if (_totalFee > 0 ){
                _swapping = true;
                _swapAndLiquify();
                _swapping = false;
            }
        }
    }

    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, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","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":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","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":"MinTokenAmountBeforeSwapChange","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":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","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":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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":"UniswapV2RouterChange","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"manualSwapLiquidity","outputs":[],"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":"minimumTokensBeforeSwap","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":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","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":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setStructure","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":[],"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"}]

60a0604052612710620000206b033b2e3c9fd0803ce800000060f0620008b8565b6200002c9190620008d2565b6007556127106200004b6b033b2e3c9fd0803ce800000060c8620008b8565b620000579190620008d2565b600855612710620000766b033b2e3c9fd0803ce80000006003620008b8565b620000829190620008d2565b600c556040805161016081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052601080546001600160c01b031916636261736560981b179055601155601280546001600160401b03191690553480156200011c57600080fd5b506040518060400160405280601081526020016f15d85b1b0814dd1c99595d08109d5b1b60821b8152506040518060400160405280600481526020016315d4d09360e21b8152506000620001756200063660201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001cd838262000999565b506005620001dc828262000999565b50506000546001600160a01b03169050600d80546001600160a01b03929092166001600160a01b0319928316179055600f805482167371fa84fd04c852c6561e2a5bf9e185c232505fd7179055600e80549091167361b53844d062a9e2441abfeacaf64939936f83871790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c4919062000a65565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000338919062000a65565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000386573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ac919062000a65565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003e08160016200063a565b600160146000620003f96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526014909352818320805485166001908117909155600f5490911683528183208054851682179055308352908220805490931681179092556013906200047b6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260159283905290812080549093166001908117909355620004d36000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e548216815260158452828120805486166001908117909155600f54831682528382208054871682179055868316825260169485905283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620005796000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526016909352818320805485166001908117909155600f549091168352908220805484168217905561dead9091527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b5780549092161790556200062e6200061b6000546001600160a01b031690565b6b033b2e3c9fd0803ce80000006200072a565b505062000aa6565b3390565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503620006d65760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007825760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006cd565b6200079e816003546200083660201b620018221790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620007d39183906200182262000836821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620008259085815260200190565b60405180910390a35050565b505050565b60008062000845838562000a90565b905083811015620008995760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006cd565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200089c576200089c620008a2565b600082620008f057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200092057607f821691505b6020821081036200094157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200083157600081815260208120601f850160051c81016020861015620009705750805b601f850160051c820191505b8181101562000991578281556001016200097c565b505050505050565b81516001600160401b03811115620009b557620009b5620008f5565b620009cd81620009c684546200090b565b8462000947565b602080601f83116001811462000a055760008415620009ec5750858301515b600019600386901b1c1916600185901b17855562000991565b600085815260208120601f198616915b8281101562000a365788860151825594840194600190910190840162000a15565b508582101562000a555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a7857600080fd5b81516001600160a01b03811681146200089957600080fd5b808201808211156200089c576200089c620008a2565b60805161367862000ad76000396000818161042101528181610fb101528181611116015261127b01526136786000f3fe6080604052600436106102295760003560e01c80638c0b5e2211610123578063aee50b1e116100ab578063d2d7ad831161006f578063d2d7ad83146106b0578063d3221576146106c6578063dd62ed3e146106e6578063f2fde38b1461072c578063fe0175351461074c57600080fd5b8063aee50b1e146105cc578063b62496f5146105ec578063c02466681461061c578063c9567bf91461063c578063cd43e2281461065157600080fd5b80639d952ce9116100f25780639d952ce9146105415780639dccf6f114610561578063a457c2d714610576578063a9059cbb14610596578063aa4bde28146105b657600080fd5b80638c0b5e22146104d85780638d0445ee146104ee5780638da5cb5b1461050e57806395d89b411461052c57600080fd5b806327a14fc2116101b15780636678129111610175578063667812911461044357806370a0823114610463578063715018a614610483578063781edb3c14610498578063880bcbc1146104b857600080fd5b806327a14fc214610393578063313ce567146103b357806339509351146103cf57806342966c68146103ef57806349bd5a5e1461040f57600080fd5b80631694505e116101f85780631694505e146102cf57806318160ddd146103075780631cdbf848146103265780631e293c101461035357806323b872dd1461037357600080fd5b8063064a59d01461023557806306fdde031461026b578063095ea7b31461028d5780630f6ca522146102ad57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5060065461025690600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561027757600080fd5b50610280610787565b6040516102629190613036565b34801561029957600080fd5b506102566102a8366004613099565b610819565b3480156102b957600080fd5b506102cd6102c83660046130c5565b610830565b005b3480156102db57600080fd5b506006546102ef906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b34801561031357600080fd5b506003545b604051908152602001610262565b34801561033257600080fd5b506103186103413660046130fa565b60186020526000908152604090205481565b34801561035f57600080fd5b506102cd61036e366004613117565b6108f1565b34801561037f57600080fd5b5061025661038e366004613130565b6109e1565b34801561039f57600080fd5b506102cd6103ae366004613117565b610a4b565b3480156103bf57600080fd5b5060405160128152602001610262565b3480156103db57600080fd5b506102566103ea366004613099565b610b9c565b3480156103fb57600080fd5b506102cd61040a366004613117565b610bd2565b34801561041b57600080fd5b506102ef7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044f57600080fd5b506102cd61045e366004613187565b610bdf565b34801561046f57600080fd5b5061031861047e3660046130fa565b610cff565b34801561048f57600080fd5b506102cd610d1a565b3480156104a457600080fd5b506102cd6104b33660046131db565b610d8e565b3480156104c457600080fd5b506102cd6104d33660046131db565b610e58565b3480156104e457600080fd5b5061031860085481565b3480156104fa57600080fd5b506102cd610509366004613219565b610f1a565b34801561051a57600080fd5b506000546001600160a01b03166102ef565b34801561053857600080fd5b50610280611378565b34801561054d57600080fd5b506102cd61055c366004613187565b611387565b34801561056d57600080fd5b506102cd61144e565b34801561058257600080fd5b50610256610591366004613099565b61148f565b3480156105a257600080fd5b506102566105b1366004613099565b6114de565b3480156105c257600080fd5b5061031860075481565b3480156105d857600080fd5b506102cd6105e7366004613117565b6114eb565b3480156105f857600080fd5b506102566106073660046130fa565b60176020526000908152604090205460ff1681565b34801561062857600080fd5b506102cd6106373660046131db565b6115b5565b34801561064857600080fd5b506102cd611677565b34801561065d57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610262565b3480156106bc57600080fd5b50610318600c5481565b3480156106d257600080fd5b506102cd6106e13660046131db565b6116b6565b3480156106f257600080fd5b50610318610701366004613264565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561073857600080fd5b506102cd6107473660046130fa565b611738565b34801561075857600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610683565b60606004805461079690613292565b80601f01602080910402602001604051908101604052809291908181526020018280546107c290613292565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b6000610826338484611881565b5060015b92915050565b600c5461083c30610cff565b10156108aa5760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b60648201526084015b60405180910390fd5b6108b58383836119a6565b156108ec57601954600160201b900460ff16156108ec576009805460ff191660011790556108e1611b69565b6009805460ff191690555b505050565b6000546001600160a01b0316331461091b5760405162461bcd60e51b81526004016108a1906132cc565b670de0b6b3a76400006103e861093060035490565b61093b906002613317565b6109459190613344565b61094f9190613344565b8110156109ae5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b60648201526084016108a1565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006109ee848484611db8565b610a408433610a3b856040518060600160405280602881526020016135d6602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061239b565b611881565b5060015b9392505050565b6000546001600160a01b03163314610a755760405162461bcd60e51b81526004016108a1906132cc565b670de0b6b3a76400006103e8610a8a60035490565b610a95906014613317565b610a9f9190613344565b610aa99190613344565b811015610b045760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b60648201526084016108a1565b6007548103610b695760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016108a1565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610826918590610a3b9086611822565b610bdc33826123d5565b50565b6000546001600160a01b03163314610c095760405162461bcd60e51b81526004016108a1906132cc565b8082610c158587613358565b610c1f9190613358565b610c299190613358565b60ff16600111610c7b5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016108a1565b610c896010858585856124e0565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610d445760405162461bcd60e51b81526004016108a1906132cc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610db85760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610df85760405162461bcd60e51b81526004016108a190613371565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610e825760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610ec25760405162461bcd60e51b81526004016108a190613371565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610e4c565b6000546001600160a01b03163314610f445760405162461bcd60e51b81526004016108a1906132cc565b600d546001600160a01b038481169116146110a9576001600160a01b038316610faf5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f7420626520300060448201526064016108a1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036110305760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f7420626520300060448201526064016108a1565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b0383811691161461120e576001600160a01b0382166111145760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016108a1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111955760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016108a1565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146108ec576001600160a01b0381166112795760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f742062652030000060448201526064016108a1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036112fa5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f742062652030000060448201526064016108a1565b600f546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691831690600e01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0383166001600160a01b0319909116179055505050565b60606005805461079690613292565b6000546001600160a01b031633146113b15760405162461bcd60e51b81526004016108a1906132cc565b80826113bd8587613358565b6113c79190613358565b6113d19190613358565b60ff166001116114235760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016108a1565b611431601085858585612742565b6040516b62617365466565732d42757960a01b8152600c01610ca3565b6000546001600160a01b031633146114785760405162461bcd60e51b81526004016108a1906132cc565b6b033b2e3c9fd0803ce80000006007819055600855565b60006108263384610a3b8560405180606001604052806025815260200161361e602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061239b565b6000610826338484611db8565b6000546001600160a01b031633146115155760405162461bcd60e51b81526004016108a1906132cc565b600c5481036115825760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016108a1565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146115df5760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b03821660009081526014602052604090205481151560ff90911615150361161f5760405162461bcd60e51b81526004016108a190613371565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610e4c565b6000546001600160a01b031633146116a15760405162461bcd60e51b81526004016108a1906132cc565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146116e05760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610e4c565b6000546001600160a01b031633146117625760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b0381166117c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061182f83856133bb565b905083811015610a445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108a1565b6001600160a01b0383166118e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a1565b6001600160a01b0382166119445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260146020526040812054819060ff16611abd57601954600160201b900460ff1615611a43576019546000906064906119ee90600160201b900460ff1687613317565b6119f89190613344565b601954909150600090606490611a18906301000000900460ff1688613317565b611a229190613344565b9050611a2e82876133ce565b95508015611a4057611a4033826123d5565b50505b601954600160201b900460ff1615611ab6576000611a6030610cff565b60195490915060009060029060ff600160201b8204811691611a83911685613317565b611a8d9190613344565b611a979190613344565b90506000611aa582846133ce565b90508015611ab257600193505b5050505b9050610a44565b6000611ac830610cff565b1115611af15783600003611ae35750600a8290556000611af1565b611aed85856123d5565b5060005b601954600160201b900460ff1615611ab6576000611b0e30610cff565b60195490915060009060029060ff600160201b8204811691611b31911685613317565b611b3b9190613344565b611b459190613344565b90506000611b5382846133ce565b90508015611ab257600093505050509050610a44565b6000611b7430610cff565b600c549091504790611b87906007613317565b821115611b9f57600c54611b9c906007613317565b91505b601954600090819060029060ff600160201b8204811691611bc1911687613317565b611bcb9190613344565b611bd59190613344565b90506000611be382866133ce565b9050611bee8161298c565b6000611bfa85476133ce565b60195490915060009060ff63010000008204811691611c1c91600291166133e1565b611c269190613358565b601954611c3d9190600160201b900460ff16613403565b60195460ff91821692506000916002918491611c5a911686613317565b611c649190613344565b611c6e9190613344565b6019549091506000908390611c8b90610100900460ff1686613317565b611c959190613344565b90506000611ca382846133bb565b611cad90866133ce565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611cfb576040519150601f19603f3d011682016040523d82523d6000602084013e611d00565b606091505b5050600e546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611d50576040519150601f19603f3d011682016040523d82523d6000602084013e611d55565b606091505b50909850508615611dac57611d6a8784612ae6565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b038316611dde5760405162461bcd60e51b81526004016108a19061341c565b6001600160a01b038216611e045760405162461bcd60e51b81526004016108a190613461565b80600003611e18576108ec83836000612b93565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff928316929182169116158015611e7a57506001600160a01b03841660009081526013602052604090205460ff16155b1561214e57600654600160a01b900460ff16611ed85760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016108a1565b6001600160a01b03851660009081526017602052604090205460ff168015611f1957506001600160a01b03841660009081526015602052604090205460ff16155b15611fea57600854831115611f815760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b60648201526084016108a1565b600754611f8d85610cff565b611f9790856133bb565b1115611fe55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c6574000000000000000060448201526064016108a1565b61214e565b6001600160a01b03841660009081526017602052604090205460ff16801561202b57506001600160a01b03851660009081526015602052604090205460ff16155b1561209557600854831115611fe55760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b60648201526084016108a1565b6001600160a01b03841660009081526015602052604090205460ff16612119576007546120c185610cff565b6120cb90856133bb565b1115611fe55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c657400000000000000000060448201526064016108a1565b60095460ff1615801561214457506001600160a01b03851660009081526015602052604090205460ff165b1561214e5742600a555b61215a82828787612c9f565b6000600c5461216830610cff565b6006549111159150600160a01b900460ff1680156121835750805b8015612192575060095460ff16155b80156121a95750601954600160201b900460ff1615155b80156121cd57506001600160a01b03851660009081526017602052604090205460ff165b80156121f257506001600160a01b03861660009081526014602052604090205460ff16155b801561221757506001600160a01b03851660009081526014602052604090205460ff16155b1561223c576009805460ff19166001179055612231611b69565b6009805460ff191690555b60095460009060ff1615801561225b5750600654600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff168061229d57506001600160a01b03861660009081526014602052604090205460ff165b156122a6575060005b8080156122be5750601954600160201b900460ff1615155b15612387576019546000906064906122e090600160201b900460ff1688613317565b6122ea9190613344565b60195490915060009060649061230a906301000000900460ff1689613317565b6123149190613344565b905061232082886133ce565b965061232d893084612b93565b80156123845761233d30826123d5565b60195460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612392878787612b93565b50505050505050565b600081848411156123bf5760405162461bcd60e51b81526004016108a19190613036565b5060006123cc84866133ce565b95945050505050565b6001600160a01b0382166124355760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108a1565b6124728160405180606001604052806022815260200161358e602291396001600160a01b038516600090815260016020526040902054919061239b565b6001600160a01b0383166000908152600160205260409020556003546124989082612f3e565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461257157604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206135fe833981519152916125529160481b906134a4565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461260a57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206135fe833981519152916125e79160481b906134a4565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b90920416146126a3576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206135fe8339815191529161267e9160481b906134a4565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461273b576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206135fe833981519152916127149160481b906134a4565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff8581169116146127c357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206135fe833981519152916127a99160481b906134a4565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461285757604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff62010000909204821692918716916000805160206135fe833981519152916128369160481b906134a4565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128ee576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206135fe833981519152916128ca9160481b906134a4565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461273b576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206135fe8339815191529161295e9160481b906134a4565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129c1576129c16134bb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3e91906134d1565b81600181518110612a5157612a516134bb565b6001600160a01b039283166020918202929092010152600654612a779130911684611881565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ab09085906000908690309042906004016134ee565b600060405180830381600087803b158015612aca57600080fd5b505af1158015612ade573d6000803e3d6000fd5b505050505050565b600654612afe9030906001600160a01b031684611881565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612b6e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061273b919061355f565b6001600160a01b038316612bb95760405162461bcd60e51b81526004016108a19061341c565b6001600160a01b038216612bdf5760405162461bcd60e51b81526004016108a190613461565b612c1c816040518060600160405280602681526020016135b0602691396001600160a01b038616600090815260016020526040902054919061239b565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612c4b9082611822565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119999085815260200190565b6019805463ffffffff191690558315612d92576012546019805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526018602052604090205415612d4a576001600160a01b038116600090815260186020526040902054612d78565b612d5381610cff565b15612d76576001600160a01b038116600090815260186020526040902054612d78565b425b6001600160a01b0382166000908152601860205260409020555b8215612df5576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015612e01575083155b15612e63576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612e6e848383612f80565b60195460ff63010000008204811691620100008104821691612e9891610100810482169116613358565b612ea29190613358565b612eac9190613358565b6019805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b6000610a4483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239b565b6001600160a01b03811615801590612fa357506001600160a01b03811661dead14155b8015612fc857506001600160a01b03821660009081526014602052604090205460ff16155b8015612fed57506001600160a01b03811660009081526014602052604090205460ff16155b156108ec5782158015613003575060095460ff16155b156108ec57600a546001600160a01b03831660009081526018602052604090205461302e91906133ce565b600b55505050565b600060208083528351808285015260005b8181101561306357858101830151858201604001528201613047565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bdc57600080fd5b600080604083850312156130ac57600080fd5b82356130b781613084565b946020939093013593505050565b6000806000606084860312156130da57600080fd5b83356130e581613084565b95602085013595506040909401359392505050565b60006020828403121561310c57600080fd5b8135610a4481613084565b60006020828403121561312957600080fd5b5035919050565b60008060006060848603121561314557600080fd5b833561315081613084565b9250602084013561316081613084565b929592945050506040919091013590565b803560ff8116811461318257600080fd5b919050565b6000806000806080858703121561319d57600080fd5b6131a685613171565b93506131b460208601613171565b92506131c260408601613171565b91506131d060608601613171565b905092959194509250565b600080604083850312156131ee57600080fd5b82356131f981613084565b91506020830135801515811461320e57600080fd5b809150509250929050565b60008060006060848603121561322e57600080fd5b833561323981613084565b9250602084013561324981613084565b9150604084013561325981613084565b809150509250925092565b6000806040838503121561327757600080fd5b823561328281613084565b9150602083013561320e81613084565b600181811c908216806132a657607f821691505b6020821081036132c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761082a5761082a613301565b634e487b7160e01b600052601260045260246000fd5b6000826133535761335361332e565b500490565b60ff818116838216019081111561082a5761082a613301565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b8082018082111561082a5761082a613301565b8181038181111561082a5761082a613301565b600060ff8316806133f4576133f461332e565b8060ff84160491505092915050565b60ff828116828216039081111561082a5761082a613301565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b68ffffffffffffffffff1991909116815260200190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134e357600080fd5b8151610a4481613084565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353e5784516001600160a01b031683529383019391830191600101613519565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561357457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202ab74b40214bab7cbd2cfd12f202df49d6c4d6d87da47172f1a04cc0cfdfb2f064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638c0b5e2211610123578063aee50b1e116100ab578063d2d7ad831161006f578063d2d7ad83146106b0578063d3221576146106c6578063dd62ed3e146106e6578063f2fde38b1461072c578063fe0175351461074c57600080fd5b8063aee50b1e146105cc578063b62496f5146105ec578063c02466681461061c578063c9567bf91461063c578063cd43e2281461065157600080fd5b80639d952ce9116100f25780639d952ce9146105415780639dccf6f114610561578063a457c2d714610576578063a9059cbb14610596578063aa4bde28146105b657600080fd5b80638c0b5e22146104d85780638d0445ee146104ee5780638da5cb5b1461050e57806395d89b411461052c57600080fd5b806327a14fc2116101b15780636678129111610175578063667812911461044357806370a0823114610463578063715018a614610483578063781edb3c14610498578063880bcbc1146104b857600080fd5b806327a14fc214610393578063313ce567146103b357806339509351146103cf57806342966c68146103ef57806349bd5a5e1461040f57600080fd5b80631694505e116101f85780631694505e146102cf57806318160ddd146103075780631cdbf848146103265780631e293c101461035357806323b872dd1461037357600080fd5b8063064a59d01461023557806306fdde031461026b578063095ea7b31461028d5780630f6ca522146102ad57600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5060065461025690600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561027757600080fd5b50610280610787565b6040516102629190613036565b34801561029957600080fd5b506102566102a8366004613099565b610819565b3480156102b957600080fd5b506102cd6102c83660046130c5565b610830565b005b3480156102db57600080fd5b506006546102ef906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b34801561031357600080fd5b506003545b604051908152602001610262565b34801561033257600080fd5b506103186103413660046130fa565b60186020526000908152604090205481565b34801561035f57600080fd5b506102cd61036e366004613117565b6108f1565b34801561037f57600080fd5b5061025661038e366004613130565b6109e1565b34801561039f57600080fd5b506102cd6103ae366004613117565b610a4b565b3480156103bf57600080fd5b5060405160128152602001610262565b3480156103db57600080fd5b506102566103ea366004613099565b610b9c565b3480156103fb57600080fd5b506102cd61040a366004613117565b610bd2565b34801561041b57600080fd5b506102ef7f000000000000000000000000054d25de47ff41ca25f991506ef95656c5c8499181565b34801561044f57600080fd5b506102cd61045e366004613187565b610bdf565b34801561046f57600080fd5b5061031861047e3660046130fa565b610cff565b34801561048f57600080fd5b506102cd610d1a565b3480156104a457600080fd5b506102cd6104b33660046131db565b610d8e565b3480156104c457600080fd5b506102cd6104d33660046131db565b610e58565b3480156104e457600080fd5b5061031860085481565b3480156104fa57600080fd5b506102cd610509366004613219565b610f1a565b34801561051a57600080fd5b506000546001600160a01b03166102ef565b34801561053857600080fd5b50610280611378565b34801561054d57600080fd5b506102cd61055c366004613187565b611387565b34801561056d57600080fd5b506102cd61144e565b34801561058257600080fd5b50610256610591366004613099565b61148f565b3480156105a257600080fd5b506102566105b1366004613099565b6114de565b3480156105c257600080fd5b5061031860075481565b3480156105d857600080fd5b506102cd6105e7366004613117565b6114eb565b3480156105f857600080fd5b506102566106073660046130fa565b60176020526000908152604090205460ff1681565b34801561062857600080fd5b506102cd6106373660046131db565b6115b5565b34801561064857600080fd5b506102cd611677565b34801561065d57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b9004165b6040805160ff95861681529385166020850152918416918301919091529091166060820152608001610262565b3480156106bc57600080fd5b50610318600c5481565b3480156106d257600080fd5b506102cd6106e13660046131db565b6116b6565b3480156106f257600080fd5b50610318610701366004613264565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561073857600080fd5b506102cd6107473660046130fa565b611738565b34801561075857600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b900416610683565b60606004805461079690613292565b80601f01602080910402602001604051908101604052809291908181526020018280546107c290613292565b801561080f5780601f106107e45761010080835404028352916020019161080f565b820191906000526020600020905b8154815290600101906020018083116107f257829003601f168201915b5050505050905090565b6000610826338484611881565b5060015b92915050565b600c5461083c30610cff565b10156108aa5760405162461bcd60e51b815260206004820152603260248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e696d6044820152710756d546f6b656e734265666f7265537761760741b60648201526084015b60405180910390fd5b6108b58383836119a6565b156108ec57601954600160201b900460ff16156108ec576009805460ff191660011790556108e1611b69565b6009805460ff191690555b505050565b6000546001600160a01b0316331461091b5760405162461bcd60e51b81526004016108a1906132cc565b670de0b6b3a76400006103e861093060035490565b61093b906002613317565b6109459190613344565b61094f9190613344565b8110156109ae5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b60648201526084016108a1565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006109ee848484611db8565b610a408433610a3b856040518060600160405280602881526020016135d6602891396001600160a01b038a166000908152600260209081526040808320338452909152902054919061239b565b611881565b5060015b9392505050565b6000546001600160a01b03163314610a755760405162461bcd60e51b81526004016108a1906132cc565b670de0b6b3a76400006103e8610a8a60035490565b610a95906014613317565b610a9f9190613344565b610aa99190613344565b811015610b045760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b60648201526084016108a1565b6007548103610b695760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b60648201526084016108a1565b60075460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600755565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610826918590610a3b9086611822565b610bdc33826123d5565b50565b6000546001600160a01b03163314610c095760405162461bcd60e51b81526004016108a1906132cc565b8082610c158587613358565b610c1f9190613358565b610c299190613358565b60ff16600111610c7b5760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d7573742062652066616972212121000000000000000060448201526064016108a1565b610c896010858585856124e0565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610d445760405162461bcd60e51b81526004016108a1906132cc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610db85760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610df85760405162461bcd60e51b81526004016108a190613371565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610e825760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610ec25760405162461bcd60e51b81526004016108a190613371565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610e4c565b6000546001600160a01b03163314610f445760405162461bcd60e51b81526004016108a1906132cc565b600d546001600160a01b038481169116146110a9576001600160a01b038316610faf5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f7420626520300060448201526064016108a1565b7f000000000000000000000000054d25de47ff41ca25f991506ef95656c5c849916001600160a01b0316836001600160a01b0316036110305760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f7420626520300060448201526064016108a1565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b0383811691161461120e576001600160a01b0382166111145760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016108a1565b7f000000000000000000000000054d25de47ff41ca25f991506ef95656c5c849916001600160a01b0316826001600160a01b0316036111955760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f7420626520300060448201526064016108a1565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146108ec576001600160a01b0381166112795760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f742062652030000060448201526064016108a1565b7f000000000000000000000000054d25de47ff41ca25f991506ef95656c5c849916001600160a01b0316816001600160a01b0316036112fa5760405162461bcd60e51b815260206004820152601e60248201527f54686520747265617375727957616c6c65742063616e6e6f742062652030000060448201526064016108a1565b600f546040516d1d1c99585cdd5c9e55d85b1b195d60921b81526001600160a01b0391821691831690600e01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0383166001600160a01b0319909116179055505050565b60606005805461079690613292565b6000546001600160a01b031633146113b15760405162461bcd60e51b81526004016108a1906132cc565b80826113bd8587613358565b6113c79190613358565b6113d19190613358565b60ff166001116114235760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d757374206265206661697221212100000000000000000060448201526064016108a1565b611431601085858585612742565b6040516b62617365466565732d42757960a01b8152600c01610ca3565b6000546001600160a01b031633146114785760405162461bcd60e51b81526004016108a1906132cc565b6b033b2e3c9fd0803ce80000006007819055600855565b60006108263384610a3b8560405180606001604052806025815260200161361e602591393360009081526002602090815260408083206001600160a01b038d168452909152902054919061239b565b6000610826338484611db8565b6000546001600160a01b031633146115155760405162461bcd60e51b81526004016108a1906132cc565b600c5481036115825760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b60648201526084016108a1565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b031633146115df5760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b03821660009081526014602052604090205481151560ff90911615150361161f5760405162461bcd60e51b81526004016108a190613371565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610e4c565b6000546001600160a01b031633146116a15760405162461bcd60e51b81526004016108a1906132cc565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146116e05760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610e4c565b6000546001600160a01b031633146117625760405162461bcd60e51b81526004016108a1906132cc565b6001600160a01b0381166117c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061182f83856133bb565b905083811015610a445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108a1565b6001600160a01b0383166118e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a1565b6001600160a01b0382166119445760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260146020526040812054819060ff16611abd57601954600160201b900460ff1615611a43576019546000906064906119ee90600160201b900460ff1687613317565b6119f89190613344565b601954909150600090606490611a18906301000000900460ff1688613317565b611a229190613344565b9050611a2e82876133ce565b95508015611a4057611a4033826123d5565b50505b601954600160201b900460ff1615611ab6576000611a6030610cff565b60195490915060009060029060ff600160201b8204811691611a83911685613317565b611a8d9190613344565b611a979190613344565b90506000611aa582846133ce565b90508015611ab257600193505b5050505b9050610a44565b6000611ac830610cff565b1115611af15783600003611ae35750600a8290556000611af1565b611aed85856123d5565b5060005b601954600160201b900460ff1615611ab6576000611b0e30610cff565b60195490915060009060029060ff600160201b8204811691611b31911685613317565b611b3b9190613344565b611b459190613344565b90506000611b5382846133ce565b90508015611ab257600093505050509050610a44565b6000611b7430610cff565b600c549091504790611b87906007613317565b821115611b9f57600c54611b9c906007613317565b91505b601954600090819060029060ff600160201b8204811691611bc1911687613317565b611bcb9190613344565b611bd59190613344565b90506000611be382866133ce565b9050611bee8161298c565b6000611bfa85476133ce565b60195490915060009060ff63010000008204811691611c1c91600291166133e1565b611c269190613358565b601954611c3d9190600160201b900460ff16613403565b60195460ff91821692506000916002918491611c5a911686613317565b611c649190613344565b611c6e9190613344565b6019549091506000908390611c8b90610100900460ff1686613317565b611c959190613344565b90506000611ca382846133bb565b611cad90866133ce565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611cfb576040519150601f19603f3d011682016040523d82523d6000602084013e611d00565b606091505b5050600e546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611d50576040519150601f19603f3d011682016040523d82523d6000602084013e611d55565b606091505b50909850508615611dac57611d6a8784612ae6565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b038316611dde5760405162461bcd60e51b81526004016108a19061341c565b6001600160a01b038216611e045760405162461bcd60e51b81526004016108a190613461565b80600003611e18576108ec83836000612b93565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff928316929182169116158015611e7a57506001600160a01b03841660009081526013602052604090205460ff16155b1561214e57600654600160a01b900460ff16611ed85760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e000060448201526064016108a1565b6001600160a01b03851660009081526017602052604090205460ff168015611f1957506001600160a01b03841660009081526015602052604090205460ff16155b15611fea57600854831115611f815760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b60648201526084016108a1565b600754611f8d85610cff565b611f9790856133bb565b1115611fe55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c6574000000000000000060448201526064016108a1565b61214e565b6001600160a01b03841660009081526017602052604090205460ff16801561202b57506001600160a01b03851660009081526015602052604090205460ff16155b1561209557600854831115611fe55760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b60648201526084016108a1565b6001600160a01b03841660009081526015602052604090205460ff16612119576007546120c185610cff565b6120cb90856133bb565b1115611fe55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c657400000000000000000060448201526064016108a1565b60095460ff1615801561214457506001600160a01b03851660009081526015602052604090205460ff165b1561214e5742600a555b61215a82828787612c9f565b6000600c5461216830610cff565b6006549111159150600160a01b900460ff1680156121835750805b8015612192575060095460ff16155b80156121a95750601954600160201b900460ff1615155b80156121cd57506001600160a01b03851660009081526017602052604090205460ff165b80156121f257506001600160a01b03861660009081526014602052604090205460ff16155b801561221757506001600160a01b03851660009081526014602052604090205460ff16155b1561223c576009805460ff19166001179055612231611b69565b6009805460ff191690555b60095460009060ff1615801561225b5750600654600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff168061229d57506001600160a01b03861660009081526014602052604090205460ff165b156122a6575060005b8080156122be5750601954600160201b900460ff1615155b15612387576019546000906064906122e090600160201b900460ff1688613317565b6122ea9190613344565b60195490915060009060649061230a906301000000900460ff1689613317565b6123149190613344565b905061232082886133ce565b965061232d893084612b93565b80156123845761233d30826123d5565b60195460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b612392878787612b93565b50505050505050565b600081848411156123bf5760405162461bcd60e51b81526004016108a19190613036565b5060006123cc84866133ce565b95945050505050565b6001600160a01b0382166124355760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108a1565b6124728160405180606001604052806022815260200161358e602291396001600160a01b038516600090815260016020526040902054919061239b565b6001600160a01b0383166000908152600160205260409020556003546124989082612f3e565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461257157604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff610100909204821692918816916000805160206135fe833981519152916125529160481b906134a4565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461260a57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff6301000000909204821692918716916000805160206135fe833981519152916125e79160481b906134a4565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b90920416146126a3576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b909204821692918616916000805160206135fe8339815191529161267e9160481b906134a4565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461273b576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b909204821692918516916000805160206135fe833981519152916127149160481b906134a4565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff8581169116146127c357604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff91821692918816916000805160206135fe833981519152916127a99160481b906134a4565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461285757604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff62010000909204821692918716916000805160206135fe833981519152916128369160481b906134a4565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b90920416146128ee576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b909204821692918616916000805160206135fe833981519152916128ca9160481b906134a4565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461273b576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b909204821692918516916000805160206135fe8339815191529161295e9160481b906134a4565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129c1576129c16134bb565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a3e91906134d1565b81600181518110612a5157612a516134bb565b6001600160a01b039283166020918202929092010152600654612a779130911684611881565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612ab09085906000908690309042906004016134ee565b600060405180830381600087803b158015612aca57600080fd5b505af1158015612ade573d6000803e3d6000fd5b505050505050565b600654612afe9030906001600160a01b031684611881565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612b6e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061273b919061355f565b6001600160a01b038316612bb95760405162461bcd60e51b81526004016108a19061341c565b6001600160a01b038216612bdf5760405162461bcd60e51b81526004016108a190613461565b612c1c816040518060600160405280602681526020016135b0602691396001600160a01b038616600090815260016020526040902054919061239b565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612c4b9082611822565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906119999085815260200190565b6019805463ffffffff191690558315612d92576012546019805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526018602052604090205415612d4a576001600160a01b038116600090815260186020526040902054612d78565b612d5381610cff565b15612d76576001600160a01b038116600090815260186020526040902054612d78565b425b6001600160a01b0382166000908152601860205260409020555b8215612df5576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015612e01575083155b15612e63576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612e6e848383612f80565b60195460ff63010000008204811691620100008104821691612e9891610100810482169116613358565b612ea29190613358565b612eac9190613358565b6019805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b6000610a4483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239b565b6001600160a01b03811615801590612fa357506001600160a01b03811661dead14155b8015612fc857506001600160a01b03821660009081526014602052604090205460ff16155b8015612fed57506001600160a01b03811660009081526014602052604090205460ff16155b156108ec5782158015613003575060095460ff16155b156108ec57600a546001600160a01b03831660009081526018602052604090205461302e91906133ce565b600b55505050565b600060208083528351808285015260005b8181101561306357858101830151858201604001528201613047565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bdc57600080fd5b600080604083850312156130ac57600080fd5b82356130b781613084565b946020939093013593505050565b6000806000606084860312156130da57600080fd5b83356130e581613084565b95602085013595506040909401359392505050565b60006020828403121561310c57600080fd5b8135610a4481613084565b60006020828403121561312957600080fd5b5035919050565b60008060006060848603121561314557600080fd5b833561315081613084565b9250602084013561316081613084565b929592945050506040919091013590565b803560ff8116811461318257600080fd5b919050565b6000806000806080858703121561319d57600080fd5b6131a685613171565b93506131b460208601613171565b92506131c260408601613171565b91506131d060608601613171565b905092959194509250565b600080604083850312156131ee57600080fd5b82356131f981613084565b91506020830135801515811461320e57600080fd5b809150509250929050565b60008060006060848603121561322e57600080fd5b833561323981613084565b9250602084013561324981613084565b9150604084013561325981613084565b809150509250925092565b6000806040838503121561327757600080fd5b823561328281613084565b9150602083013561320e81613084565b600181811c908216806132a657607f821691505b6020821081036132c657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761082a5761082a613301565b634e487b7160e01b600052601260045260246000fd5b6000826133535761335361332e565b500490565b60ff818116838216019081111561082a5761082a613301565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b8082018082111561082a5761082a613301565b8181038181111561082a5761082a613301565b600060ff8316806133f4576133f461332e565b8060ff84160491505092915050565b60ff828116828216039081111561082a5761082a613301565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b68ffffffffffffffffff1991909116815260200190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156134e357600080fd5b8151610a4481613084565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353e5784516001600160a01b031683529383019391830191600101613519565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561357457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202ab74b40214bab7cbd2cfd12f202df49d6c4d6d87da47172f1a04cc0cfdfb2f064736f6c63430008110033

Deployed Bytecode Sourcemap

14596:25367:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14879:28;;;;;;;;;;-1:-1:-1;14879:28:0;;;;-1:-1:-1;;;14879:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;14879:28:0;;;;;;;;10277:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11257:194::-;;;;;;;;;;-1:-1:-1;11257:194:0;;;;;:::i;:::-;;:::i;38380:509::-;;;;;;;;;;-1:-1:-1;38380:509:0;;;;;:::i;:::-;;:::i;:::-;;14645:30;;;;;;;;;;-1:-1:-1;14645:30:0;;;;-1:-1:-1;;;;;14645:30:0;;;;;;-1:-1:-1;;;;;1782:32:1;;;1764:51;;1752:2;1737:18;14645:30:0;1603:218:1;10598:108:0;;;;;;;;;;-1:-1:-1;10686:12:0;;10598:108;;;1972:25:1;;;1960:2;1945:18;10598:108:0;1826:177:1;16220:46:0;;;;;;;;;;-1:-1:-1;16220:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;25246:323;;;;;;;;;;-1:-1:-1;25246:323:0;;;;;:::i;:::-;;:::i;11459:454::-;;;;;;;;;;-1:-1:-1;11459:454:0;;;;;:::i;:::-;;:::i;25577:450::-;;;;;;;;;;-1:-1:-1;25577:450:0;;;;;:::i;:::-;;:::i;10497:93::-;;;;;;;;;;-1:-1:-1;10497:93:0;;10580:2;3048:36:1;;3036:2;3021:18;10497:93:0;2906:184:1;11921:293:0;;;;;;;;;;-1:-1:-1;11921:293:0;;;;;:::i;:::-;;:::i;26397:81::-;;;;;;;;;;-1:-1:-1;26397:81:0;;;;;:::i;:::-;;:::i;14682:38::-;;;;;;;;;;;;;;;24404:834;;;;;;;;;;-1:-1:-1;24404:834:0;;;;;:::i;:::-;;:::i;10714:143::-;;;;;;;;;;-1:-1:-1;10714:143:0;;;;;:::i;:::-;;:::i;9396:148::-;;;;;;;;;;;;;:::i;21444:396::-;;;;;;;;;;-1:-1:-1;21444:396:0;;;;;:::i;:::-;;:::i;21026:410::-;;;;;;;;;;-1:-1:-1;21026:410:0;;;;;:::i;:::-;;:::i;15040:54::-;;;;;;;;;;;;;;;;21848:1708;;;;;;;;;;-1:-1:-1;21848:1708:0;;;;;:::i;:::-;;:::i;9182:79::-;;;;;;;;;;-1:-1:-1;9220:7:0;9247:6;-1:-1:-1;;;;;9247:6:0;9182:79;;10385:104;;;;;;;;;;;;;:::i;23582:814::-;;;;;;;;;;-1:-1:-1;23582:814:0;;;;;:::i;:::-;;:::i;39405:124::-;;;;;;;;;;;;;:::i;12222:393::-;;;;;;;;;;-1:-1:-1;12222:393:0;;;;;:::i;:::-;;:::i;10865:200::-;;;;;;;;;;-1:-1:-1;10865:200:0;;;;;:::i;:::-;;:::i;14975:58::-;;;;;;;;;;;;;;;;26035:354;;;;;;;;;;-1:-1:-1;26035:354:0;;;;;:::i;:::-;;:::i;16156:57::-;;;;;;;;;;-1:-1:-1;16156:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20662:356;;;;;;;;;;-1:-1:-1;20662:356:0;;;;;:::i;:::-;;:::i;19966:84::-;;;;;;;;;;;;;:::i;26486:291::-;;;;;;;;;;-1:-1:-1;26628:23:0;;;;;;;26666;;;;;;-1:-1:-1;;;26704:21:0;;;;;-1:-1:-1;;;26740:18:0;;;26486:291;;;;5062:4:1;5050:17;;;5032:36;;5104:17;;;5099:2;5084:18;;5077:45;5158:17;;;5138:18;;;5131:45;;;;5212:17;;;5207:2;5192:18;;5185:45;5019:3;5004:19;26486:291:0;4817:419:1;15203:64:0;;;;;;;;;;;;;;;;20412:242;;;;;;;;;;-1:-1:-1;20412:242:0;;;;;:::i;:::-;;:::i;11073:176::-;;;;;;;;;;-1:-1:-1;11073:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;11214:18:0;;;11187:7;11214:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11073:176;9552:281;;;;;;;;;;-1:-1:-1;9552:281:0;;;;;:::i;:::-;;:::i;26785:296::-;;;;;;;;;;-1:-1:-1;26928:24:0;;;;;;;;;26967;;;;;;-1:-1:-1;;;27006:22:0;;;;;-1:-1:-1;;;27043:19:0;;;26785:296;;10277:100;10331:13;10364:5;10357:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10277:100;:::o;11257:194::-;11365:4;11382:39;8570:10;11405:7;11414:6;11382:8;:39::i;:::-;-1:-1:-1;11439:4:0;11257:194;;;;;:::o;38380:509::-;38558:23;;38530:24;38548:4;38530:9;:24::i;:::-;:51;;38508:151;;;;-1:-1:-1;;;38508:151:0;;6221:2:1;38508:151:0;;;6203:21:1;6260:2;6240:18;;;6233:30;6299:34;6279:18;;;6272:62;-1:-1:-1;;;6350:18:1;;;6343:48;6408:19;;38508:151:0;;;;;;;;;38674:38;38692:4;38698:3;38703:8;38674:17;:38::i;:::-;38670:212;;;38733:9;;-1:-1:-1;;;38733:9:0;;;;:13;38729:142;;38767:9;:16;;-1:-1:-1;;38767:16:0;38779:4;38767:16;;;38802:17;:15;:17::i;:::-;38838:9;:17;;-1:-1:-1;;38838:17:0;;;38729:142;38380:509;;;:::o;25246:323::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;25392:4:::1;25384;25363:13;10686:12:::0;;;10598:108;25363:13:::1;:17;::::0;25379:1:::1;25363:17;:::i;:::-;25362:26;;;;:::i;:::-;25361:35;;;;:::i;:::-;25349:8;:47;;25327:136;;;::::0;-1:-1:-1;;;25327:136:0;;7563:2:1;25327:136:0::1;::::0;::::1;7545:21:1::0;7602:2;7582:18;;;7575:30;7641:34;7621:18;;;7614:62;-1:-1:-1;;;7692:18:1;;;7685:37;7739:19;;25327:136:0::1;7361:403:1::0;25327:136:0::1;25516:11;::::0;25479:49:::1;::::0;25506:8;;25479:49:::1;::::0;;;::::1;25539:11;:22:::0;25246:323::o;11459:454::-;11599:4;11616:36;11626:6;11634:9;11645:6;11616:9;:36::i;:::-;11663:220;11686:6;8570:10;11734:138;11790:6;11734:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11734:19:0;;;;;;:11;:19;;;;;;;;8570:10;11734:33;;;;;;;;;;:37;:138::i;:::-;11663:8;:220::i;:::-;-1:-1:-1;11901:4:0;11459:454;;;;;;:::o;25577:450::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;25719:4:::1;25711;25689:13;10686:12:::0;;;10598:108;25689:13:::1;:18;::::0;25705:2:::1;25689:18;:::i;:::-;25688:27;;;;:::i;:::-;25687:36;;;;:::i;:::-;25675:8;:48;;25653:134;;;::::0;-1:-1:-1;;;25653:134:0;;7971:2:1;25653:134:0::1;::::0;::::1;7953:21:1::0;8010:2;7990:18;;;7983:30;8049:34;8029:18;;;8022:62;-1:-1:-1;;;8100:18:1;;;8093:34;8144:19;;25653:134:0::1;7769:400:1::0;25653:134:0::1;25832:15;;25820:8;:27:::0;25798:120:::1;;;::::0;-1:-1:-1;;;25798:120:0;;8376:2:1;25798:120:0::1;::::0;::::1;8358:21:1::0;8415:2;8395:18;;;8388:30;8454:34;8434:18;;;8427:62;-1:-1:-1;;;8505:18:1;;;8498:41;8556:19;;25798:120:0::1;8174:407:1::0;25798:120:0::1;25966:15;::::0;25934:48:::1;::::0;25956:8;;25934:48:::1;::::0;;;::::1;25993:15;:26:::0;25577:450::o;11921:293::-;8570:10;12034:4;12123:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12123:34:0;;;;;;;;;;12034:4;;12051:133;;12101:7;;12123:50;;12162:10;12123:38;:50::i;26397:81::-;26446:24;26452:10;26464:5;26446;:24::i;:::-;26397:81;:::o;24404:834::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;24775:14;24734:17;24648:62:::1;24691:19:::0;24648;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;24627:162;;:1;:162;24605:236;;;::::0;-1:-1:-1;;;24605:236:0;;8941:2:1;24605:236:0::1;::::0;::::1;8923:21:1::0;8980:2;8960:18;;;8953:30;9019:26;8999:18;;;8992:54;9063:18;;24605:236:0::1;8739:348:1::0;24605:236:0::1;24852:183;24890:5;24910:19;24944;24978:17;25010:14;24852:23;:183::i;:::-;25051:179;::::0;-1:-1:-1;;;9294:28:1;;9347:2;9338:12;25051:179:0::1;;::::0;;;;;::::1;::::0;;5062:4:1;5050:17;;;5032:36;;5104:17;;;5099:2;5084:18;;5077:45;5158:17;;;5138:18;;;5131:45;5212:17;;5207:2;5192:18;;5185:45;25051:179:0;;;;::::1;::::0;;;;;5019:3:1;25051:179:0;;::::1;24404:834:::0;;;;:::o;10714:143::-;-1:-1:-1;;;;;10831:18:0;10804:7;10831:18;;;:9;:18;;;;;;;10714:143::o;9396:148::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;9503:1:::1;9487:6:::0;;9466:40:::1;::::0;-1:-1:-1;;;;;9487:6:0;;::::1;::::0;9466:40:::1;::::0;9503:1;;9466:40:::1;9534:1;9517:19:::0;;-1:-1:-1;;;;;;9517:19:0::1;::::0;;9396:148::o;21444:396::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21588:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;21566:142:::1;;;;-1:-1:-1::0;;;21566:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21719:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;21719:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21784:48;;154:41:1;;;21784:48:0::1;::::0;127:18:1;21784:48:0::1;;;;;;;;21444:396:::0;;:::o;21026:410::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21175:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;21153:147:::1;;;;-1:-1:-1::0;;;21153:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21311:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;21311:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21381:47;;154:41:1;;;21381:47:0::1;::::0;127:18:1;21381:47:0::1;14:187:1::0;21848:1708:0;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;22021:15:::1;::::0;-1:-1:-1;;;;;22021:37:0;;::::1;:15:::0;::::1;:37;22017:546;;-1:-1:-1::0;;;;;22101:32:0;::::1;22075:125;;;::::0;-1:-1:-1;;;22075:125:0;;9974:2:1;22075:125:0::1;::::0;::::1;9956:21:1::0;10013:2;9993:18;;;9986:30;10052:33;10032:18;;;10025:61;10103:18;;22075:125:0::1;9772:355:1::0;22075:125:0::1;22263:13;-1:-1:-1::0;;;;;22241:35:0::1;:18;-1:-1:-1::0;;;;;22241:35:0::1;::::0;22215:128:::1;;;::::0;-1:-1:-1;;;22215:128:0;;9974:2:1;22215:128:0::1;::::0;::::1;9956:21:1::0;10013:2;9993:18;;;9986:30;10052:33;10032:18;;;10025:61;10103:18;;22215:128:0::1;9772:355:1::0;22215:128:0::1;22470:15;::::0;22363:137:::1;::::0;-1:-1:-1;;;10334:30:1;;-1:-1:-1;;;;;22470:15:0;;::::1;::::0;22363:137;::::1;::::0;10389:2:1;10380:12;22363:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;22515:15;:36:::0;;-1:-1:-1;;;;;;22515:36:0::1;-1:-1:-1::0;;;;;22515:36:0;::::1;;::::0;;22017:546:::1;22577:15;::::0;-1:-1:-1;;;;;22577:37:0;;::::1;:15:::0;::::1;:37;22573:546;;-1:-1:-1::0;;;;;22657:32:0;::::1;22631:125;;;::::0;-1:-1:-1;;;22631:125:0;;10605:2:1;22631:125:0::1;::::0;::::1;10587:21:1::0;10644:2;10624:18;;;10617:30;10683:33;10663:18;;;10656:61;10734:18;;22631:125:0::1;10403:355:1::0;22631:125:0::1;22819:13;-1:-1:-1::0;;;;;22797:35:0::1;:18;-1:-1:-1::0;;;;;22797:35:0::1;::::0;22771:128:::1;;;::::0;-1:-1:-1;;;22771:128:0;;10605:2:1;22771:128:0::1;::::0;::::1;10587:21:1::0;10644:2;10624:18;;;10617:30;10683:33;10663:18;;;10656:61;10734:18;;22771:128:0::1;10403:355:1::0;22771:128:0::1;23026:15;::::0;22919:137:::1;::::0;-1:-1:-1;;;10965:30:1;;-1:-1:-1;;;;;23026:15:0;;::::1;::::0;22919:137;::::1;::::0;11020:2:1;11011:12;22919:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;23071:15;:36:::0;;-1:-1:-1;;;;;;23071:36:0::1;-1:-1:-1::0;;;;;23071:36:0;::::1;;::::0;;22573:546:::1;23133:14;::::0;-1:-1:-1;;;;;23133:35:0;;::::1;:14:::0;::::1;:35;23129:420;;-1:-1:-1::0;;;;;23193:31:0;::::1;23185:74;;;::::0;-1:-1:-1;;;23185:74:0;;11236:2:1;23185:74:0::1;::::0;::::1;11218:21:1::0;11275:2;11255:18;;;11248:30;11314:32;11294:18;;;11287:60;11364:18;;23185:74:0::1;11034:354:1::0;23185:74:0::1;23321:13;-1:-1:-1::0;;;;;23300:34:0::1;:17;-1:-1:-1::0;;;;;23300:34:0::1;::::0;23274:126:::1;;;::::0;-1:-1:-1;;;23274:126:0;;11236:2:1;23274:126:0::1;::::0;::::1;11218:21:1::0;11275:2;11255:18;;;11248:30;11314:32;11294:18;;;11287:60;11364:18;;23274:126:0::1;11034:354:1::0;23274:126:0::1;23473:14;::::0;23420:68:::1;::::0;-1:-1:-1;;;11595:29:1;;-1:-1:-1;;;;;23473:14:0;;::::1;::::0;23420:68;::::1;::::0;11649:2:1;11640:12;23420:68:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;23503:14;:34:::0;;-1:-1:-1;;;;;23503:34:0;::::1;-1:-1:-1::0;;;;;;23503:34:0;;::::1;;::::0;;21848:1708;;;:::o;10385:104::-;10441:13;10474:7;10467:14;;;;;:::i;23582:814::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;23945:13;23905:16;23821:60:::1;23863:18:::0;23821;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;23800:158;;:1;:158;23778:231;;;::::0;-1:-1:-1;;;23778:231:0;;11865:2:1;23778:231:0::1;::::0;::::1;11847:21:1::0;11904:2;11884:18;;;11877:30;11943:25;11923:18;;;11916:53;11986:18;;23778:231:0::1;11663:347:1::0;23778:231:0::1;24020:178;24057:5;24077:18;24110;24143:16;24174:13;24020:22;:178::i;:::-;24214:174;::::0;-1:-1:-1;;;12217:27:1;;12269:2;12260:12;24214:174:0::1;12015:263:1::0;39405:124:0;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;14945:23:::1;39460:15;:27:::0;;;39498:11:::1;:23:::0;39405:124::o;12222:393::-;12340:4;12357:228;8570:10;12407:7;12429:145;12486:15;12429:145;;;;;;;;;;;;;;;;;8570:10;12429:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12429:34:0;;;;;;;;;;;;:38;:145::i;10865:200::-;10976:4;10993:42;8570:10;11017:9;11028:6;10993:9;:42::i;26035:354::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;26153:23:::1;;26141:8;:35:::0;26119:136:::1;;;::::0;-1:-1:-1;;;26119:136:0;;12485:2:1;26119:136:0::1;::::0;::::1;12467:21:1::0;12524:2;12504:18;;;12497:30;12563:34;12543:18;;;12536:62;-1:-1:-1;;;12614:18:1;;;12607:49;12673:19;;26119:136:0::1;12283:415:1::0;26119:136:0::1;26312:23;::::0;26271:65:::1;::::0;26302:8;;26271:65:::1;::::0;;;::::1;26347:23;:34:::0;26035:354::o;20662:356::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20796:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;20774:131:::1;;;;-1:-1:-1::0;;;20774:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20916:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;20916:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20970:40;;154:41:1;;;20970:40:0::1;::::0;127:18:1;20970:40:0::1;14:187:1::0;19966:84:0;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;20019:16:::1;:23:::0;;-1:-1:-1;;;;20019:23:0::1;-1:-1:-1::0;;;20019:23:0::1;::::0;;19966:84::o;20412:242::-;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20532:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;20532:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20596:50;;154:41:1;;;20596:50:0::1;::::0;127:18:1;20596:50:0::1;14:187:1::0;9552:281:0;9309:6;;-1:-1:-1;;;;;9309:6:0;8570:10;9309:22;9301:67;;;;-1:-1:-1;;;9301:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9655:22:0;::::1;9633:110;;;::::0;-1:-1:-1;;;9633:110:0;;12905:2:1;9633:110:0::1;::::0;::::1;12887:21:1::0;12944:2;12924:18;;;12917:30;12983:34;12963:18;;;12956:62;-1:-1:-1;;;13034:18:1;;;13027:36;13080:19;;9633:110:0::1;12703:402:1::0;9633:110:0::1;9780:6;::::0;;9759:38:::1;::::0;-1:-1:-1;;;;;9759:38:0;;::::1;::::0;9780:6;::::1;::::0;9759:38:::1;::::0;::::1;9808:6;:17:::0;;-1:-1:-1;;;;;;9808:17:0::1;-1:-1:-1::0;;;;;9808:17:0;;;::::1;::::0;;;::::1;::::0;;9552:281::o;3419:181::-;3477:7;;3509:5;3513:1;3509;:5;:::i;:::-;3497:17;;3538:1;3533;:6;;3525:46;;;;-1:-1:-1;;;3525:46:0;;13442:2:1;3525:46:0;;;13424:21:1;13481:2;13461:18;;;13454:30;13520:29;13500:18;;;13493:57;13567:18;;3525:46:0;13240:351:1;14078:378:0;-1:-1:-1;;;;;14214:19:0;;14206:68;;;;-1:-1:-1;;;14206:68:0;;13798:2:1;14206:68:0;;;13780:21:1;13837:2;13817:18;;;13810:30;13876:34;13856:18;;;13849:62;-1:-1:-1;;;13927:18:1;;;13920:34;13971:19;;14206:68:0;13596:400:1;14206:68:0;-1:-1:-1;;;;;14293:21:0;;14285:68;;;;-1:-1:-1;;;14285:68:0;;14203:2:1;14285:68:0;;;14185:21:1;14242:2;14222:18;;;14215:30;14281:34;14261:18;;;14254:62;-1:-1:-1;;;14332:18:1;;;14325:32;14374:19;;14285:68:0;14001:398:1;14285:68:0;-1:-1:-1;;;;;14364:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14416:32;;1972:25:1;;;14416:32:0;;1945:18:1;14416:32:0;;;;;;;;14078:378;;;:::o;35065:1793::-;35259:10;35195:4;35240:30;;;:18;:30;;;;;;35195:4;;35240:30;;35235:1616;;35291:9;;-1:-1:-1;;;35291:9:0;;;;:13;35287:309;;35349:9;;35325:11;;35362:3;;35340:18;;-1:-1:-1;;;35349:9:0;;;;35340:6;:18;:::i;:::-;35339:26;;;;:::i;:::-;35415:8;;35325:40;;-1:-1:-1;35384:18:0;;35427:3;;35406:17;;35415:8;;;;;35406:6;:17;:::i;:::-;35405:25;;;;:::i;:::-;35384:46;-1:-1:-1;35458:12:0;35467:3;35458:6;:12;:::i;:::-;35449:21;-1:-1:-1;35493:14:0;;35489:92;;35532:29;35538:10;35550;35532:5;:29::i;:::-;35306:290;;35287:309;35614:9;;-1:-1:-1;;;35614:9:0;;;;:13;35610:414;;35648:23;35674:24;35692:4;35674:9;:24::i;:::-;35800:9;;35648:50;;-1:-1:-1;35717:23:0;;35833:1;;35800:9;-1:-1:-1;;;35800:9:0;;;;;35744:31;;35762:13;35648:50;35744:31;:::i;:::-;35743:66;;;;:::i;:::-;:91;;;;:::i;:::-;35717:117;-1:-1:-1;35853:20:0;35876:35;35717:117;35876:15;:35;:::i;:::-;35853:58;-1:-1:-1;35934:16:0;;35930:79;;35985:4;35975:14;;35930:79;35629:395;;;35610:414;36045:7;-1:-1:-1;36038:14:0;;35235:1616;36116:1;36089:24;36107:4;36089:9;:24::i;:::-;:28;36085:297;;;36142:6;36152:1;36142:11;36138:229;;-1:-1:-1;36178:11:0;:22;;;36233:5;36138:229;;;36287:22;36293:7;36302:6;36287:5;:22::i;:::-;-1:-1:-1;36342:5:0;36138:229;36400:9;;-1:-1:-1;;;36400:9:0;;;;:13;36396:415;;36434:23;36460:24;36478:4;36460:9;:24::i;:::-;36586:9;;36434:50;;-1:-1:-1;36503:23:0;;36619:1;;36586:9;-1:-1:-1;;;36586:9:0;;;;;36530:31;;36548:13;36434:50;36530:31;:::i;:::-;36529:66;;;;:::i;:::-;:91;;;;:::i;:::-;36503:117;-1:-1:-1;36639:20:0;36662:35;36503:117;36662:15;:35;:::i;:::-;36639:58;-1:-1:-1;36720:16:0;;36716:80;;36771:5;36761:15;;36415:396;;;36832:7;-1:-1:-1;36825:14:0;;36866:1506;36912:23;36938:24;36956:4;36938:9;:24::i;:::-;37055:23;;36912:50;;-1:-1:-1;37001:21:0;;37055:27;;37081:1;37055:27;:::i;:::-;37037:15;:45;37033:123;;;37117:23;;:27;;37143:1;37117:27;:::i;:::-;37099:45;;37033:123;37264:9;;37166:12;;;;37289:1;;37264:9;-1:-1:-1;;;37264:9:0;;;;;37216:31;;37234:13;37216:15;:31;:::i;:::-;37215:58;;;;:::i;:::-;:75;;;;:::i;:::-;37189:101;-1:-1:-1;37301:20:0;37324:35;37189:101;37324:15;:35;:::i;:::-;37301:58;;37372:31;37390:12;37372:17;:31::i;:::-;37416:27;37446:41;37470:17;37446:21;:41;:::i;:::-;37555:8;;37416:71;;-1:-1:-1;37498:19:0;;37555:8;;;;;;;37534:17;;37550:1;;37534:13;:17;:::i;:::-;37533:30;;;;:::i;:::-;37520:9;;:44;;;-1:-1:-1;;;37520:9:0;;;;:44;:::i;:::-;37627:13;;37498:66;;;;;-1:-1:-1;37575:26:0;;37684:1;;37498:66;;37605:35;;37627:13;37605:19;:35;:::i;:::-;37604:64;;;;:::i;:::-;:81;;;;:::i;:::-;37748:13;;37575:110;;-1:-1:-1;37696:26:0;;37778:11;;37726:35;;37748:13;;;;;37726:19;:35;:::i;:::-;37725:64;;;;:::i;:::-;37696:93;-1:-1:-1;37800:24:0;37863:39;37696:93;37863:18;:39;:::i;:::-;37827:76;;:19;:76;:::i;:::-;37938:14;;37930:57;;37800:103;;-1:-1:-1;;;;;;37938:14:0;;37800:103;;37930:57;;;;37800:103;37938:14;37930:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38020:15:0;;38012:87;;37916:71;;-1:-1:-1;;;;;;38020:15:0;;38063:21;;38012:87;;;;38063:21;38020:15;38012:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37998:101:0;;-1:-1:-1;;38116:19:0;;38112:253;;38152:50;38166:15;38183:18;38152:13;:50::i;:::-;38222:131;;;15275:25:1;;;15331:2;15316:18;;15309:34;;;15359:18;;;15352:34;;;38222:131:0;;15263:2:1;15248:18;38222:131:0;;;;;;;38112:253;36901:1471;;;;;;;;;;36866:1506::o;27102:2993::-;-1:-1:-1;;;;;27234:18:0;;27226:68;;;;-1:-1:-1;;;27226:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27313:16:0;;27305:64;;;;-1:-1:-1;;;27305:64:0;;;;;;;:::i;:::-;27386:6;27396:1;27386:11;27382:93;;27414:28;27430:4;27436:2;27440:1;27414:15;:28::i;27382:93::-;-1:-1:-1;;;;;27506:31:0;;;27487:16;27506:31;;;:25;:31;;;;;;;;;27566:29;;;;;;;;;27627:35;;;:29;:35;;;;;;27506:31;;;;;27566:29;;;;27627:35;27626:36;:87;;;;-1:-1:-1;;;;;;27680:33:0;;;;;;:29;:33;;;;;;;;27679:34;27626:87;27608:1335;;;27748:16;;-1:-1:-1;;;27748:16:0;;;;27740:59;;;;-1:-1:-1;;;27740:59:0;;16409:2:1;27740:59:0;;;16391:21:1;16448:2;16428:18;;;16421:30;16487:32;16467:18;;;16460:60;16537:18;;27740:59:0;16207:354:1;27740:59:0;-1:-1:-1;;;;;27836:31:0;;;;;;:25;:31;;;;;;;;:91;;;;-1:-1:-1;;;;;;27889:38:0;;;;;;:34;:38;;;;;;;;27888:39;27836:91;27814:1118;;;28002:11;;27992:6;:21;;27962:135;;;;-1:-1:-1;;;27962:135:0;;16768:2:1;27962:135:0;;;16750:21:1;16807:2;16787:18;;;16780:30;16846:34;16826:18;;;16819:62;-1:-1:-1;;;16897:18:1;;;16890:38;16945:19;;27962:135:0;16566:404:1;27962:135:0;28172:15;;28155:13;28165:2;28155:9;:13::i;:::-;28146:22;;:6;:22;:::i;:::-;:41;;28116:139;;;;-1:-1:-1;;;28116:139:0;;17177:2:1;28116:139:0;;;17159:21:1;17216:2;17196:18;;;17189:30;17255:26;17235:18;;;17228:54;17299:18;;28116:139:0;16975:348:1;28116:139:0;27814:1118;;;-1:-1:-1;;;;;28299:29:0;;;;;;:25;:29;;;;;;;;:91;;;;-1:-1:-1;;;;;;28350:40:0;;;;;;:34;:40;;;;;;;;28349:41;28299:91;28277:655;;;28465:11;;28455:6;:21;;28425:137;;;;-1:-1:-1;;;28425:137:0;;17530:2:1;28425:137:0;;;17512:21:1;17569:2;17549:18;;;17542:30;17608:34;17588:18;;;17581:62;-1:-1:-1;;;17659:18:1;;;17652:40;17709:19;;28425:137:0;17328:406:1;28277:655:0;-1:-1:-1;;;;;28589:38:0;;;;;;:34;:38;;;;;;;;28584:348;;28704:15;;28687:13;28697:2;28687:9;:13::i;:::-;28678:22;;:6;:22;:::i;:::-;:41;;28648:138;;;;-1:-1:-1;;;28648:138:0;;17941:2:1;28648:138:0;;;17923:21:1;17980:2;17960:18;;;17953:30;18019:25;17999:18;;;17992:53;18062:18;;28648:138:0;17739:347:1;28584:348:0;28813:9;;;;28812:10;:54;;;;-1:-1:-1;;;;;;28826:40:0;;;;;;:34;:40;;;;;;;;28812:54;28808:124;;;28901:15;28887:11;:29;28808:124;28953:47;28966:11;28979:10;28991:4;28997:2;28953:12;:47::i;:::-;29011:12;29054:23;;29026:24;29044:4;29026:9;:24::i;:::-;29108:16;;-1:-1:-1;;29026:51:0;;-1:-1:-1;;;;29108:16:0;;;;:40;;;;;29141:7;29108:40;:67;;;;-1:-1:-1;29166:9:0;;;;29165:10;29108:67;:97;;;;-1:-1:-1;29192:9:0;;-1:-1:-1;;;29192:9:0;;;;:13;;29108:97;:143;;;;-1:-1:-1;;;;;;29222:29:0;;;;;;:25;:29;;;;;;;;29108:143;:185;;;;-1:-1:-1;;;;;;29269:24:0;;;;;;:18;:24;;;;;;;;29268:25;29108:185;:225;;;;-1:-1:-1;;;;;;29311:22:0;;;;;;:18;:22;;;;;;;;29310:23;29108:225;29090:362;;;29360:9;:16;;-1:-1:-1;;29360:16:0;29372:4;29360:16;;;29391:17;:15;:17::i;:::-;29423:9;:17;;-1:-1:-1;;29423:17:0;;;29090:362;29480:9;;29464:12;;29480:9;;29479:10;:30;;;;-1:-1:-1;29493:16:0;;-1:-1:-1;;;29493:16:0;;;;29479:30;-1:-1:-1;;;;;29526:24:0;;;;;;:18;:24;;;;;;29464:45;;-1:-1:-1;29526:24:0;;;:50;;-1:-1:-1;;;;;;29554:22:0;;;;;;:18;:22;;;;;;;;29526:50;29522:98;;;-1:-1:-1;29603:5:0;29522:98;29634:7;:24;;;;-1:-1:-1;29645:9:0;;-1:-1:-1;;;29645:9:0;;;;:13;;29634:24;29630:414;;;29699:9;;29675:11;;29712:3;;29690:18;;-1:-1:-1;;;29699:9:0;;;;29690:6;:18;:::i;:::-;29689:26;;;;:::i;:::-;29761:8;;29675:40;;-1:-1:-1;29730:18:0;;29773:3;;29752:17;;29761:8;;;;;29752:6;:17;:::i;:::-;29751:25;;;;:::i;:::-;29730:46;-1:-1:-1;29800:12:0;29809:3;29800:6;:12;:::i;:::-;29791:21;;29827:41;29843:4;29857;29864:3;29827:15;:41::i;:::-;29889:14;;29885:148;;29924:38;29944:4;29951:10;29924:11;:38::i;:::-;29996:8;;29986:31;;;29996:8;;;;;;18261:36:1;;18328:2;18313:18;;18306:34;;;29986:31:0;;18234:18:1;29986:31:0;;;;;;;29885:148;29660:384;;29630:414;30054:33;30070:4;30076:2;30080:6;30054:15;:33::i;:::-;27215:2880;;;;27102:2993;;;:::o;3752:226::-;3872:7;3908:12;3900:6;;;;3892:29;;;;-1:-1:-1;;;3892:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3932:9:0;3944:5;3948:1;3944;:5;:::i;:::-;3932:17;3752:226;-1:-1:-1;;;;;3752:226:0:o;13619:451::-;-1:-1:-1;;;;;13703:21:0;;13695:67;;;;-1:-1:-1;;;13695:67:0;;18553:2:1;13695:67:0;;;18535:21:1;18592:2;18572:18;;;18565:30;18631:34;18611:18;;;18604:62;-1:-1:-1;;;18682:18:1;;;18675:31;18723:19;;13695:67:0;18351:397:1;13695:67:0;13854:105;13891:6;13854:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13854:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13833:18:0;;;;;;:9;:18;;;;;:126;13985:12;;:24;;14002:6;13985:16;:24::i;:::-;13970:12;:39;14025:37;;1972:25:1;;;14051:1:0;;-1:-1:-1;;;;;14025:37:0;;;;;1960:2:1;1945:18;14025:37:0;;;;;;;13619:451;;:::o;32006:1538::-;32244:22;;;;:45;;;;:22;;;;;:45;32240:329;;32311:187;;-1:-1:-1;;;18955:33:1;;19013:2;19004:12;32311:187:0;;;;;;;;32389:22;;;;32469:14;;32311:187;;32389:22;;;;;;;;32311:187;;;;-1:-1:-1;;;;;;;;;;;32311:187:0;;;32469:14;;;32311:187;:::i;:::-;;;;;;;;32513:22;;;:44;;-1:-1:-1;;32513:44:0;;;;;;;;;32240:329;32583:22;;;;:45;;;;:22;;;;;:45;32579:329;;32650:187;;-1:-1:-1;;;19443:33:1;;19501:2;19492:12;32650:187:0;;;;;;;;32728:22;;;;32808:14;;32650:187;;32728:22;;;;;;;;32650:187;;;;-1:-1:-1;;;;;;;;;;;32650:187:0;;;32808:14;;;32650:187;:::i;:::-;;;;;;;;32852:22;;;:44;;-1:-1:-1;;32852:44:0;;;;;;;;;32579:329;32922:20;;;;:41;;;;-1:-1:-1;;;32922:20:0;;;;:41;32918:315;;32985:181;;-1:-1:-1;;;19717:31:1;;19773:2;19764:12;32985:181:0;;;;;;;;33061:20;;;;33137:14;;32985:181;;33061:20;-1:-1:-1;;;33061:20:0;;;;;;32985:181;;;;-1:-1:-1;;;;;;;;;;;32985:181:0;;;33137:14;;;32985:181;:::i;:::-;;;;;;;;33181:20;;;:40;;-1:-1:-1;;33181:40:0;-1:-1:-1;;;33181:40:0;;;;;;;32918:315;33247:17;;;;:35;;;;-1:-1:-1;;;33247:17:0;;;;:35;33243:294;;33304:172;;-1:-1:-1;;;19989:28:1;;20042:2;20033:12;33304:172:0;;;;;;;;33377:17;;;;33447:14;;33304:172;;33377:17;-1:-1:-1;;;33377:17:0;;;;;;33304:172;;;;-1:-1:-1;;;;;;;;;;;33304:172:0;;;33447:14;;;33304:172;:::i;:::-;;;;;;;;33491:17;;;:34;;-1:-1:-1;;33491:34:0;-1:-1:-1;;;33491:34:0;;;;;;;33243:294;32006:1538;;;;;:::o;33552:1505::-;33785:21;;;;:43;;;;:21;;:43;33781:322;;33850:184;;-1:-1:-1;;;20258:32:1;;20315:2;20306:12;33850:184:0;;;;;;;;33927:21;;;;34005:14;;33850:184;;33927:21;;;;;33850:184;;;;-1:-1:-1;;;;;;;;;;;33850:184:0;;;34005:14;;;33850:184;:::i;:::-;;;;;;;;34049:21;;;:42;;-1:-1:-1;;34049:42:0;;;;;;;33781:322;34117:21;;;;:43;;;;:21;;;;;:43;34113:322;;34182:184;;-1:-1:-1;;;20531:32:1;;20588:2;20579:12;34182:184:0;;;;;;;;34259:21;;;;34337:14;;34182:184;;34259:21;;;;;;;;34182:184;;;;-1:-1:-1;;;;;;;;;;;34182:184:0;;;34337:14;;;34182:184;:::i;:::-;;;;;;;;34381:21;;;:42;;-1:-1:-1;;34381:42:0;;;;;;;;;34113:322;34449:19;;;;:39;;;;-1:-1:-1;;;34449:19:0;;;;:39;34445:308;;34510:178;;-1:-1:-1;;;20804:30:1;;20859:2;20850:12;34510:178:0;;;;;;;;34585:19;;;;34659:14;;34510:178;;34585:19;-1:-1:-1;;;34585:19:0;;;;;;34510:178;;;;-1:-1:-1;;;;;;;;;;;34510:178:0;;;34659:14;;;34510:178;:::i;:::-;;;;;;;;34703:19;;;:38;;-1:-1:-1;;34703:38:0;-1:-1:-1;;;34703:38:0;;;;;;;34445:308;34767:16;;;;:33;;;;-1:-1:-1;;;34767:16:0;;;;:33;34763:287;;34822:169;;-1:-1:-1;;;21075:27:1;;21127:2;21118:12;34822:169:0;;;;;;;;34894:16;;;;34962:14;;34822:169;;34894:16;-1:-1:-1;;;34894:16:0;;;;;;34822:169;;;;-1:-1:-1;;;;;;;;;;;34822:169:0;;;34962:14;;;34822:169;:::i;:::-;;;;;;;;35006:16;;;:32;;;;;-1:-1:-1;;;35006:32:0;-1:-1:-1;;35006:32:0;;;;;;33552:1505;;;;;:::o;38897:500::-;38988:16;;;39002:1;38988:16;;;;;;;;38964:21;;38988:16;;;;;;;;;;-1:-1:-1;38988:16:0;38964:40;;39033:4;39015;39020:1;39015:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39015:23:0;;;:7;;;;;;;;;;:23;;;;39059:15;;:22;;;-1:-1:-1;;;39059:22:0;;;;:15;;;;;:20;;:22;;;;;39015:7;;39059:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39049:4;39054:1;39049:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39049:32:0;;;:7;;;;;;;;;:32;39124:15;;39092:62;;39109:4;;39124:15;39142:11;39092:8;:62::i;:::-;39165:15;;:224;;-1:-1:-1;;;39165:224:0;;-1:-1:-1;;;;;39165:15:0;;;;:66;;:224;;39246:11;;39165:15;;39316:4;;39343;;39363:15;;39165:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38953:444;38897:500;:::o;39537:423::-;39651:15;;39619:62;;39636:4;;-1:-1:-1;;;;;39651:15:0;39669:11;39619:8;:62::i;:::-;39692:15;;39896;;39692:260;;-1:-1:-1;;;39692:260:0;;39764:4;39692:260;;;22987:34:1;23037:18;;;23030:34;;;39692:15:0;23080:18:1;;;23073:34;;;23123:18;;;23116:34;-1:-1:-1;;;;;39896:15:0;;;23166:19:1;;;23159:44;39926:15:0;23219:19:1;;;23212:35;39692:15:0;;;:31;;39731:9;;22921:19:1;;39692:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12623:606::-;-1:-1:-1;;;;;12763:20:0;;12755:70;;;;-1:-1:-1;;;12755:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12844:23:0;;12836:71;;;;-1:-1:-1;;;12836:71:0;;;;;;;:::i;:::-;12996:108;13032:6;12996:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12996:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12976:17:0;;;;;;;:9;:17;;;;;;:128;;;;13138:20;;;;;;;:32;;13163:6;13138:24;:32::i;:::-;-1:-1:-1;;;;;13115:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13186:35;;;;;;;;;;13214:6;1972:25:1;;1960:2;1945:18;;1826:177;30103:1489:0;30248:13;:17;;-1:-1:-1;;30330:12:0;;;30355:436;;;;30403:23;;30387:13;:39;;30403:23;;;;-1:-1:-1;;30441:39:0;;;;;;;30403:23;30457;;;;;;30441:39;;;;;;;;-1:-1:-1;;30545:29:0;-1:-1:-1;;;30509:21:0;;;;30495:35;;;;-1:-1:-1;;30545:29:0;;-1:-1:-1;;;30556:18:0;;;;30545:29;;;;;;;;-1:-1:-1;;;;;30607:15:0;;-1:-1:-1;30607:15:0;;;:11;:15;;;;;;:20;:172;;-1:-1:-1;;;;;30764:15:0;;;;;;:11;:15;;;;;;30607:172;;;30647:22;30665:2;30647:9;:22::i;:::-;:27;:97;;-1:-1:-1;;;;;30729:15:0;;;;;;:11;:15;;;;;;30647:97;;;30694:15;30647:97;-1:-1:-1;;;;;30589:15:0;;;;;;:11;:15;;;;;:190;30355:436;30805:10;30801:234;;;30848:24;;30832:13;:40;;30848:24;;;;;;;;-1:-1:-1;;30887:40:0;;;;;;;30903:24;;;;;;30887:40;;;;;-1:-1:-1;;30993:30:0;-1:-1:-1;;;30956:22:0;;;;30942:36;;-1:-1:-1;;30993:30:0;;-1:-1:-1;;;31004:19:0;;;;;;;30993:30;;;;;;;30801:234;31050:10;31049:11;:27;;;;;31065:11;31064:12;31049:27;31045:251;;;31109:24;;31093:13;:40;;31109:24;;;;;;;;-1:-1:-1;;31148:40:0;;;;;;;31164:24;;;;;;31148:40;;;;;-1:-1:-1;;31254:30:0;-1:-1:-1;;;31217:22:0;;;;31203:36;;-1:-1:-1;;31254:30:0;;-1:-1:-1;;;31265:19:0;;;;;;;31254:30;;;;;;;31045:251;31306:34;31318:11;31331:4;31337:2;31306:11;:34::i;:::-;31409:8;;;;;;;;;31395:11;;;;;;31363:29;;31409:8;31379:13;;;;;31363;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;31351:9;:66;;;;;;-1:-1:-1;;;31351:66:0;;;-1:-1:-1;;31351:66:0;;;;;;;;31433:151;;;31459:13;;;;;;;;;;23808:36:1;;31351:66:0;31487:13;;;;23875:2:1;23860:18;;23853:45;31515:11:0;;;;;23914:18:1;;;23907:45;31541:8:0;;;;;23983:2:1;23968:18;;23961:45;31564:9:0;;;;;24037:3:1;24022:19;;24015:46;31433:151:0;;;;;;;23795:3:1;31433:151:0;;;30103:1489;;;;:::o;3608:136::-;3666:7;3693:43;3697:1;3700;3693:43;;;;;;;;;;;;;;;;;:3;:43::i;31600:398::-;-1:-1:-1;;;;;31702:16:0;;;;;;:54;;-1:-1:-1;;;;;;31735:21:0;;31749:6;31735:21;;31702:54;:96;;;;-1:-1:-1;;;;;;31774:24:0;;;;;;:18;:24;;;;;;;;31773:25;31702:96;:136;;;;-1:-1:-1;;;;;;31816:22:0;;;;;;:18;:22;;;;;;;;31815:23;31702:136;31684:307;;;31870:11;31869:12;:26;;;;-1:-1:-1;31886:9:0;;;;31885:10;31869:26;31865:115;;;31953:11;;-1:-1:-1;;;;;31933:17:0;;;;;;:11;:17;;;;;;:31;;31953:11;31933:31;:::i;:::-;31916:14;:48;31600:398;;;:::o;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;1215:383::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;1416:9;1403:23;1435:31;1460:5;1435:31;:::i;:::-;1485:5;1537:2;1522:18;;1509:32;;-1:-1:-1;1588:2:1;1573:18;;;1560:32;;1215:383;-1:-1:-1;;;1215:383:1:o;2008:247::-;2067:6;2120:2;2108:9;2099:7;2095:23;2091:32;2088:52;;;2136:1;2133;2126:12;2088:52;2175:9;2162:23;2194:31;2219:5;2194:31;:::i;2260:180::-;2319:6;2372:2;2360:9;2351:7;2347:23;2343:32;2340:52;;;2388:1;2385;2378:12;2340:52;-1:-1:-1;2411:23:1;;2260:180;-1:-1:-1;2260:180:1:o;2445:456::-;2522:6;2530;2538;2591:2;2579:9;2570:7;2566:23;2562:32;2559:52;;;2607:1;2604;2597:12;2559:52;2646:9;2633:23;2665:31;2690:5;2665:31;:::i;:::-;2715:5;-1:-1:-1;2772:2:1;2757:18;;2744:32;2785:33;2744:32;2785:33;:::i;:::-;2445:456;;2837:7;;-1:-1:-1;;;2891:2:1;2876:18;;;;2863:32;;2445:456::o;3303:156::-;3369:20;;3429:4;3418:16;;3408:27;;3398:55;;3449:1;3446;3439:12;3398:55;3303:156;;;:::o;3464:393::-;3542:6;3550;3558;3566;3619:3;3607:9;3598:7;3594:23;3590:33;3587:53;;;3636:1;3633;3626:12;3587:53;3659:27;3676:9;3659:27;:::i;:::-;3649:37;;3705:36;3737:2;3726:9;3722:18;3705:36;:::i;:::-;3695:46;;3760:36;3792:2;3781:9;3777:18;3760:36;:::i;:::-;3750:46;;3815:36;3847:2;3836:9;3832:18;3815:36;:::i;:::-;3805:46;;3464:393;;;;;;;:::o;3862:416::-;3927:6;3935;3988:2;3976:9;3967:7;3963:23;3959:32;3956:52;;;4004:1;4001;3994:12;3956:52;4043:9;4030:23;4062:31;4087:5;4062:31;:::i;:::-;4112:5;-1:-1:-1;4169:2:1;4154:18;;4141:32;4211:15;;4204:23;4192:36;;4182:64;;4242:1;4239;4232:12;4182:64;4265:7;4255:17;;;3862:416;;;;;:::o;4283:529::-;4360:6;4368;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:1;4595:18;;4582:32;4623:33;4582:32;4623:33;:::i;:::-;4675:7;-1:-1:-1;4734:2:1;4719:18;;4706:32;4747:33;4706:32;4747:33;:::i;:::-;4799:7;4789:17;;;4283:529;;;;;:::o;5241:388::-;5309:6;5317;5370:2;5358:9;5349:7;5345:23;5341:32;5338:52;;;5386:1;5383;5376:12;5338:52;5425:9;5412:23;5444:31;5469:5;5444:31;:::i;:::-;5494:5;-1:-1:-1;5551:2:1;5536:18;;5523:32;5564:33;5523:32;5564:33;:::i;5634:380::-;5713:1;5709:12;;;;5756;;;5777:61;;5831:4;5823:6;5819:17;5809:27;;5777:61;5884:2;5876:6;5873:14;5853:18;5850:38;5847:161;;5930:10;5925:3;5921:20;5918:1;5911:31;5965:4;5962:1;5955:15;5993:4;5990:1;5983:15;5847:161;;5634:380;;;:::o;6438:356::-;6640:2;6622:21;;;6659:18;;;6652:30;6718:34;6713:2;6698:18;;6691:62;6785:2;6770:18;;6438:356::o;6799:127::-;6860:10;6855:3;6851:20;6848:1;6841:31;6891:4;6888:1;6881:15;6915:4;6912:1;6905:15;6931:168;7004:9;;;7035;;7052:15;;;7046:22;;7032:37;7022:71;;7073:18;;:::i;7104:127::-;7165:10;7160:3;7156:20;7153:1;7146:31;7196:4;7193:1;7186:15;7220:4;7217:1;7210:15;7236:120;7276:1;7302;7292:35;;7307:18;;:::i;:::-;-1:-1:-1;7341:9:1;;7236:120::o;8586:148::-;8674:4;8653:12;;;8667;;;8649:31;;8692:13;;8689:39;;;8708:18;;:::i;9361:406::-;9563:2;9545:21;;;9602:2;9582:18;;;9575:30;9641:34;9636:2;9621:18;;9614:62;-1:-1:-1;;;9707:2:1;9692:18;;9685:40;9757:3;9742:19;;9361:406::o;13110:125::-;13175:9;;;13196:10;;;13193:36;;;13209:18;;:::i;14404:128::-;14471:9;;;14492:11;;;14489:37;;;14506:18;;:::i;14537:165::-;14575:1;14609:4;14606:1;14602:12;14633:3;14623:37;;14640:18;;:::i;:::-;14692:3;14685:4;14682:1;14678:12;14674:22;14669:27;;;14537:165;;;;:::o;14707:151::-;14797:4;14790:12;;;14776;;;14772:31;;14815:14;;14812:40;;;14832:18;;:::i;15397:401::-;15599:2;15581:21;;;15638:2;15618:18;;;15611:30;15677:34;15672:2;15657:18;;15650:62;-1:-1:-1;;;15743:2:1;15728:18;;15721:35;15788:3;15773:19;;15397:401::o;15803:399::-;16005:2;15987:21;;;16044:2;16024:18;;;16017:30;16083:34;16078:2;16063:18;;16056:62;-1:-1:-1;;;16149:2:1;16134:18;;16127:33;16192:3;16177:19;;15803:399::o;19027:209::-;-1:-1:-1;;19191:38:1;;;;19173:57;;19161:2;19146:18;;19027:209::o;21273:127::-;21334:10;21329:3;21325:20;21322:1;21315:31;21365:4;21362:1;21355:15;21389:4;21386:1;21379:15;21405:251;21475:6;21528:2;21516:9;21507:7;21503:23;21499:32;21496:52;;;21544:1;21541;21534:12;21496:52;21576:9;21570:16;21595:31;21620:5;21595:31;:::i;21661:980::-;21923:4;21971:3;21960:9;21956:19;22002:6;21991:9;21984:25;22028:2;22066:6;22061:2;22050:9;22046:18;22039:34;22109:3;22104:2;22093:9;22089:18;22082:31;22133:6;22168;22162:13;22199:6;22191;22184:22;22237:3;22226:9;22222:19;22215:26;;22276:2;22268:6;22264:15;22250:29;;22297:1;22307:195;22321:6;22318:1;22315:13;22307:195;;;22386:13;;-1:-1:-1;;;;;22382:39:1;22370:52;;22477:15;;;;22442:12;;;;22418:1;22336:9;22307:195;;;-1:-1:-1;;;;;;;22558:32:1;;;;22553:2;22538:18;;22531:60;-1:-1:-1;;;22622:3:1;22607:19;22600:35;22519:3;21661:980;-1:-1:-1;;;21661:980:1:o;23258:306::-;23346:6;23354;23362;23415:2;23403:9;23394:7;23390:23;23386:32;23383:52;;;23431:1;23428;23421:12;23383:52;23460:9;23454:16;23444:26;;23510:2;23499:9;23495:18;23489:25;23479:35;;23554:2;23543:9;23539:18;23533:25;23523:35;;23258:306;;;;;:::o

Swarm Source

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