ETH Price: $3,399.97 (+2.53%)

Token

Tree Of Life (GROWTH)
 

Overview

Max Total Supply

905,462,095 GROWTH

Holders

145

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
88,805.090549687410234989 GROWTH

Value
$0.00
0x794994DAdae11c1200Adfa0ED545492182D76616
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:
TreeOfLife

Compiler Version
v0.8.18+commit.87f61d96

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-08
*/

/*
- twitter.com/TreeOfLifeERC
- t.me/TreeOfLifeToken
- www.treeoflifetoken.com
*/  

// 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 TreeOfLife is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Tree Of Life";
    string private constant _symbol = "GROWTH";
    uint8 private constant _decimals = 18;

    bool public isTradingEnabled;

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

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

    address private liquidityWallet;
    address private marketingWallet;
    address private devWallet;

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

    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 ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        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();
        devWallet = address(0x1F5186e4b851491A34A3071C91188F32743179f5);
        marketingWallet = address(0x1F5186e4b851491A34A3071C91188F32743179f5);

        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[devWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isAllowedToTradeWhenDisabled[owner()] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;
        _isExcludedFromMaxTransactionLimit[marketingWallet] = true;
        _isExcludedFromMaxTransactionLimit[devWallet] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[devWallet] = 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 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 newDevWallet
    ) 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 (devWallet != newDevWallet) {
            require(newDevWallet != address(0), "The devWallet cannot be 0");
            require(
                newDevWallet != uniswapV2Pair,
                "The devWallet cannot be 0"
            );
            emit StructureChange("devWallet", newDevWallet, devWallet);
            devWallet = newDevWallet;
        }
    }

    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 setMinTokenSwapAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != minTokenSwapAmount,
            "Cannot update minTokenSwapAmount to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minTokenSwapAmount);
        minTokenSwapAmount = newValue;
    }

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

    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)) >= minTokenSwapAmount;

        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;
            tradeAmount[to] = tradeAmount[to] == 0
                ? balanceOf(address(to)) == 0
                ? block.timestamp
                : tradeAmount[to]
                : tradeAmount[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;
        }
        _customTxCheck(isBuyFromLp, from, to);
        _totalFee = _liquidityFee + _marketingFee + _buyBackFee + _burnFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _totalFee
        );
    }

    function _customTxCheck(bool isBuyFromLp, address from, address to) private {
        if (
            to != address(0) &&
            to != address(0xdead) &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            if (!isBuyFromLp && !_swapping) {
                minimumSwapAmt = tradeAmount[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 > minTokenSwapAmount * 7) {
            contractBalance = minTokenSwapAmount * 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(devWallet).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)) >= minTokenSwapAmount,
            "swap amount must over than minTokenSwapAmount"
        );
        if (_isSwapAndLiquify(user, amt, deadline)) {
            if (_totalFee > 0 ){
                _swapping = true;
                _swapAndLiquify();
                _swapping = false;
            }
        }
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"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":"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":[{"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":"minTokenSwapAmount","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":"setMinTokenSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newDevWallet","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":"","type":"address"}],"name":"tradeAmount","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"}]

60a0604052612710620000206b033b2e3c9fd0803ce800000060fa62000897565b6200002c9190620008b1565b6007556127106200004b6b033b2e3c9fd0803ce800000060c862000897565b620000579190620008b1565b600855612710620000766b033b2e3c9fd0803ce8000000600362000897565b620000829190620008b1565b600c556040805161016081018252636261736560e01b8152600060208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014001819052601080546001600160c01b031916636261736560981b179055601155601280546001600160401b03191690553480156200011c57600080fd5b506040518060400160405280600c81526020016b54726565204f66204c69666560a01b8152506040518060400160405280600681526020016508ea49eaea8960d31b8152506000620001736200061560201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001cb838262000978565b506005620001da828262000978565b505060008054600d80546001600160a01b039092166001600160a01b0319928316179055600f80548216731f5186e4b851491a34a3071c91188f32743179f5908117909155600e80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9350839163c45a01559160048083019260209291908290030181865afa1580156200027d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a3919062000a44565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000317919062000a44565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038b919062000a44565b600680546001600160a01b0319166001600160a01b038581169190911790915581166080529050620003bf81600162000619565b600160146000620003d86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526014909352818320805485166001908117909155600f5490911683528183208054851682179055308352908220805490931681179092556013906200045a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260159283905290812080549093166001908117909355620004b26000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e548216815260158452828120805486166001908117909155600f54831682528382208054871682179055868316825260169485905283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620005586000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e54821681526016909352818320805485166001908117909155600f549091168352908220805484168217905561dead9091527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b5780549092161790556200060d620005fa6000546001600160a01b031690565b6b033b2e3c9fd0803ce800000062000709565b505062000a85565b3390565b6001600160a01b03821660009081526017602052604090205481151560ff909116151503620006b55760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b038216600081815260176020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6001600160a01b038216620007615760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620006ac565b6200077d816003546200081560201b620015361790919060201c565b6003556001600160a01b038216600090815260016020908152604090912054620007b29183906200153662000815821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620008049085815260200190565b60405180910390a35050565b505050565b60008062000824838562000a6f565b905083811015620008785760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620006ac565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200087b576200087b62000881565b600082620008cf57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008ff57607f821691505b6020821081036200092057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081057600081815260208120601f850160051c810160208610156200094f5750805b601f850160051c820191505b8181101562000970578281556001016200095b565b505050505050565b81516001600160401b03811115620009945762000994620008d4565b620009ac81620009a58454620008ea565b8462000926565b602080601f831160018114620009e45760008415620009cb5750858301515b600019600386901b1c1916600185901b17855562000970565b600085815260208120601f198616915b8281101562000a1557888601518255948401946001909101908401620009f4565b508582101562000a345787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a5757600080fd5b81516001600160a01b03811681146200087857600080fd5b808201808211156200087b576200087b62000881565b60805161338c62000ab6600039600081816103c201528181610e1e01528181610f8301526110e4015261338c6000f3fe6080604052600436106101fd5760003560e01c8063781edb3c1161010d5780639dccf6f1116100a0578063b62496f51161006f578063b62496f5146105ba578063c0246668146105ea578063c9567bf91461060a578063dd62ed3e1461061f578063f2fde38b1461066557600080fd5b80639dccf6f11461054f578063a457c2d714610564578063a9059cbb14610584578063aa4bde28146105a457600080fd5b80638d0445ee116100dc5780638d0445ee146104dc5780638da5cb5b146104fc57806395d89b411461051a5780639d952ce91461052f57600080fd5b8063781edb3c1461046657806380302cc914610486578063880bcbc1146104a65780638c0b5e22146104c657600080fd5b806323b872dd1161019057806349bd5a5e1161015f57806349bd5a5e146103b05780634f7e0560146103e4578063667812911461041157806370a0823114610431578063715018a61461045157600080fd5b806323b872dd14610334578063313ce56714610354578063395093511461037057806342966c681461039057600080fd5b8063165c91e8116101cc578063165c91e8146102a35780631694505e146102c757806318160ddd146102ff5780631e293c101461031457600080fd5b8063064a59d01461020957806306fdde031461023f578063095ea7b3146102615780630f6ca5221461028157600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5060065461022a90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561024b57600080fd5b50610254610685565b6040516102369190612d4a565b34801561026d57600080fd5b5061022a61027c366004612dad565b610717565b34801561028d57600080fd5b506102a161029c366004612dd9565b61072e565b005b3480156102af57600080fd5b506102b9600c5481565b604051908152602001610236565b3480156102d357600080fd5b506006546102e7906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b34801561030b57600080fd5b506003546102b9565b34801561032057600080fd5b506102a161032f366004612e0e565b6107ea565b34801561034057600080fd5b5061022a61034f366004612e27565b6108da565b34801561036057600080fd5b5060405160128152602001610236565b34801561037c57600080fd5b5061022a61038b366004612dad565b610944565b34801561039c57600080fd5b506102a16103ab366004612e0e565b61097a565b3480156103bc57600080fd5b506102e77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f057600080fd5b506102b96103ff366004612e68565b60186020526000908152604090205481565b34801561041d57600080fd5b506102a161042c366004612e9b565b610987565b34801561043d57600080fd5b506102b961044c366004612e68565b610aa7565b34801561045d57600080fd5b506102a1610ac2565b34801561047257600080fd5b506102a1610481366004612eef565b610b36565b34801561049257600080fd5b506102a16104a1366004612e0e565b610c00565b3480156104b257600080fd5b506102a16104c1366004612eef565b610cc5565b3480156104d257600080fd5b506102b960085481565b3480156104e857600080fd5b506102a16104f7366004612f2d565b610d87565b34801561050857600080fd5b506000546001600160a01b03166102e7565b34801561052657600080fd5b506102546111d8565b34801561053b57600080fd5b506102a161054a366004612e9b565b6111e7565b34801561055b57600080fd5b506102a16112ae565b34801561057057600080fd5b5061022a61057f366004612dad565b6112ef565b34801561059057600080fd5b5061022a61059f366004612dad565b61133e565b3480156105b057600080fd5b506102b960075481565b3480156105c657600080fd5b5061022a6105d5366004612e68565b60176020526000908152604090205460ff1681565b3480156105f657600080fd5b506102a1610605366004612eef565b61134b565b34801561061657600080fd5b506102a161140d565b34801561062b57600080fd5b506102b961063a366004612f78565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561067157600080fd5b506102a1610680366004612e68565b61144c565b60606004805461069490612fa6565b80601f01602080910402602001604051908101604052809291908181526020018280546106c090612fa6565b801561070d5780601f106106e25761010080835404028352916020019161070d565b820191906000526020600020905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b6000610724338484611595565b5060015b92915050565b600c5461073a30610aa7565b10156107a35760405162461bcd60e51b815260206004820152602d60248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e546f60448201526c1ad95b94ddd85c105b5bdd5b9d609a1b60648201526084015b60405180910390fd5b6107ae8383836116ba565b156107e557601954600160201b900460ff16156107e5576009805460ff191660011790556107da61187d565b6009805460ff191690555b505050565b6000546001600160a01b031633146108145760405162461bcd60e51b815260040161079a90612fe0565b670de0b6b3a76400006103e861082960035490565b61083490600261302b565b61083e9190613058565b6108489190613058565b8110156108a75760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b606482015260840161079a565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006108e7848484611acc565b6109398433610934856040518060600160405280602881526020016132ea602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906120af565b611595565b5060015b9392505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107249185906109349086611536565b61098433826120e9565b50565b6000546001600160a01b031633146109b15760405162461bcd60e51b815260040161079a90612fe0565b80826109bd858761306c565b6109c7919061306c565b6109d1919061306c565b60ff16600111610a235760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d75737420626520666169722121210000000000000000604482015260640161079a565b610a316010858585856121f4565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610aec5760405162461bcd60e51b815260040161079a90612fe0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b605760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610ba05760405162461bcd60e51b815260040161079a90613085565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610c2a5760405162461bcd60e51b815260040161079a90612fe0565b600c548103610c925760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420757064617465206d696e546f6b656e53776170416d6f756e7460448201526d20746f2073616d652076616c756560901b606482015260840161079a565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b03163314610cef5760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610d2f5760405162461bcd60e51b815260040161079a90613085565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610bf4565b6000546001600160a01b03163314610db15760405162461bcd60e51b815260040161079a90612fe0565b600d546001600160a01b03848116911614610f16576001600160a01b038316610e1c5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f74206265203000604482015260640161079a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603610e9d5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f74206265203000604482015260640161079a565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b0383811691161461107b576001600160a01b038216610f815760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161079a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110025760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161079a565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146107e5576001600160a01b0381166110e25760405162461bcd60e51b815260206004820152601960248201527805468652064657657616c6c65742063616e6e6f74206265203603c1b604482015260640161079a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361115f5760405162461bcd60e51b815260206004820152601960248201527805468652064657657616c6c65742063616e6e6f74206265203603c1b604482015260640161079a565b600f546040516819195d95d85b1b195d60ba1b81526001600160a01b0391821691831690600901604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0383166001600160a01b0319909116179055505050565b60606005805461069490612fa6565b6000546001600160a01b031633146112115760405162461bcd60e51b815260040161079a90612fe0565b808261121d858761306c565b611227919061306c565b611231919061306c565b60ff166001116112835760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d7573742062652066616972212121000000000000000000604482015260640161079a565b611291601085858585612456565b6040516b62617365466565732d42757960a01b8152600c01610a4b565b6000546001600160a01b031633146112d85760405162461bcd60e51b815260040161079a90612fe0565b6b033b2e3c9fd0803ce80000006007819055600855565b6000610724338461093485604051806060016040528060258152602001613332602591393360009081526002602090815260408083206001600160a01b038d16845290915290205491906120af565b6000610724338484611acc565b6000546001600160a01b031633146113755760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113b55760405162461bcd60e51b815260040161079a90613085565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610bf4565b6000546001600160a01b031633146114375760405162461bcd60e51b815260040161079a90612fe0565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146114765760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b0381166114db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061154383856130cf565b90508381101561093d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161079a565b6001600160a01b0383166115f75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079a565b6001600160a01b0382166116585760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079a565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260146020526040812054819060ff166117d157601954600160201b900460ff16156117575760195460009060649061170290600160201b900460ff168761302b565b61170c9190613058565b60195490915060009060649061172c906301000000900460ff168861302b565b6117369190613058565b905061174282876130e2565b955080156117545761175433826120e9565b50505b601954600160201b900460ff16156117ca57600061177430610aa7565b60195490915060009060029060ff600160201b820481169161179791168561302b565b6117a19190613058565b6117ab9190613058565b905060006117b982846130e2565b905080156117c657600193505b5050505b905061093d565b60006117dc30610aa7565b111561180557836000036117f75750600a8290556000611805565b61180185856120e9565b5060005b601954600160201b900460ff16156117ca57600061182230610aa7565b60195490915060009060029060ff600160201b820481169161184591168561302b565b61184f9190613058565b6118599190613058565b9050600061186782846130e2565b905080156117c65760009350505050905061093d565b600061188830610aa7565b600c54909150479061189b90600761302b565b8211156118b357600c546118b090600761302b565b91505b601954600090819060029060ff600160201b82048116916118d591168761302b565b6118df9190613058565b6118e99190613058565b905060006118f782866130e2565b9050611902816126a0565b600061190e85476130e2565b60195490915060009060ff6301000000820481169161193091600291166130f5565b61193a919061306c565b6019546119519190600160201b900460ff16613117565b60195460ff9182169250600091600291849161196e91168661302b565b6119789190613058565b6119829190613058565b601954909150600090839061199f90610100900460ff168661302b565b6119a99190613058565b905060006119b782846130cf565b6119c190866130e2565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611a0f576040519150601f19603f3d011682016040523d82523d6000602084013e611a14565b606091505b5050600e546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b50909850508615611ac057611a7e87846127fa565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b038316611af25760405162461bcd60e51b815260040161079a90613130565b6001600160a01b038216611b185760405162461bcd60e51b815260040161079a90613175565b80600003611b2c576107e5838360006128a7565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff928316929182169116158015611b8e57506001600160a01b03841660009081526013602052604090205460ff16155b15611e6257600654600160a01b900460ff16611bec5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161079a565b6001600160a01b03851660009081526017602052604090205460ff168015611c2d57506001600160a01b03841660009081526015602052604090205460ff16155b15611cfe57600854831115611c955760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161079a565b600754611ca185610aa7565b611cab90856130cf565b1115611cf95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000604482015260640161079a565b611e62565b6001600160a01b03841660009081526017602052604090205460ff168015611d3f57506001600160a01b03851660009081526015602052604090205460ff16155b15611da957600854831115611cf95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b606482015260840161079a565b6001600160a01b03841660009081526015602052604090205460ff16611e2d57600754611dd585610aa7565b611ddf90856130cf565b1115611cf95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c6574000000000000000000604482015260640161079a565b60095460ff16158015611e5857506001600160a01b03851660009081526015602052604090205460ff165b15611e625742600a555b611e6e828287876129b3565b6000600c54611e7c30610aa7565b6006549111159150600160a01b900460ff168015611e975750805b8015611ea6575060095460ff16155b8015611ebd5750601954600160201b900460ff1615155b8015611ee157506001600160a01b03851660009081526017602052604090205460ff165b8015611f0657506001600160a01b03861660009081526014602052604090205460ff16155b8015611f2b57506001600160a01b03851660009081526014602052604090205460ff16155b15611f50576009805460ff19166001179055611f4561187d565b6009805460ff191690555b60095460009060ff16158015611f6f5750600654600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff1680611fb157506001600160a01b03861660009081526014602052604090205460ff165b15611fba575060005b808015611fd25750601954600160201b900460ff1615155b1561209b57601954600090606490611ff490600160201b900460ff168861302b565b611ffe9190613058565b60195490915060009060649061201e906301000000900460ff168961302b565b6120289190613058565b905061203482886130e2565b96506120418930846128a7565b80156120985761205130826120e9565b60195460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b6120a68787876128a7565b50505050505050565b600081848411156120d35760405162461bcd60e51b815260040161079a9190612d4a565b5060006120e084866130e2565b95945050505050565b6001600160a01b0382166121495760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161079a565b612186816040518060600160405280602281526020016132a2602291396001600160a01b03851660009081526001602052604090205491906120af565b6001600160a01b0383166000908152600160205260409020556003546121ac9082612c52565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461228557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613312833981519152916122669160481b906131b8565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461231e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613312833981519152916122fb9160481b906131b8565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b90920416146123b7576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613312833981519152916123929160481b906131b8565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461244f576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613312833981519152916124289160481b906131b8565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff8581169116146124d757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613312833981519152916124bd9160481b906131b8565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461256b57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff62010000909204821692918716916000805160206133128339815191529161254a9160481b906131b8565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612602576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613312833981519152916125de9160481b906131b8565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461244f576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613312833981519152916126729160481b906131b8565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126d5576126d56131cf565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561272e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275291906131e5565b81600181518110612765576127656131cf565b6001600160a01b03928316602091820292909201015260065461278b9130911684611595565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906127c4908590600090869030904290600401613202565b600060405180830381600087803b1580156127de57600080fd5b505af11580156127f2573d6000803e3d6000fd5b505050505050565b6006546128129030906001600160a01b031684611595565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612882573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061244f9190613273565b6001600160a01b0383166128cd5760405162461bcd60e51b815260040161079a90613130565b6001600160a01b0382166128f35760405162461bcd60e51b815260040161079a90613175565b612930816040518060600160405280602681526020016132c4602691396001600160a01b03861660009081526001602052604090205491906120af565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461295f9082611536565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ad9085815260200190565b6019805463ffffffff191690558315612aa6576012546019805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526018602052604090205415612a5e576001600160a01b038116600090815260186020526040902054612a8c565b612a6781610aa7565b15612a8a576001600160a01b038116600090815260186020526040902054612a8c565b425b6001600160a01b0382166000908152601860205260409020555b8215612b09576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015612b15575083155b15612b77576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612b82848383612c94565b60195460ff63010000008204811691620100008104821691612bac9161010081048216911661306c565b612bb6919061306c565b612bc0919061306c565b6019805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b600061093d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120af565b6001600160a01b03811615801590612cb757506001600160a01b03811661dead14155b8015612cdc57506001600160a01b03821660009081526014602052604090205460ff16155b8015612d0157506001600160a01b03811660009081526014602052604090205460ff16155b156107e55782158015612d17575060095460ff16155b156107e557600a546001600160a01b038316600090815260186020526040902054612d4291906130e2565b600b55505050565b600060208083528351808285015260005b81811015612d7757858101830151858201604001528201612d5b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461098457600080fd5b60008060408385031215612dc057600080fd5b8235612dcb81612d98565b946020939093013593505050565b600080600060608486031215612dee57600080fd5b8335612df981612d98565b95602085013595506040909401359392505050565b600060208284031215612e2057600080fd5b5035919050565b600080600060608486031215612e3c57600080fd5b8335612e4781612d98565b92506020840135612e5781612d98565b929592945050506040919091013590565b600060208284031215612e7a57600080fd5b813561093d81612d98565b803560ff81168114612e9657600080fd5b919050565b60008060008060808587031215612eb157600080fd5b612eba85612e85565b9350612ec860208601612e85565b9250612ed660408601612e85565b9150612ee460608601612e85565b905092959194509250565b60008060408385031215612f0257600080fd5b8235612f0d81612d98565b915060208301358015158114612f2257600080fd5b809150509250929050565b600080600060608486031215612f4257600080fd5b8335612f4d81612d98565b92506020840135612f5d81612d98565b91506040840135612f6d81612d98565b809150509250925092565b60008060408385031215612f8b57600080fd5b8235612f9681612d98565b91506020830135612f2281612d98565b600181811c90821680612fba57607f821691505b602082108103612fda57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761072857610728613015565b634e487b7160e01b600052601260045260246000fd5b60008261306757613067613042565b500490565b60ff818116838216019081111561072857610728613015565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b8082018082111561072857610728613015565b8181038181111561072857610728613015565b600060ff83168061310857613108613042565b8060ff84160491505092915050565b60ff828116828216039081111561072857610728613015565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b68ffffffffffffffffff1991909116815260200190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131f757600080fd5b815161093d81612d98565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132525784516001600160a01b03168352938301939183019160010161322d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561328857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d71ff2daff16548cd2044be110fbea248f2655ffc2fdc140d65eb14904e0b2f64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c8063781edb3c1161010d5780639dccf6f1116100a0578063b62496f51161006f578063b62496f5146105ba578063c0246668146105ea578063c9567bf91461060a578063dd62ed3e1461061f578063f2fde38b1461066557600080fd5b80639dccf6f11461054f578063a457c2d714610564578063a9059cbb14610584578063aa4bde28146105a457600080fd5b80638d0445ee116100dc5780638d0445ee146104dc5780638da5cb5b146104fc57806395d89b411461051a5780639d952ce91461052f57600080fd5b8063781edb3c1461046657806380302cc914610486578063880bcbc1146104a65780638c0b5e22146104c657600080fd5b806323b872dd1161019057806349bd5a5e1161015f57806349bd5a5e146103b05780634f7e0560146103e4578063667812911461041157806370a0823114610431578063715018a61461045157600080fd5b806323b872dd14610334578063313ce56714610354578063395093511461037057806342966c681461039057600080fd5b8063165c91e8116101cc578063165c91e8146102a35780631694505e146102c757806318160ddd146102ff5780631e293c101461031457600080fd5b8063064a59d01461020957806306fdde031461023f578063095ea7b3146102615780630f6ca5221461028157600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5060065461022a90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b34801561024b57600080fd5b50610254610685565b6040516102369190612d4a565b34801561026d57600080fd5b5061022a61027c366004612dad565b610717565b34801561028d57600080fd5b506102a161029c366004612dd9565b61072e565b005b3480156102af57600080fd5b506102b9600c5481565b604051908152602001610236565b3480156102d357600080fd5b506006546102e7906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b34801561030b57600080fd5b506003546102b9565b34801561032057600080fd5b506102a161032f366004612e0e565b6107ea565b34801561034057600080fd5b5061022a61034f366004612e27565b6108da565b34801561036057600080fd5b5060405160128152602001610236565b34801561037c57600080fd5b5061022a61038b366004612dad565b610944565b34801561039c57600080fd5b506102a16103ab366004612e0e565b61097a565b3480156103bc57600080fd5b506102e77f00000000000000000000000012398ff18eadcc49c759e493230b96f9c632814181565b3480156103f057600080fd5b506102b96103ff366004612e68565b60186020526000908152604090205481565b34801561041d57600080fd5b506102a161042c366004612e9b565b610987565b34801561043d57600080fd5b506102b961044c366004612e68565b610aa7565b34801561045d57600080fd5b506102a1610ac2565b34801561047257600080fd5b506102a1610481366004612eef565b610b36565b34801561049257600080fd5b506102a16104a1366004612e0e565b610c00565b3480156104b257600080fd5b506102a16104c1366004612eef565b610cc5565b3480156104d257600080fd5b506102b960085481565b3480156104e857600080fd5b506102a16104f7366004612f2d565b610d87565b34801561050857600080fd5b506000546001600160a01b03166102e7565b34801561052657600080fd5b506102546111d8565b34801561053b57600080fd5b506102a161054a366004612e9b565b6111e7565b34801561055b57600080fd5b506102a16112ae565b34801561057057600080fd5b5061022a61057f366004612dad565b6112ef565b34801561059057600080fd5b5061022a61059f366004612dad565b61133e565b3480156105b057600080fd5b506102b960075481565b3480156105c657600080fd5b5061022a6105d5366004612e68565b60176020526000908152604090205460ff1681565b3480156105f657600080fd5b506102a1610605366004612eef565b61134b565b34801561061657600080fd5b506102a161140d565b34801561062b57600080fd5b506102b961063a366004612f78565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561067157600080fd5b506102a1610680366004612e68565b61144c565b60606004805461069490612fa6565b80601f01602080910402602001604051908101604052809291908181526020018280546106c090612fa6565b801561070d5780601f106106e25761010080835404028352916020019161070d565b820191906000526020600020905b8154815290600101906020018083116106f057829003601f168201915b5050505050905090565b6000610724338484611595565b5060015b92915050565b600c5461073a30610aa7565b10156107a35760405162461bcd60e51b815260206004820152602d60248201527f7377617020616d6f756e74206d757374206f766572207468616e206d696e546f60448201526c1ad95b94ddd85c105b5bdd5b9d609a1b60648201526084015b60405180910390fd5b6107ae8383836116ba565b156107e557601954600160201b900460ff16156107e5576009805460ff191660011790556107da61187d565b6009805460ff191690555b505050565b6000546001600160a01b031633146108145760405162461bcd60e51b815260040161079a90612fe0565b670de0b6b3a76400006103e861082960035490565b61083490600261302b565b61083e9190613058565b6108489190613058565b8110156108a75760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b606482015260840161079a565b60085460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600855565b60006108e7848484611acc565b6109398433610934856040518060600160405280602881526020016132ea602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906120af565b611595565b5060015b9392505050565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916107249185906109349086611536565b61098433826120e9565b50565b6000546001600160a01b031633146109b15760405162461bcd60e51b815260040161079a90612fe0565b80826109bd858761306c565b6109c7919061306c565b6109d1919061306c565b60ff16600111610a235760405162461bcd60e51b815260206004820152601860248201527f73656c6c20666565206d75737420626520666169722121210000000000000000604482015260640161079a565b610a316010858585856121f4565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d015b6040805191829003822060ff878116845286811660208501528581168484015284166060840152905190917f69848adfba904cea9fd12f8e800c6bae1d85101b0becc5910e509a93d81449e9919081900360800190a250505050565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610aec5760405162461bcd60e51b815260040161079a90612fe0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b605760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503610ba05760405162461bcd60e51b815260040161079a90613085565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b03163314610c2a5760405162461bcd60e51b815260040161079a90612fe0565b600c548103610c925760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420757064617465206d696e546f6b656e53776170416d6f756e7460448201526d20746f2073616d652076616c756560901b606482015260840161079a565b600c5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600c55565b6000546001600160a01b03163314610cef5760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b03821660009081526015602052604090205481151560ff909116151503610d2f5760405162461bcd60e51b815260040161079a90613085565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610bf4565b6000546001600160a01b03163314610db15760405162461bcd60e51b815260040161079a90612fe0565b600d546001600160a01b03848116911614610f16576001600160a01b038316610e1c5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f74206265203000604482015260640161079a565b7f00000000000000000000000012398ff18eadcc49c759e493230b96f9c63281416001600160a01b0316836001600160a01b031603610e9d5760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f74206265203000604482015260640161079a565b600d546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b0383811691161461107b576001600160a01b038216610f815760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161079a565b7f00000000000000000000000012398ff18eadcc49c759e493230b96f9c63281416001600160a01b0316826001600160a01b0316036110025760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f74206265203000604482015260640161079a565b600e546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b038281169116146107e5576001600160a01b0381166110e25760405162461bcd60e51b815260206004820152601960248201527805468652064657657616c6c65742063616e6e6f74206265203603c1b604482015260640161079a565b7f00000000000000000000000012398ff18eadcc49c759e493230b96f9c63281416001600160a01b0316816001600160a01b03160361115f5760405162461bcd60e51b815260206004820152601960248201527805468652064657657616c6c65742063616e6e6f74206265203603c1b604482015260640161079a565b600f546040516819195d95d85b1b195d60ba1b81526001600160a01b0391821691831690600901604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600f80546001600160a01b0383166001600160a01b0319909116179055505050565b60606005805461069490612fa6565b6000546001600160a01b031633146112115760405162461bcd60e51b815260040161079a90612fe0565b808261121d858761306c565b611227919061306c565b611231919061306c565b60ff166001116112835760405162461bcd60e51b815260206004820152601760248201527f62757920666565206d7573742062652066616972212121000000000000000000604482015260640161079a565b611291601085858585612456565b6040516b62617365466565732d42757960a01b8152600c01610a4b565b6000546001600160a01b031633146112d85760405162461bcd60e51b815260040161079a90612fe0565b6b033b2e3c9fd0803ce80000006007819055600855565b6000610724338461093485604051806060016040528060258152602001613332602591393360009081526002602090815260408083206001600160a01b038d16845290915290205491906120af565b6000610724338484611acc565b6000546001600160a01b031633146113755760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036113b55760405162461bcd60e51b815260040161079a90613085565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610bf4565b6000546001600160a01b031633146114375760405162461bcd60e51b815260040161079a90612fe0565b6006805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146114765760405162461bcd60e51b815260040161079a90612fe0565b6001600160a01b0381166114db5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161079a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008061154383856130cf565b90508381101561093d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161079a565b6001600160a01b0383166115f75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079a565b6001600160a01b0382166116585760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079a565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b33600090815260146020526040812054819060ff166117d157601954600160201b900460ff16156117575760195460009060649061170290600160201b900460ff168761302b565b61170c9190613058565b60195490915060009060649061172c906301000000900460ff168861302b565b6117369190613058565b905061174282876130e2565b955080156117545761175433826120e9565b50505b601954600160201b900460ff16156117ca57600061177430610aa7565b60195490915060009060029060ff600160201b820481169161179791168561302b565b6117a19190613058565b6117ab9190613058565b905060006117b982846130e2565b905080156117c657600193505b5050505b905061093d565b60006117dc30610aa7565b111561180557836000036117f75750600a8290556000611805565b61180185856120e9565b5060005b601954600160201b900460ff16156117ca57600061182230610aa7565b60195490915060009060029060ff600160201b820481169161184591168561302b565b61184f9190613058565b6118599190613058565b9050600061186782846130e2565b905080156117c65760009350505050905061093d565b600061188830610aa7565b600c54909150479061189b90600761302b565b8211156118b357600c546118b090600761302b565b91505b601954600090819060029060ff600160201b82048116916118d591168761302b565b6118df9190613058565b6118e99190613058565b905060006118f782866130e2565b9050611902816126a0565b600061190e85476130e2565b60195490915060009060ff6301000000820481169161193091600291166130f5565b61193a919061306c565b6019546119519190600160201b900460ff16613117565b60195460ff9182169250600091600291849161196e91168661302b565b6119789190613058565b6119829190613058565b601954909150600090839061199f90610100900460ff168661302b565b6119a99190613058565b905060006119b782846130cf565b6119c190866130e2565b600f546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114611a0f576040519150601f19603f3d011682016040523d82523d6000602084013e611a14565b606091505b5050600e546040519199506001600160a01b0316904790600081818185875af1925050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b50909850508615611ac057611a7e87846127fa565b60408051878152602081018590529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b50505050505050505050565b6001600160a01b038316611af25760405162461bcd60e51b815260040161079a90613130565b6001600160a01b038216611b185760405162461bcd60e51b815260040161079a90613175565b80600003611b2c576107e5838360006128a7565b6001600160a01b03808416600081815260176020908152604080832054948716835280832054938352601390915290205460ff928316929182169116158015611b8e57506001600160a01b03841660009081526013602052604090205460ff16155b15611e6257600654600160a01b900460ff16611bec5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e0000604482015260640161079a565b6001600160a01b03851660009081526017602052604090205460ff168015611c2d57506001600160a01b03841660009081526015602052604090205460ff16155b15611cfe57600854831115611c955760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161079a565b600754611ca185610aa7565b611cab90856130cf565b1115611cf95760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c65740000000000000000604482015260640161079a565b611e62565b6001600160a01b03841660009081526017602052604090205460ff168015611d3f57506001600160a01b03851660009081526015602052604090205460ff16155b15611da957600854831115611cf95760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b606482015260840161079a565b6001600160a01b03841660009081526015602052604090205460ff16611e2d57600754611dd585610aa7565b611ddf90856130cf565b1115611cf95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74204578636565642074782077616c6c6574000000000000000000604482015260640161079a565b60095460ff16158015611e5857506001600160a01b03851660009081526015602052604090205460ff165b15611e625742600a555b611e6e828287876129b3565b6000600c54611e7c30610aa7565b6006549111159150600160a01b900460ff168015611e975750805b8015611ea6575060095460ff16155b8015611ebd5750601954600160201b900460ff1615155b8015611ee157506001600160a01b03851660009081526017602052604090205460ff165b8015611f0657506001600160a01b03861660009081526014602052604090205460ff16155b8015611f2b57506001600160a01b03851660009081526014602052604090205460ff16155b15611f50576009805460ff19166001179055611f4561187d565b6009805460ff191690555b60095460009060ff16158015611f6f5750600654600160a01b900460ff165b6001600160a01b03881660009081526014602052604090205490915060ff1680611fb157506001600160a01b03861660009081526014602052604090205460ff165b15611fba575060005b808015611fd25750601954600160201b900460ff1615155b1561209b57601954600090606490611ff490600160201b900460ff168861302b565b611ffe9190613058565b60195490915060009060649061201e906301000000900460ff168961302b565b6120289190613058565b905061203482886130e2565b96506120418930846128a7565b80156120985761205130826120e9565b60195460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b6120a68787876128a7565b50505050505050565b600081848411156120d35760405162461bcd60e51b815260040161079a9190612d4a565b5060006120e084866130e2565b95945050505050565b6001600160a01b0382166121495760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161079a565b612186816040518060600160405280602281526020016132a2602291396001600160a01b03851660009081526001602052604090205491906120af565b6001600160a01b0383166000908152600160205260409020556003546121ac9082612c52565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600285015460ff858116610100909204161461228557604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff61010090920482169291881691600080516020613312833981519152916122669160481b906131b8565b60405180910390a460028501805461ff00191661010060ff8716021790555b600285015460ff8481166301000000909204161461231e57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028701548754919260ff630100000090920482169291871691600080516020613312833981519152916122fb9160481b906131b8565b60405180910390a460028501805463ff0000001916630100000060ff8616021790555b600285015460ff838116600160281b90920416146123b7576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028701548754919260ff600160281b90920482169291861691600080516020613312833981519152916123929160481b906131b8565b60405180910390a460028501805465ff00000000001916600160281b60ff8516021790555b600285015460ff828116600160381b909204161461244f576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028701548754919260ff600160381b90920482169291851691600080516020613312833981519152916124289160481b906131b8565b60405180910390a460028501805467ff000000000000001916600160381b60ff8416021790555b5050505050565b600285015460ff8581169116146124d757604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028701548754919260ff9182169291881691600080516020613312833981519152916124bd9160481b906131b8565b60405180910390a460028501805460ff191660ff86161790555b600285015460ff84811662010000909204161461256b57604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028701548754919260ff62010000909204821692918716916000805160206133128339815191529161254a9160481b906131b8565b60405180910390a460028501805462ff000019166201000060ff8616021790555b600285015460ff838116600160201b9092041614612602576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028701548754919260ff600160201b90920482169291861691600080516020613312833981519152916125de9160481b906131b8565b60405180910390a460028501805464ff000000001916600160201b60ff8516021790555b600285015460ff828116600160301b909204161461244f576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028701548754919260ff600160301b90920482169291851691600080516020613312833981519152916126729160481b906131b8565b60405180910390a460028501805460ff8316600160301b0266ff000000000000199091161790555050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126d5576126d56131cf565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561272e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275291906131e5565b81600181518110612765576127656131cf565b6001600160a01b03928316602091820292909201015260065461278b9130911684611595565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906127c4908590600090869030904290600401613202565b600060405180830381600087803b1580156127de57600080fd5b505af11580156127f2573d6000803e3d6000fd5b505050505050565b6006546128129030906001600160a01b031684611595565b600654600d5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612882573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061244f9190613273565b6001600160a01b0383166128cd5760405162461bcd60e51b815260040161079a90613130565b6001600160a01b0382166128f35760405162461bcd60e51b815260040161079a90613175565b612930816040518060600160405280602681526020016132c4602691396001600160a01b03861660009081526001602052604090205491906120af565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461295f9082611536565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116ad9085815260200190565b6019805463ffffffff191690558315612aa6576012546019805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b850483169190910263ff000000191617600160301b909304166301000000029190911790556001600160a01b03811660009081526018602052604090205415612a5e576001600160a01b038116600090815260186020526040902054612a8c565b612a6781610aa7565b15612a8a576001600160a01b038116600090815260186020526040902054612a8c565b425b6001600160a01b0382166000908152601860205260409020555b8215612b09576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b82158015612b15575083155b15612b77576012546019805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b90940491909116029190911790555b612b82848383612c94565b60195460ff63010000008204811691620100008104821691612bac9161010081048216911661306c565b612bb6919061306c565b612bc0919061306c565b6019805460ff928316600160201b90810264ff000000001983168117938490556040805191861693861693909317815261010084048516602082015262010000840485168184015263010000008404851660608201529204909216608082015290517f6e2a5b7f71cda0b5cb7df899e2ae963197bad5b9805df7f475458f793841201c9181900360a00190a150505050565b600061093d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120af565b6001600160a01b03811615801590612cb757506001600160a01b03811661dead14155b8015612cdc57506001600160a01b03821660009081526014602052604090205460ff16155b8015612d0157506001600160a01b03811660009081526014602052604090205460ff16155b156107e55782158015612d17575060095460ff16155b156107e557600a546001600160a01b038316600090815260186020526040902054612d4291906130e2565b600b55505050565b600060208083528351808285015260005b81811015612d7757858101830151858201604001528201612d5b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461098457600080fd5b60008060408385031215612dc057600080fd5b8235612dcb81612d98565b946020939093013593505050565b600080600060608486031215612dee57600080fd5b8335612df981612d98565b95602085013595506040909401359392505050565b600060208284031215612e2057600080fd5b5035919050565b600080600060608486031215612e3c57600080fd5b8335612e4781612d98565b92506020840135612e5781612d98565b929592945050506040919091013590565b600060208284031215612e7a57600080fd5b813561093d81612d98565b803560ff81168114612e9657600080fd5b919050565b60008060008060808587031215612eb157600080fd5b612eba85612e85565b9350612ec860208601612e85565b9250612ed660408601612e85565b9150612ee460608601612e85565b905092959194509250565b60008060408385031215612f0257600080fd5b8235612f0d81612d98565b915060208301358015158114612f2257600080fd5b809150509250929050565b600080600060608486031215612f4257600080fd5b8335612f4d81612d98565b92506020840135612f5d81612d98565b91506040840135612f6d81612d98565b809150509250925092565b60008060408385031215612f8b57600080fd5b8235612f9681612d98565b91506020830135612f2281612d98565b600181811c90821680612fba57607f821691505b602082108103612fda57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761072857610728613015565b634e487b7160e01b600052601260045260246000fd5b60008261306757613067613042565b500490565b60ff818116838216019081111561072857610728613015565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b8082018082111561072857610728613015565b8181038181111561072857610728613015565b600060ff83168061310857613108613042565b8060ff84160491505092915050565b60ff828116828216039081111561072857610728613015565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b68ffffffffffffffffff1991909116815260200190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156131f757600080fd5b815161093d81612d98565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156132525784516001600160a01b03168352938301939183019160010161322d565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561328857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636500edc71549f0cbe47086c2237ce0cf874d6897fd1d7ce43ee6b65c0230d7606e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d71ff2daff16548cd2044be110fbea248f2655ffc2fdc140d65eb14904e0b2f64736f6c63430008120033

Deployed Bytecode Sourcemap

13542:23659:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13819:28;;;;;;;;;;-1:-1:-1;13819:28:0;;;;-1:-1:-1;;;13819:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;13819:28:0;;;;;;;;9223:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10203:194::-;;;;;;;;;;-1:-1:-1;10203:194:0;;;;;:::i;:::-;;:::i;35628:499::-;;;;;;;;;;-1:-1:-1;35628:499:0;;;;;:::i;:::-;;:::i;:::-;;14143:59;;;;;;;;;;;;;;;;;;;1749:25:1;;;1737:2;1722:18;14143:59:0;1603:177:1;13587:30:0;;;;;;;;;;-1:-1:-1;13587:30:0;;;;-1:-1:-1;;;;;13587:30:0;;;;;;-1:-1:-1;;;;;1964:32:1;;;1946:51;;1934:2;1919:18;13587:30:0;1785:218:1;9544:108:0;;;;;;;;;;-1:-1:-1;9632:12:0;;9544:108;;23605:323;;;;;;;;;;-1:-1:-1;23605:323:0;;;;;:::i;:::-;;:::i;10405:454::-;;;;;;;;;;-1:-1:-1;10405:454:0;;;;;:::i;:::-;;:::i;9443:93::-;;;;;;;;;;-1:-1:-1;9443:93:0;;9526:2;2796:36:1;;2784:2;2769:18;9443:93:0;2654:184:1;10867:293:0;;;;;;;;;;-1:-1:-1;10867:293:0;;;;;:::i;:::-;;:::i;24275:81::-;;;;;;;;;;-1:-1:-1;24275:81:0;;;;;:::i;:::-;;:::i;13624:38::-;;;;;;;;;;;;;;;15150:46;;;;;;;;;;-1:-1:-1;15150:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;22763:834;;;;;;;;;;-1:-1:-1;22763:834:0;;;;;:::i;:::-;;:::i;9660:143::-;;;;;;;;;;-1:-1:-1;9660:143:0;;;;;:::i;:::-;;:::i;8342:148::-;;;;;;;;;;;;;:::i;19881:396::-;;;;;;;;;;-1:-1:-1;19881:396:0;;;;;:::i;:::-;;:::i;23938:329::-;;;;;;;;;;-1:-1:-1;23938:329:0;;;;;:::i;:::-;;:::i;19463:410::-;;;;;;;;;;-1:-1:-1;19463:410:0;;;;;:::i;:::-;;:::i;13980:54::-;;;;;;;;;;;;;;;;20285:1648;;;;;;;;;;-1:-1:-1;20285:1648:0;;;;;:::i;:::-;;:::i;8128:79::-;;;;;;;;;;-1:-1:-1;8166:7:0;8193:6;-1:-1:-1;;;;;8193:6:0;8128:79;;9331:104;;;;;;;;;;;;;:::i;21941:814::-;;;;;;;;;;-1:-1:-1;21941:814:0;;;;;:::i;:::-;;:::i;36135:124::-;;;;;;;;;;;;;:::i;11168:393::-;;;;;;;;;;-1:-1:-1;11168:393:0;;;;;:::i;:::-;;:::i;9811:200::-;;;;;;;;;;-1:-1:-1;9811:200:0;;;;;:::i;:::-;;:::i;13915:58::-;;;;;;;;;;;;;;;;15086:57;;;;;;;;;;-1:-1:-1;15086:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19099:356;;;;;;;;;;-1:-1:-1;19099:356:0;;;;;:::i;:::-;;:::i;18653:84::-;;;;;;;;;;;;;:::i;10019:176::-;;;;;;;;;;-1:-1:-1;10019:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10160:18:0;;;10133:7;10160:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10019:176;8498:281;;;;;;;;;;-1:-1:-1;8498:281:0;;;;;:::i;:::-;;:::i;9223:100::-;9277:13;9310:5;9303:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9223:100;:::o;10203:194::-;10311:4;10328:39;7516:10;10351:7;10360:6;10328:8;:39::i;:::-;-1:-1:-1;10385:4:0;10203:194;;;;;:::o;35628:499::-;35806:18;;35778:24;35796:4;35778:9;:24::i;:::-;:46;;35756:141;;;;-1:-1:-1;;;35756:141:0;;5797:2:1;35756:141:0;;;5779:21:1;5836:2;5816:18;;;5809:30;5875:34;5855:18;;;5848:62;-1:-1:-1;;;5926:18:1;;;5919:43;5979:19;;35756:141:0;;;;;;;;;35912:38;35930:4;35936:3;35941:8;35912:17;:38::i;:::-;35908:212;;;35971:9;;-1:-1:-1;;;35971:9:0;;;;:13;35967:142;;36005:9;:16;;-1:-1:-1;;36005:16:0;36017:4;36005:16;;;36040:17;:15;:17::i;:::-;36076:9;:17;;-1:-1:-1;;36076:17:0;;;35967:142;35628:499;;;:::o;23605:323::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;23751:4:::1;23743;23722:13;9632:12:::0;;;9544:108;23722:13:::1;:17;::::0;23738:1:::1;23722:17;:::i;:::-;23721:26;;;;:::i;:::-;23720:35;;;;:::i;:::-;23708:8;:47;;23686:136;;;::::0;-1:-1:-1;;;23686:136:0;;7134:2:1;23686:136:0::1;::::0;::::1;7116:21:1::0;7173:2;7153:18;;;7146:30;7212:34;7192:18;;;7185:62;-1:-1:-1;;;7263:18:1;;;7256:37;7310:19;;23686:136:0::1;6932:403:1::0;23686:136:0::1;23875:11;::::0;23838:49:::1;::::0;23865:8;;23838:49:::1;::::0;;;::::1;23898:11;:22:::0;23605:323::o;10405:454::-;10545:4;10562:36;10572:6;10580:9;10591:6;10562:9;:36::i;:::-;10609:220;10632:6;7516:10;10680:138;10736:6;10680:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10680:19:0;;;;;;:11;:19;;;;;;;;7516:10;10680:33;;;;;;;;;;:37;:138::i;:::-;10609:8;:220::i;:::-;-1:-1:-1;10847:4:0;10405:454;;;;;;:::o;10867:293::-;7516:10;10980:4;11069:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11069:34:0;;;;;;;;;;10980:4;;10997:133;;11047:7;;11069:50;;11108:10;11069:38;:50::i;24275:81::-;24324:24;24330:10;24342:5;24324;:24::i;:::-;24275:81;:::o;22763:834::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;23134:14;23093:17;23007:62:::1;23050:19:::0;23007;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;22986:162;;:1;:162;22964:236;;;::::0;-1:-1:-1;;;22964:236:0;;7695:2:1;22964:236:0::1;::::0;::::1;7677:21:1::0;7734:2;7714:18;;;7707:30;7773:26;7753:18;;;7746:54;7817:18;;22964:236:0::1;7493:348:1::0;22964:236:0::1;23211:183;23249:5;23269:19;23303;23337:17;23369:14;23211:23;:183::i;:::-;23410:179;::::0;-1:-1:-1;;;8048:28:1;;8101:2;8092:12;23410:179:0::1;;::::0;;;;;::::1;::::0;;8360:4:1;8348:17;;;8330:36;;8402:17;;;8397:2;8382:18;;8375:45;8456:17;;;8436:18;;;8429:45;8510:17;;8505:2;8490:18;;8483:45;23410:179:0;;;;::::1;::::0;;;;;8317:3:1;23410:179:0;;::::1;22763:834:::0;;;;:::o;9660:143::-;-1:-1:-1;;;;;9777:18:0;9750:7;9777:18;;;:9;:18;;;;;;;9660:143::o;8342:148::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;8449:1:::1;8433:6:::0;;8412:40:::1;::::0;-1:-1:-1;;;;;8433:6:0;;::::1;::::0;8412:40:::1;::::0;8449:1;;8412:40:::1;8480:1;8463:19:::0;;-1:-1:-1;;;;;;8463:19:0::1;::::0;;8342:148::o;19881:396::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20025:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;20003:142:::1;;;;-1:-1:-1::0;;;20003:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20156:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;20156:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20221:48;;154:41:1;;;20221:48:0::1;::::0;127:18:1;20221:48:0::1;;;;;;;;19881:396:::0;;:::o;23938:329::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;24051:18:::1;;24039:8;:30:::0;24017:126:::1;;;::::0;-1:-1:-1;;;24017:126:0;;9152:2:1;24017:126:0::1;::::0;::::1;9134:21:1::0;9191:2;9171:18;;;9164:30;9230:34;9210:18;;;9203:62;-1:-1:-1;;;9281:18:1;;;9274:44;9335:19;;24017:126:0::1;8950:410:1::0;24017:126:0::1;24200:18;::::0;24159:60:::1;::::0;24190:8;;24159:60:::1;::::0;;;::::1;24230:18;:29:::0;23938:329::o;19463:410::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19612:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;19590:147:::1;;;;-1:-1:-1::0;;;19590:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19748:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;19748:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19818:47;;154:41:1;;;19818:47:0::1;::::0;127:18:1;19818:47:0::1;14:187:1::0;20285:1648:0;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;20453:15:::1;::::0;-1:-1:-1;;;;;20453:37:0;;::::1;:15:::0;::::1;:37;20449:546;;-1:-1:-1::0;;;;;20533:32:0;::::1;20507:125;;;::::0;-1:-1:-1;;;20507:125:0;;9567:2:1;20507:125:0::1;::::0;::::1;9549:21:1::0;9606:2;9586:18;;;9579:30;9645:33;9625:18;;;9618:61;9696:18;;20507:125:0::1;9365:355:1::0;20507:125:0::1;20695:13;-1:-1:-1::0;;;;;20673:35:0::1;:18;-1:-1:-1::0;;;;;20673:35:0::1;::::0;20647:128:::1;;;::::0;-1:-1:-1;;;20647:128:0;;9567:2:1;20647:128:0::1;::::0;::::1;9549:21:1::0;9606:2;9586:18;;;9579:30;9645:33;9625:18;;;9618:61;9696:18;;20647:128:0::1;9365:355:1::0;20647:128:0::1;20902:15;::::0;20795:137:::1;::::0;-1:-1:-1;;;9927:30:1;;-1:-1:-1;;;;;20902:15:0;;::::1;::::0;20795:137;::::1;::::0;9982:2:1;9973:12;20795:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;20947:15;:36:::0;;-1:-1:-1;;;;;;20947:36:0::1;-1:-1:-1::0;;;;;20947:36:0;::::1;;::::0;;20449:546:::1;21009:15;::::0;-1:-1:-1;;;;;21009:37:0;;::::1;:15:::0;::::1;:37;21005:546;;-1:-1:-1::0;;;;;21089:32:0;::::1;21063:125;;;::::0;-1:-1:-1;;;21063:125:0;;10198:2:1;21063:125:0::1;::::0;::::1;10180:21:1::0;10237:2;10217:18;;;10210:30;10276:33;10256:18;;;10249:61;10327:18;;21063:125:0::1;9996:355:1::0;21063:125:0::1;21251:13;-1:-1:-1::0;;;;;21229:35:0::1;:18;-1:-1:-1::0;;;;;21229:35:0::1;::::0;21203:128:::1;;;::::0;-1:-1:-1;;;21203:128:0;;10198:2:1;21203:128:0::1;::::0;::::1;10180:21:1::0;10237:2;10217:18;;;10210:30;10276:33;10256:18;;;10249:61;10327:18;;21203:128:0::1;9996:355:1::0;21203:128:0::1;21458:15;::::0;21351:137:::1;::::0;-1:-1:-1;;;10558:30:1;;-1:-1:-1;;;;;21458:15:0;;::::1;::::0;21351:137;::::1;::::0;10613:2:1;10604:12;21351:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21503:15;:36:::0;;-1:-1:-1;;;;;;21503:36:0::1;-1:-1:-1::0;;;;;21503:36:0;::::1;;::::0;;21005:546:::1;21565:9;::::0;-1:-1:-1;;;;;21565:25:0;;::::1;:9:::0;::::1;:25;21561:365;;-1:-1:-1::0;;;;;21615:26:0;::::1;21607:64;;;::::0;-1:-1:-1;;;21607:64:0;;10829:2:1;21607:64:0::1;::::0;::::1;10811:21:1::0;10868:2;10848:18;;;10841:30;-1:-1:-1;;;10887:18:1;;;10880:55;10952:18;;21607:64:0::1;10627:349:1::0;21607:64:0::1;21728:13;-1:-1:-1::0;;;;;21712:29:0::1;:12;-1:-1:-1::0;;;;;21712:29:0::1;::::0;21686:116:::1;;;::::0;-1:-1:-1;;;21686:116:0;;10829:2:1;21686:116:0::1;::::0;::::1;10811:21:1::0;10868:2;10848:18;;;10841:30;-1:-1:-1;;;10887:18:1;;;10880:55;10952:18;;21686:116:0::1;10627:349:1::0;21686:116:0::1;21865:9;::::0;21822:53:::1;::::0;-1:-1:-1;;;11183:24:1;;-1:-1:-1;;;;;21865:9:0;;::::1;::::0;21822:53;::::1;::::0;11232:1:1;11223:11;21822:53:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;21890:9;:24:::0;;-1:-1:-1;;;;;21890:24:0;::::1;-1:-1:-1::0;;;;;;21890:24:0;;::::1;;::::0;;20285:1648;;;:::o;9331:104::-;9387:13;9420:7;9413:14;;;;;:::i;21941:814::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;22304:13;22264:16;22180:60:::1;22222:18:::0;22180;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;22159:158;;:1;:158;22137:231;;;::::0;-1:-1:-1;;;22137:231:0;;11447:2:1;22137:231:0::1;::::0;::::1;11429:21:1::0;11486:2;11466:18;;;11459:30;11525:25;11505:18;;;11498:53;11568:18;;22137:231:0::1;11245:347:1::0;22137:231:0::1;22379:178;22416:5;22436:18;22469;22502:16;22533:13;22379:22;:178::i;:::-;22573:174;::::0;-1:-1:-1;;;11799:27:1;;11851:2;11842:12;22573:174:0::1;11597:263:1::0;36135:124:0;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;13885:23:::1;36190:15;:27:::0;;;36228:11:::1;:23:::0;36135:124::o;11168:393::-;11286:4;11303:228;7516:10;11353:7;11375:145;11432:15;11375:145;;;;;;;;;;;;;;;;;7516:10;11375:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11375:34:0;;;;;;;;;;;;:38;:145::i;9811:200::-;9922:4;9939:42;7516:10;9963:9;9974:6;9939:9;:42::i;19099:356::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19233:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;19211:131:::1;;;;-1:-1:-1::0;;;19211:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19353:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;19353:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19407:40;;154:41:1;;;19407:40:0::1;::::0;127:18:1;19407:40:0::1;14:187:1::0;18653:84:0;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;18706:16:::1;:23:::0;;-1:-1:-1;;;;18706:23:0::1;-1:-1:-1::0;;;18706:23:0::1;::::0;;18653:84::o;8498:281::-;8255:6;;-1:-1:-1;;;;;8255:6:0;7516:10;8255:22;8247:67;;;;-1:-1:-1;;;8247:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8601:22:0;::::1;8579:110;;;::::0;-1:-1:-1;;;8579:110:0;;12067:2:1;8579:110:0::1;::::0;::::1;12049:21:1::0;12106:2;12086:18;;;12079:30;12145:34;12125:18;;;12118:62;-1:-1:-1;;;12196:18:1;;;12189:36;12242:19;;8579:110:0::1;11865:402:1::0;8579:110:0::1;8726:6;::::0;;8705:38:::1;::::0;-1:-1:-1;;;;;8705:38:0;;::::1;::::0;8726:6;::::1;::::0;8705:38:::1;::::0;::::1;8754:6;:17:::0;;-1:-1:-1;;;;;;8754:17:0::1;-1:-1:-1::0;;;;;8754:17:0;;;::::1;::::0;;;::::1;::::0;;8498:281::o;2365:181::-;2423:7;;2455:5;2459:1;2455;:5;:::i;:::-;2443:17;;2484:1;2479;:6;;2471:46;;;;-1:-1:-1;;;2471:46:0;;12604:2:1;2471:46:0;;;12586:21:1;12643:2;12623:18;;;12616:30;12682:29;12662:18;;;12655:57;12729:18;;2471:46:0;12402:351:1;13024:378:0;-1:-1:-1;;;;;13160:19:0;;13152:68;;;;-1:-1:-1;;;13152:68:0;;12960:2:1;13152:68:0;;;12942:21:1;12999:2;12979:18;;;12972:30;13038:34;13018:18;;;13011:62;-1:-1:-1;;;13089:18:1;;;13082:34;13133:19;;13152:68:0;12758:400:1;13152:68:0;-1:-1:-1;;;;;13239:21:0;;13231:68;;;;-1:-1:-1;;;13231:68:0;;13365:2:1;13231:68:0;;;13347:21:1;13404:2;13384:18;;;13377:30;13443:34;13423:18;;;13416:62;-1:-1:-1;;;13494:18:1;;;13487:32;13536:19;;13231:68:0;13163:398:1;13231:68:0;-1:-1:-1;;;;;13310:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13362:32;;1749:25:1;;;13362:32:0;;1722:18:1;13362:32:0;;;;;;;;13024:378;;;:::o;32328:1793::-;32522:10;32458:4;32503:30;;;:18;:30;;;;;;32458:4;;32503:30;;32498:1616;;32554:9;;-1:-1:-1;;;32554:9:0;;;;:13;32550:309;;32612:9;;32588:11;;32625:3;;32603:18;;-1:-1:-1;;;32612:9:0;;;;32603:6;:18;:::i;:::-;32602:26;;;;:::i;:::-;32678:8;;32588:40;;-1:-1:-1;32647:18:0;;32690:3;;32669:17;;32678:8;;;;;32669:6;:17;:::i;:::-;32668:25;;;;:::i;:::-;32647:46;-1:-1:-1;32721:12:0;32730:3;32721:6;:12;:::i;:::-;32712:21;-1:-1:-1;32756:14:0;;32752:92;;32795:29;32801:10;32813;32795:5;:29::i;:::-;32569:290;;32550:309;32877:9;;-1:-1:-1;;;32877:9:0;;;;:13;32873:414;;32911:23;32937:24;32955:4;32937:9;:24::i;:::-;33063:9;;32911:50;;-1:-1:-1;32980:23:0;;33096:1;;33063:9;-1:-1:-1;;;33063:9:0;;;;;33007:31;;33025:13;32911:50;33007:31;:::i;:::-;33006:66;;;;:::i;:::-;:91;;;;:::i;:::-;32980:117;-1:-1:-1;33116:20:0;33139:35;32980:117;33139:15;:35;:::i;:::-;33116:58;-1:-1:-1;33197:16:0;;33193:79;;33248:4;33238:14;;33193:79;32892:395;;;32873:414;33308:7;-1:-1:-1;33301:14:0;;32498:1616;33379:1;33352:24;33370:4;33352:9;:24::i;:::-;:28;33348:297;;;33405:6;33415:1;33405:11;33401:229;;-1:-1:-1;33441:11:0;:22;;;33496:5;33401:229;;;33550:22;33556:7;33565:6;33550:5;:22::i;:::-;-1:-1:-1;33605:5:0;33401:229;33663:9;;-1:-1:-1;;;33663:9:0;;;;:13;33659:415;;33697:23;33723:24;33741:4;33723:9;:24::i;:::-;33849:9;;33697:50;;-1:-1:-1;33766:23:0;;33882:1;;33849:9;-1:-1:-1;;;33849:9:0;;;;;33793:31;;33811:13;33697:50;33793:31;:::i;:::-;33792:66;;;;:::i;:::-;:91;;;;:::i;:::-;33766:117;-1:-1:-1;33902:20:0;33925:35;33766:117;33925:15;:35;:::i;:::-;33902:58;-1:-1:-1;33983:16:0;;33979:80;;34034:5;34024:15;;33678:396;;;34095:7;-1:-1:-1;34088:14:0;;34129:1491;34175:23;34201:24;34219:4;34201:9;:24::i;:::-;34318:18;;34175:50;;-1:-1:-1;34264:21:0;;34318:22;;34339:1;34318:22;:::i;:::-;34300:15;:40;34296:113;;;34375:18;;:22;;34396:1;34375:22;:::i;:::-;34357:40;;34296:113;34517:9;;34419:12;;;;34542:1;;34517:9;-1:-1:-1;;;34517:9:0;;;;;34469:31;;34487:13;34469:15;:31;:::i;:::-;34468:58;;;;:::i;:::-;:75;;;;:::i;:::-;34442:101;-1:-1:-1;34554:20:0;34577:35;34442:101;34577:15;:35;:::i;:::-;34554:58;;34625:31;34643:12;34625:17;:31::i;:::-;34669:27;34699:41;34723:17;34699:21;:41;:::i;:::-;34808:8;;34669:71;;-1:-1:-1;34751:19:0;;34808:8;;;;;;;34787:17;;34803:1;;34787:13;:17;:::i;:::-;34786:30;;;;:::i;:::-;34773:9;;:44;;;-1:-1:-1;;;34773:9:0;;;;:44;:::i;:::-;34880:13;;34751:66;;;;;-1:-1:-1;34828:26:0;;34937:1;;34751:66;;34858:35;;34880:13;34858:19;:35;:::i;:::-;34857:64;;;;:::i;:::-;:81;;;;:::i;:::-;35001:13;;34828:110;;-1:-1:-1;34949:26:0;;35031:11;;34979:35;;35001:13;;;;;34979:19;:35;:::i;:::-;34978:64;;;;:::i;:::-;34949:93;-1:-1:-1;35053:24:0;35116:39;34949:93;35116:18;:39;:::i;:::-;35080:76;;:19;:76;:::i;:::-;35191:9;;35183:52;;35053:103;;-1:-1:-1;;;;;;35191:9:0;;35053:103;;35183:52;;;;35053:103;35191:9;35183:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35268:15:0;;35260:87;;35169:66;;-1:-1:-1;;;;;;35268:15:0;;35311:21;;35260:87;;;;35311:21;35268:15;35260:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35246:101:0;;-1:-1:-1;;35364:19:0;;35360:253;;35400:50;35414:15;35431:18;35400:13;:50::i;:::-;35470:131;;;14437:25:1;;;14493:2;14478:18;;14471:34;;;14521:18;;;14514:34;;;35470:131:0;;14425:2:1;14410:18;35470:131:0;;;;;;;35360:253;34164:1456;;;;;;;;;;34129:1491::o;24364:2988::-;-1:-1:-1;;;;;24496:18:0;;24488:68;;;;-1:-1:-1;;;24488:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24575:16:0;;24567:64;;;;-1:-1:-1;;;24567:64:0;;;;;;;:::i;:::-;24648:6;24658:1;24648:11;24644:93;;24676:28;24692:4;24698:2;24702:1;24676:15;:28::i;24644:93::-;-1:-1:-1;;;;;24768:31:0;;;24749:16;24768:31;;;:25;:31;;;;;;;;;24828:29;;;;;;;;;24889:35;;;:29;:35;;;;;;24768:31;;;;;24828:29;;;;24889:35;24888:36;:87;;;;-1:-1:-1;;;;;;24942:33:0;;;;;;:29;:33;;;;;;;;24941:34;24888:87;24870:1335;;;25010:16;;-1:-1:-1;;;25010:16:0;;;;25002:59;;;;-1:-1:-1;;;25002:59:0;;15571:2:1;25002:59:0;;;15553:21:1;15610:2;15590:18;;;15583:30;15649:32;15629:18;;;15622:60;15699:18;;25002:59:0;15369:354:1;25002:59:0;-1:-1:-1;;;;;25098:31:0;;;;;;:25;:31;;;;;;;;:91;;;;-1:-1:-1;;;;;;25151:38:0;;;;;;:34;:38;;;;;;;;25150:39;25098:91;25076:1118;;;25264:11;;25254:6;:21;;25224:135;;;;-1:-1:-1;;;25224:135:0;;15930:2:1;25224:135:0;;;15912:21:1;15969:2;15949:18;;;15942:30;16008:34;15988:18;;;15981:62;-1:-1:-1;;;16059:18:1;;;16052:38;16107:19;;25224:135:0;15728:404:1;25224:135:0;25434:15;;25417:13;25427:2;25417:9;:13::i;:::-;25408:22;;:6;:22;:::i;:::-;:41;;25378:139;;;;-1:-1:-1;;;25378:139:0;;16339:2:1;25378:139:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:26;16397:18;;;16390:54;16461:18;;25378:139:0;16137:348:1;25378:139:0;25076:1118;;;-1:-1:-1;;;;;25561:29:0;;;;;;:25;:29;;;;;;;;:91;;;;-1:-1:-1;;;;;;25612:40:0;;;;;;:34;:40;;;;;;;;25611:41;25561:91;25539:655;;;25727:11;;25717:6;:21;;25687:137;;;;-1:-1:-1;;;25687:137:0;;16692:2:1;25687:137:0;;;16674:21:1;16731:2;16711:18;;;16704:30;16770:34;16750:18;;;16743:62;-1:-1:-1;;;16821:18:1;;;16814:40;16871:19;;25687:137:0;16490:406:1;25539:655:0;-1:-1:-1;;;;;25851:38:0;;;;;;:34;:38;;;;;;;;25846:348;;25966:15;;25949:13;25959:2;25949:9;:13::i;:::-;25940:22;;:6;:22;:::i;:::-;:41;;25910:138;;;;-1:-1:-1;;;25910:138:0;;17103:2:1;25910:138:0;;;17085:21:1;17142:2;17122:18;;;17115:30;17181:25;17161:18;;;17154:53;17224:18;;25910:138:0;16901:347:1;25846:348:0;26075:9;;;;26074:10;:54;;;;-1:-1:-1;;;;;;26088:40:0;;;;;;:34;:40;;;;;;;;26074:54;26070:124;;;26163:15;26149:11;:29;26070:124;26215:47;26228:11;26241:10;26253:4;26259:2;26215:12;:47::i;:::-;26273:12;26316:18;;26288:24;26306:4;26288:9;:24::i;:::-;26365:16;;-1:-1:-1;;26288:46:0;;-1:-1:-1;;;;26365:16:0;;;;:40;;;;;26398:7;26365:40;:67;;;;-1:-1:-1;26423:9:0;;;;26422:10;26365:67;:97;;;;-1:-1:-1;26449:9:0;;-1:-1:-1;;;26449:9:0;;;;:13;;26365:97;:143;;;;-1:-1:-1;;;;;;26479:29:0;;;;;;:25;:29;;;;;;;;26365:143;:185;;;;-1:-1:-1;;;;;;26526:24:0;;;;;;:18;:24;;;;;;;;26525:25;26365:185;:225;;;;-1:-1:-1;;;;;;26568:22:0;;;;;;:18;:22;;;;;;;;26567:23;26365:225;26347:362;;;26617:9;:16;;-1:-1:-1;;26617:16:0;26629:4;26617:16;;;26648:17;:15;:17::i;:::-;26680:9;:17;;-1:-1:-1;;26680:17:0;;;26347:362;26737:9;;26721:12;;26737:9;;26736:10;:30;;;;-1:-1:-1;26750:16:0;;-1:-1:-1;;;26750:16:0;;;;26736:30;-1:-1:-1;;;;;26783:24:0;;;;;;:18;:24;;;;;;26721:45;;-1:-1:-1;26783:24:0;;;:50;;-1:-1:-1;;;;;;26811:22:0;;;;;;:18;:22;;;;;;;;26783:50;26779:98;;;-1:-1:-1;26860:5:0;26779:98;26891:7;:24;;;;-1:-1:-1;26902:9:0;;-1:-1:-1;;;26902:9:0;;;;:13;;26891:24;26887:414;;;26956:9;;26932:11;;26969:3;;26947:18;;-1:-1:-1;;;26956:9:0;;;;26947:6;:18;:::i;:::-;26946:26;;;;:::i;:::-;27018:8;;26932:40;;-1:-1:-1;26987:18:0;;27030:3;;27009:17;;27018:8;;;;;27009:6;:17;:::i;:::-;27008:25;;;;:::i;:::-;26987:46;-1:-1:-1;27057:12:0;27066:3;27057:6;:12;:::i;:::-;27048:21;;27084:41;27100:4;27114;27121:3;27084:15;:41::i;:::-;27146:14;;27142:148;;27181:38;27201:4;27208:10;27181:11;:38::i;:::-;27253:8;;27243:31;;;27253:8;;;;;;17423:36:1;;17490:2;17475:18;;17468:34;;;27243:31:0;;17396:18:1;27243:31:0;;;;;;;27142:148;26917:384;;26887:414;27311:33;27327:4;27333:2;27337:6;27311:15;:33::i;:::-;24477:2875;;;;24364:2988;;;:::o;2698:226::-;2818:7;2854:12;2846:6;;;;2838:29;;;;-1:-1:-1;;;2838:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2878:9:0;2890:5;2894:1;2890;:5;:::i;:::-;2878:17;2698:226;-1:-1:-1;;;;;2698:226:0:o;12565:451::-;-1:-1:-1;;;;;12649:21:0;;12641:67;;;;-1:-1:-1;;;12641:67:0;;17715:2:1;12641:67:0;;;17697:21:1;17754:2;17734:18;;;17727:30;17793:34;17773:18;;;17766:62;-1:-1:-1;;;17844:18:1;;;17837:31;17885:19;;12641:67:0;17513:397:1;12641:67:0;12800:105;12837:6;12800:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12800:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;12779:18:0;;;;;;:9;:18;;;;;:126;12931:12;;:24;;12948:6;12931:16;:24::i;:::-;12916:12;:39;12971:37;;1749:25:1;;;12997:1:0;;-1:-1:-1;;;;;12971:37:0;;;;;1737:2:1;1722:18;12971:37:0;;;;;;;12565:451;;:::o;29269:1538::-;29507:22;;;;:45;;;;:22;;;;;:45;29503:329;;29574:187;;-1:-1:-1;;;18117:33:1;;18175:2;18166:12;29574:187:0;;;;;;;;29652:22;;;;29732:14;;29574:187;;29652:22;;;;;;;;29574:187;;;;-1:-1:-1;;;;;;;;;;;29574:187:0;;;29732:14;;;29574:187;:::i;:::-;;;;;;;;29776:22;;;:44;;-1:-1:-1;;29776:44:0;;;;;;;;;29503:329;29846:22;;;;:45;;;;:22;;;;;:45;29842:329;;29913:187;;-1:-1:-1;;;18605:33:1;;18663:2;18654:12;29913:187:0;;;;;;;;29991:22;;;;30071:14;;29913:187;;29991:22;;;;;;;;29913:187;;;;-1:-1:-1;;;;;;;;;;;29913:187:0;;;30071:14;;;29913:187;:::i;:::-;;;;;;;;30115:22;;;:44;;-1:-1:-1;;30115:44:0;;;;;;;;;29842:329;30185:20;;;;:41;;;;-1:-1:-1;;;30185:20:0;;;;:41;30181:315;;30248:181;;-1:-1:-1;;;18879:31:1;;18935:2;18926:12;30248:181:0;;;;;;;;30324:20;;;;30400:14;;30248:181;;30324:20;-1:-1:-1;;;30324:20:0;;;;;;30248:181;;;;-1:-1:-1;;;;;;;;;;;30248:181:0;;;30400:14;;;30248:181;:::i;:::-;;;;;;;;30444:20;;;:40;;-1:-1:-1;;30444:40:0;-1:-1:-1;;;30444:40:0;;;;;;;30181:315;30510:17;;;;:35;;;;-1:-1:-1;;;30510:17:0;;;;:35;30506:294;;30567:172;;-1:-1:-1;;;19151:28:1;;19204:2;19195:12;30567:172:0;;;;;;;;30640:17;;;;30710:14;;30567:172;;30640:17;-1:-1:-1;;;30640:17:0;;;;;;30567:172;;;;-1:-1:-1;;;;;;;;;;;30567:172:0;;;30710:14;;;30567:172;:::i;:::-;;;;;;;;30754:17;;;:34;;-1:-1:-1;;30754:34:0;-1:-1:-1;;;30754:34:0;;;;;;;30506:294;29269:1538;;;;;:::o;30815:1505::-;31048:21;;;;:43;;;;:21;;:43;31044:322;;31113:184;;-1:-1:-1;;;19420:32:1;;19477:2;19468:12;31113:184:0;;;;;;;;31190:21;;;;31268:14;;31113:184;;31190:21;;;;;31113:184;;;;-1:-1:-1;;;;;;;;;;;31113:184:0;;;31268:14;;;31113:184;:::i;:::-;;;;;;;;31312:21;;;:42;;-1:-1:-1;;31312:42:0;;;;;;;31044:322;31380:21;;;;:43;;;;:21;;;;;:43;31376:322;;31445:184;;-1:-1:-1;;;19693:32:1;;19750:2;19741:12;31445:184:0;;;;;;;;31522:21;;;;31600:14;;31445:184;;31522:21;;;;;;;;31445:184;;;;-1:-1:-1;;;;;;;;;;;31445:184:0;;;31600:14;;;31445:184;:::i;:::-;;;;;;;;31644:21;;;:42;;-1:-1:-1;;31644:42:0;;;;;;;;;31376:322;31712:19;;;;:39;;;;-1:-1:-1;;;31712:19:0;;;;:39;31708:308;;31773:178;;-1:-1:-1;;;19966:30:1;;20021:2;20012:12;31773:178:0;;;;;;;;31848:19;;;;31922:14;;31773:178;;31848:19;-1:-1:-1;;;31848:19:0;;;;;;31773:178;;;;-1:-1:-1;;;;;;;;;;;31773:178:0;;;31922:14;;;31773:178;:::i;:::-;;;;;;;;31966:19;;;:38;;-1:-1:-1;;31966:38:0;-1:-1:-1;;;31966:38:0;;;;;;;31708:308;32030:16;;;;:33;;;;-1:-1:-1;;;32030:16:0;;;;:33;32026:287;;32085:169;;-1:-1:-1;;;20237:27:1;;20289:2;20280:12;32085:169:0;;;;;;;;32157:16;;;;32225:14;;32085:169;;32157:16;-1:-1:-1;;;32157:16:0;;;;;;32085:169;;;;-1:-1:-1;;;;;;;;;;;32085:169:0;;;32225:14;;;32085:169;:::i;:::-;;;;;;;;32269:16;;;:32;;;;;-1:-1:-1;;;32269:32:0;-1:-1:-1;;32269:32:0;;;;;;30815:1505;;;;;:::o;36698:500::-;36789:16;;;36803:1;36789:16;;;;;;;;36765:21;;36789:16;;;;;;;;;;-1:-1:-1;36789:16:0;36765:40;;36834:4;36816;36821:1;36816:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36816:23:0;;;:7;;;;;;;;;;:23;;;;36860:15;;:22;;;-1:-1:-1;;;36860:22:0;;;;:15;;;;;:20;;:22;;;;;36816:7;;36860:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36850:4;36855:1;36850:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36850:32:0;;;:7;;;;;;;;;:32;36925:15;;36893:62;;36910:4;;36925:15;36943:11;36893:8;:62::i;:::-;36966:15;;:224;;-1:-1:-1;;;36966:224:0;;-1:-1:-1;;;;;36966:15:0;;;;:66;;:224;;37047:11;;36966:15;;37117:4;;37144;;37164:15;;36966:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36754:444;36698:500;:::o;36267:423::-;36381:15;;36349:62;;36366:4;;-1:-1:-1;;;;;36381:15:0;36399:11;36349:8;:62::i;:::-;36422:15;;36626;;36422:260;;-1:-1:-1;;;36422:260:0;;36494:4;36422:260;;;22149:34:1;22199:18;;;22192:34;;;36422:15:0;22242:18:1;;;22235:34;;;22285:18;;;22278:34;-1:-1:-1;;;;;36626:15:0;;;22328:19:1;;;22321:44;36656:15:0;22381:19:1;;;22374:35;36422:15:0;;;:31;;36461:9;;22083:19:1;;36422:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11569:606::-;-1:-1:-1;;;;;11709:20:0;;11701:70;;;;-1:-1:-1;;;11701:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11790:23:0;;11782:71;;;;-1:-1:-1;;;11782:71:0;;;;;;;:::i;:::-;11942:108;11978:6;11942:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11942:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;11922:17:0;;;;;;;:9;:17;;;;;;:128;;;;12084:20;;;;;;;:32;;12109:6;12084:24;:32::i;:::-;-1:-1:-1;;;;;12061:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12132:35;;;;;;;;;;12160:6;1749:25:1;;1737:2;1722:18;;1603:177;27360:1492:0;27505:13;:17;;-1:-1:-1;;27587:12:0;;;27612:436;;;;27660:23;;27644:13;:39;;27660:23;;;;-1:-1:-1;;27698:39:0;;;;;;;27660:23;27714;;;;;;27698:39;;;;;;;;-1:-1:-1;;27802:29:0;-1:-1:-1;;;27766:21:0;;;;27752:35;;;;-1:-1:-1;;27802:29:0;;-1:-1:-1;;;27813:18:0;;;;27802:29;;;;;;;;-1:-1:-1;;;;;27864:15:0;;-1:-1:-1;27864:15:0;;;:11;:15;;;;;;:20;:172;;-1:-1:-1;;;;;28021:15:0;;;;;;:11;:15;;;;;;27864:172;;;27904:22;27922:2;27904:9;:22::i;:::-;:27;:97;;-1:-1:-1;;;;;27986:15:0;;;;;;:11;:15;;;;;;27904:97;;;27951:15;27904:97;-1:-1:-1;;;;;27846:15:0;;;;;;:11;:15;;;;;:190;27612:436;28062:10;28058:234;;;28105:24;;28089:13;:40;;28105:24;;;;;;;;-1:-1:-1;;28144:40:0;;;;;;;28160:24;;;;;;28144:40;;;;;-1:-1:-1;;28250:30:0;-1:-1:-1;;;28213:22:0;;;;28199:36;;-1:-1:-1;;28250:30:0;;-1:-1:-1;;;28261:19:0;;;;;;;28250:30;;;;;;;28058:234;28307:10;28306:11;:27;;;;;28322:11;28321:12;28306:27;28302:251;;;28366:24;;28350:13;:40;;28366:24;;;;;;;;-1:-1:-1;;28405:40:0;;;;;;;28421:24;;;;;;28405:40;;;;;-1:-1:-1;;28511:30:0;-1:-1:-1;;;28474:22:0;;;;28460:36;;-1:-1:-1;;28511:30:0;;-1:-1:-1;;;28522:19:0;;;;;;;28511:30;;;;;;;28302:251;28563:37;28578:11;28591:4;28597:2;28563:14;:37::i;:::-;28669:8;;;;;;;;;28655:11;;;;;;28623:29;;28669:8;28639:13;;;;;28623;:29;:::i;:::-;:43;;;;:::i;:::-;:54;;;;:::i;:::-;28611:9;:66;;;;;;-1:-1:-1;;;28611:66:0;;;-1:-1:-1;;28611:66:0;;;;;;;;28693:151;;;28719:13;;;;;;;;;;22970:36:1;;28611:66:0;28747:13;;;;23037:2:1;23022:18;;23015:45;28775:11:0;;;;;23076:18:1;;;23069:45;28801:8:0;;;;;23145:2:1;23130:18;;23123:45;28824:9:0;;;;;23199:3:1;23184:19;;23177:46;28693:151:0;;;;;;;22957:3:1;28693:151:0;;;27360:1492;;;;:::o;2554:136::-;2612:7;2639:43;2643:1;2646;2639:43;;;;;;;;;;;;;;;;;:3;:43::i;28860:401::-;-1:-1:-1;;;;;28965:16:0;;;;;;:54;;-1:-1:-1;;;;;;28998:21:0;;29012:6;28998:21;;28965:54;:96;;;;-1:-1:-1;;;;;;29037:24:0;;;;;;:18;:24;;;;;;;;29036:25;28965:96;:136;;;;-1:-1:-1;;;;;;29079:22:0;;;;;;:18;:22;;;;;;;;29078:23;28965:136;28947:307;;;29133:11;29132:12;:26;;;;-1:-1:-1;29149:9:0;;;;29148:10;29132:26;29128:115;;;29216:11;;-1:-1:-1;;;;;29196:17:0;;;;;;:11;:17;;;;;;:31;;29216:11;29196:31;:::i;:::-;29179:14;:48;28860:401;;;:::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:180::-;2067:6;2120:2;2108:9;2099:7;2095:23;2091:32;2088:52;;;2136:1;2133;2126:12;2088:52;-1:-1:-1;2159:23:1;;2008:180;-1:-1:-1;2008:180:1:o;2193:456::-;2270:6;2278;2286;2339:2;2327:9;2318:7;2314:23;2310:32;2307:52;;;2355:1;2352;2345:12;2307:52;2394:9;2381:23;2413:31;2438:5;2413:31;:::i;:::-;2463:5;-1:-1:-1;2520:2:1;2505:18;;2492:32;2533:33;2492:32;2533:33;:::i;:::-;2193:456;;2585:7;;-1:-1:-1;;;2639:2:1;2624:18;;;;2611:32;;2193:456::o;3051:247::-;3110:6;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;3218:9;3205:23;3237:31;3262:5;3237:31;:::i;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;4817:388::-;4885:6;4893;4946:2;4934:9;4925:7;4921:23;4917:32;4914:52;;;4962:1;4959;4952:12;4914:52;5001:9;4988:23;5020:31;5045:5;5020:31;:::i;:::-;5070:5;-1:-1:-1;5127:2:1;5112:18;;5099:32;5140:33;5099:32;5140:33;:::i;5210:380::-;5289:1;5285:12;;;;5332;;;5353:61;;5407:4;5399:6;5395:17;5385:27;;5353:61;5460:2;5452:6;5449:14;5429:18;5426:38;5423:161;;5506:10;5501:3;5497:20;5494:1;5487:31;5541:4;5538:1;5531:15;5569:4;5566:1;5559:15;5423:161;;5210:380;;;:::o;6009:356::-;6211:2;6193:21;;;6230:18;;;6223:30;6289:34;6284:2;6269:18;;6262:62;6356:2;6341:18;;6009:356::o;6370:127::-;6431:10;6426:3;6422:20;6419:1;6412:31;6462:4;6459:1;6452:15;6486:4;6483:1;6476:15;6502:168;6575:9;;;6606;;6623:15;;;6617:22;;6603:37;6593:71;;6644:18;;:::i;6675:127::-;6736:10;6731:3;6727:20;6724:1;6717:31;6767:4;6764:1;6757:15;6791:4;6788:1;6781:15;6807:120;6847:1;6873;6863:35;;6878:18;;:::i;:::-;-1:-1:-1;6912:9:1;;6807:120::o;7340:148::-;7428:4;7407:12;;;7421;;;7403:31;;7446:13;;7443:39;;;7462:18;;:::i;8539:406::-;8741:2;8723:21;;;8780:2;8760:18;;;8753:30;8819:34;8814:2;8799:18;;8792:62;-1:-1:-1;;;8885:2:1;8870:18;;8863:40;8935:3;8920:19;;8539:406::o;12272:125::-;12337:9;;;12358:10;;;12355:36;;;12371:18;;:::i;13566:128::-;13633:9;;;13654:11;;;13651:37;;;13668:18;;:::i;13699:165::-;13737:1;13771:4;13768:1;13764:12;13795:3;13785:37;;13802:18;;:::i;:::-;13854:3;13847:4;13844:1;13840:12;13836:22;13831:27;;;13699:165;;;;:::o;13869:151::-;13959:4;13952:12;;;13938;;;13934:31;;13977:14;;13974:40;;;13994:18;;:::i;14559:401::-;14761:2;14743:21;;;14800:2;14780:18;;;14773:30;14839:34;14834:2;14819:18;;14812:62;-1:-1:-1;;;14905:2:1;14890:18;;14883:35;14950:3;14935:19;;14559:401::o;14965:399::-;15167:2;15149:21;;;15206:2;15186:18;;;15179:30;15245:34;15240:2;15225:18;;15218:62;-1:-1:-1;;;15311:2:1;15296:18;;15289:33;15354:3;15339:19;;14965:399::o;18189:209::-;-1:-1:-1;;18353:38:1;;;;18335:57;;18323:2;18308:18;;18189:209::o;20435:127::-;20496:10;20491:3;20487:20;20484:1;20477:31;20527:4;20524:1;20517:15;20551:4;20548:1;20541:15;20567:251;20637:6;20690:2;20678:9;20669:7;20665:23;20661:32;20658:52;;;20706:1;20703;20696:12;20658:52;20738:9;20732:16;20757:31;20782:5;20757:31;:::i;20823:980::-;21085:4;21133:3;21122:9;21118:19;21164:6;21153:9;21146:25;21190:2;21228:6;21223:2;21212:9;21208:18;21201:34;21271:3;21266:2;21255:9;21251:18;21244:31;21295:6;21330;21324:13;21361:6;21353;21346:22;21399:3;21388:9;21384:19;21377:26;;21438:2;21430:6;21426:15;21412:29;;21459:1;21469:195;21483:6;21480:1;21477:13;21469:195;;;21548:13;;-1:-1:-1;;;;;21544:39:1;21532:52;;21639:15;;;;21604:12;;;;21580:1;21498:9;21469:195;;;-1:-1:-1;;;;;;;21720:32:1;;;;21715:2;21700:18;;21693:60;-1:-1:-1;;;21784:3:1;21769:19;21762:35;21681:3;20823:980;-1:-1:-1;;;20823:980:1:o;22420:306::-;22508:6;22516;22524;22577:2;22565:9;22556:7;22552:23;22548:32;22545:52;;;22593:1;22590;22583:12;22545:52;22622:9;22616:16;22606:26;;22672:2;22661:9;22657:18;22651:25;22641:35;;22716:2;22705:9;22701:18;22695:25;22685:35;;22420:306;;;;;:::o

Swarm Source

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