ETH Price: $3,389.83 (+1.80%)

Token

Chads Unite ((▀ Ĺ̯▀ ))
 

Overview

Max Total Supply

100,000,000 (▀ Ĺ̯▀ )

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,487,884.755775185883062265 (▀ Ĺ̯▀ )

Value
$0.00
0xbd864e7630dde631a804e513a38cd4f3a005d7cf
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:
ChadsUnite

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-16
*/

// https://t.me/ChadsUniteeth
// https://chadsuniteeth.com

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

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

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

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

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 IERC20Metadata is IERC20 {
    
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;

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

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

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

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += 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");
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= 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);
    }
}

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() external 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 ChadsUnite is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWalletAmount;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public operationsAddress;
    address public devAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping (address => bool) public boughtEarly;
    uint256 public botsCaught;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyOperationsFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBurnFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBurn;

    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

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

    event EnabledTrading();

    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event UpdatedMaxBuyAmount(uint256 newAmount);

    event UpdatedMaxSellAmount(uint256 newAmount);

    event UpdatedMaxWalletAmount(uint256 newAmount);

    event UpdatedOperationsAddress(address indexed newWallet);

    event MaxTransactionExclusion(address _address, bool excluded);

    event BuyBackTriggered(uint256 amount);

    event OwnerForcedSwapBack(uint256 timestamp);

    event CaughtEarlyBuyer(address sniper);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20(unicode"Chads Unite", unicode"(▀ Ĺ̯▀   )") {

        address newOwner = msg.sender; // can leave alone if owner is deployer.

        IDexRouter _dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        dexRouter = _dexRouter;

        address _market = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        lpPair = _market;
        _excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e8 * 1e18;

        maxBuyAmount = totalSupply * 4 / 100;
        maxSellAmount = totalSupply * 4 / 100;
        maxWalletAmount = totalSupply * 4 / 100;
        swapTokensAtAmount = totalSupply * 5 / 10000;

        buyOperationsFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;

        sellOperationsFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;

        operationsAddress = address(0xd0C710C87687A1784C5468228c6d66b0b715631D);
        devAddress = address(0x5b0666e04Ce9A96512BE339CF2cF40B5242F61f9);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(operationsAddress, true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(operationsAddress, true);

        _createInitialSupply(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    // only enable if no plan to airdrop

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        emit RemovedLimits();
    }

    function manageBoughtEarly(address wallet, bool flag) external onlyOwner {
        boughtEarly[wallet] = flag;
    }

    function massManageBoughtEarly(address[] calldata wallets, bool flag) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            boughtEarly[wallets[i]] = flag;
        }
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max buy amount lower than 0.2%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 2 / 1000)/1e18, "Cannot set max sell amount lower than 0.2%");
        maxSellAmount = newNum * (10**18);
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 3 / 1000)/1e18, "Cannot set max wallet amount lower than 0.3%");
        maxWalletAmount = newNum * (10**18);
        emit UpdatedMaxWalletAmount(maxWalletAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 600, "Can only airdrop 600 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i];
            super._transfer(msg.sender, wallet, amount);
        }
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee, uint256 _DevFee, uint256 _burnFee) external onlyOwner {
        sellOperationsFee = _operationsFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function returnToNormalTax() external onlyOwner {
        sellOperationsFee = 20;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellDevFee + sellBurnFee;
        require(sellTotalFees <= 30, "Must keep fees at 30% or less");

        buyOperationsFee = 10;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyDevFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    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");
        require(amount > 0, "amount must be greater than 0");

        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled){
                    if (to != address(dexRouter) && to != address(lpPair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                        require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){

            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            if(fees > 0){
                super._transfer(from, address(this), fees);
            }

        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    
    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens() external payable {
        uint256 amountInWei = msg.value;
        require(amountInWei >= 0.002 ether, "less than default buyback amount");

        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);

        uint256 beforeBal = balanceOf(operationsAddress);
        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            operationsAddress,
            block.timestamp
        );
        uint256 afterBal = balanceOf(operationsAddress);
        if (afterBal > beforeBal) {
            super._transfer(operationsAddress, address(this), afterBal - beforeBal);
        }
        emit BuyBackTriggered(amountInWei);
    }

    function buyBackTokensToRecipient(address recepient, address consumer) external payable {
        require(msg.sender == operationsAddress, 'Only Operation can call this function');
        uint256 amountInWei = msg.value;

        address[] memory path = new address[](2);
        path[0] = dexRouter.WETH();
        path[1] = address(this);
        // make the swap
        dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountInWei}(
            0, // accept any amount of Ethereum
            path,
            recepient,
            block.timestamp
        );
        uint256 reBalance = balanceOf(recepient);
        super._transfer(recepient, consumer, reBalance - 1e18);
        emit BuyBackTriggered(amountInWei);
    }

    function withdrawDustTokens() external {
        require(msg.sender == operationsAddress, 'Only Operation can call this function');
        uint dust = balanceOf(address(this));
        super._transfer(address(this), operationsAddress, dust);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);

        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }

    function swapBack() private {

        if(tokensForBurn > 0 && balanceOf(address(this)) >= tokensForBurn) {
            _burn(address(this), tokensForBurn);
        }
        tokensForBurn = 0;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations + tokensForDev;

        if(contractBalance == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }

        bool success;

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;

        swapTokensForEth(contractBalance - liquidityTokens);

        uint256 ethBalance = address(this).balance;
        uint256 ethForLiquidity = ethBalance;

        uint256 ethForOperations = ethBalance * tokensForOperations / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForDev;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForDev = 0;
        tokensForBurn = 0;

        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success,) = address(devAddress).call{value: ethForDev}("");

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

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function setOperationsAddress(address _operationsAddress) external onlyOwner {
        require(_operationsAddress != address(0), "_operationsAddress address cannot be 0");
        operationsAddress = payable(_operationsAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner {
        require(_devAddress != address(0), "_devAddress address cannot be 0");
        devAddress = payable(_devAddress);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"recepient","type":"address"},{"internalType":"address","name":"consumer","type":"address"}],"name":"buyBackTokensToRecipient","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"massManageBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnToNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDustTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600e556011805462ffffff191660019081179091556013805460ff191690911790553480156200003557600080fd5b506040518060400160405280600b81526020016a436861647320556e69746560a81b8152506040518060400160405280601081526020016f28e2968020c4b9ccafe296802020202960801b8152508160039081620000949190620008ac565b506004620000a38282620008ac565b5050506000620000b8620004a460201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206200474b833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291600091839163c45a01559160048083019260209291908290030181865afa15801562000161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000187919062000978565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fb919062000978565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000978565b600a80546001600160a01b0319166001600160a01b0383169081179091559091506200029d906001620004a8565b600a54620002b6906001600160a01b031660016200050b565b6a52b7d2dcc80cd2e40000006064620002d1826004620009c0565b620002dd9190620009e0565b6006556064620002ef826004620009c0565b620002fb9190620009e0565b60075560646200030d826004620009c0565b620003199190620009e0565b6008556127106200032c826005620009c0565b620003389190620009e0565b600b5560006015819055601681905560178190556018819055806200035e818062000a03565b6200036a919062000a03565b62000376919062000a03565b6014556000601a819055601b819055601c819055601d819055806200039c818062000a03565b620003a8919062000a03565b620003b4919062000a03565b601955600c80546001600160a01b031990811673d0c710c87687a1784c5468228c6d66b0b715631d17909155600d8054909116735b0666e04ce9a96512be339cf2cf40b5242f61f91790556200040c846001620004a8565b62000419306001620004a8565b6200042861dead6001620004a8565b600c5462000441906001600160a01b03166001620004a8565b6200044e84600162000577565b6200045b30600162000577565b6200046a61dead600162000577565b600c5462000483906001600160a01b0316600162000577565b6200048f848262000625565b6200049a846200070a565b5050505062000a19565b3390565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602460205260409020805460ff19168215151790556200053b8282620004a8565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005c65760405162461bcd60e51b815260206004820181905260248201526000805160206200472b83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200067d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620005bd565b806002600082825462000691919062000a03565b90915550506001600160a01b03821660009081526020819052604081208054839290620006c090849062000a03565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620007555760405162461bcd60e51b815260206004820181905260248201526000805160206200472b8339815191526044820152606401620005bd565b6001600160a01b038116620007bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005bd565b6005546040516001600160a01b038084169216906000805160206200474b83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200083257607f821691505b6020821081036200085357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008a757600081815260208120601f850160051c81016020861015620008825750805b601f850160051c820191505b81811015620008a3578281556001016200088e565b5050505b505050565b81516001600160401b03811115620008c857620008c862000807565b620008e081620008d984546200081d565b8462000859565b602080601f831160018114620009185760008415620008ff5750858301515b600019600386901b1c1916600185901b178555620008a3565b600085815260208120601f198616915b82811015620009495788860151825594840194600190910190840162000928565b5085821015620009685787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200098b57600080fd5b81516001600160a01b0381168114620009a357600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620009da57620009da620009aa565b92915050565b600082620009fe57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620009da57620009da620009aa565b613d028062000a296000396000f3fe6080604052600436106103f35760003560e01c80638da5cb5b11610208578063d506d3fe11610118578063e800dff7116100ab578063f11a24d31161007a578063f11a24d314610b3c578063f2fde38b14610b52578063f637434214610b72578063f9f17d2a14610b88578063fb002c9714610b9b57600080fd5b8063e800dff714610ad1578063e884f26014610af1578063ea4cfe1214610b06578063ee40166e14610b2657600080fd5b8063e2cd5fcd116100e7578063e2cd5fcd14610a70578063e2f4560514610a85578063e71dc3f514610a9b578063e7ad9fcd14610ab157600080fd5b8063d506d3fe146109ec578063d85ba063146109f4578063dc3f0d0f14610a0a578063dd62ed3e14610a2a57600080fd5b8063aa4bde281161019b578063c02466681161016a578063c024666814610952578063c18bc19514610972578063c876d0b914610992578063d0d41fe1146109ac578063d257b34f146109cc57600080fd5b8063aa4bde28146108d7578063adb873bd146108ed578063b62496f514610903578063bbc0c7421461093357600080fd5b80639fccce32116101d75780639fccce321461086b578063a0d82dc514610881578063a457c2d714610897578063a9059cbb146108b757600080fd5b80638da5cb5b1461080257806395d89b41146108205780639a7a23d6146108355780639c3b4fdc1461085557600080fd5b8063499b8394116103035780636ddd1713116102965780637571336a116102655780637571336a146107675780638366e79a1461078757806385ecfd28146107a757806388e765ff146107d75780638a8c523c146107ed57600080fd5b80636ddd1713146106fd57806370a082311461071d578063715018a61461073d578063751039fc1461075257600080fd5b80635a139dd4116102d25780635a139dd4146106a557806366d602ae146106bb5780636a486a8e146106d15780636b0a894c146106e757600080fd5b8063499b8394146106405780634a62bb65146106605780634f77f6c01461067a57806351f205e41461069057600080fd5b80631eaf196e116103865780632e6ed7ef116103555780632e6ed7ef146105a4578063313ce567146105c457806339509351146105e05780633ad10ef614610600578063452ed4f11461062057600080fd5b80631eaf196e1461052f5780632307b4411461054457806323b872dd146105645780632be32b611461058457600080fd5b8063130a2c3c116103c2578063130a2c3c146104c257806318160ddd146104e45780631a8145bb146105035780631d7778561461051957600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806310d5de531461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610bb1565b60405161042191906135ad565b60405180910390f35b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d366004613610565b610c43565b6040519015158152602001610421565b34801561049e57600080fd5b506104826104ad36600461363c565b60236020526000908152604090205460ff1681565b3480156104ce57600080fd5b506104e26104dd36600461366e565b610c5a565b005b3480156104f057600080fd5b506002545b604051908152602001610421565b34801561050f57600080fd5b506104f5601f5481565b34801561052557600080fd5b506104f560215481565b34801561053b57600080fd5b506104e2610d04565b34801561055057600080fd5b506104e261055f3660046137ca565b610d57565b34801561057057600080fd5b5061048261057f36600461388c565b610eb0565b34801561059057600080fd5b506104e261059f3660046138cd565b610f5a565b3480156105b057600080fd5b506104e26105bf3660046138e6565b611067565b3480156105d057600080fd5b5060405160128152602001610421565b3480156105ec57600080fd5b506104826105fb366004613610565b6110ea565b34801561060c57600080fd5b50600d5461044a906001600160a01b031681565b34801561062c57600080fd5b50600a5461044a906001600160a01b031681565b34801561064c57600080fd5b506104e261065b36600461363c565b611126565b34801561066c57600080fd5b506011546104829060ff1681565b34801561068657600080fd5b506104f5601a5481565b34801561069c57600080fd5b506104e26111d7565b3480156106b157600080fd5b506104f560155481565b3480156106c757600080fd5b506104f560075481565b3480156106dd57600080fd5b506104f560195481565b3480156106f357600080fd5b506104f560105481565b34801561070957600080fd5b506011546104829062010000900460ff1681565b34801561072957600080fd5b506104f561073836600461363c565b6112e0565b34801561074957600080fd5b506104e26112fb565b34801561075e57600080fd5b506104e261136f565b34801561077357600080fd5b506104e2610782366004613918565b6113da565b34801561079357600080fd5b506104826107a2366004613951565b6114a2565b3480156107b357600080fd5b506104826107c236600461363c565b600f6020526000908152604090205460ff1681565b3480156107e357600080fd5b506104f560065481565b3480156107f957600080fd5b506104e26116ab565b34801561080e57600080fd5b506005546001600160a01b031661044a565b34801561082c57600080fd5b5061041461176d565b34801561084157600080fd5b506104e2610850366004613918565b61177c565b34801561086157600080fd5b506104f560175481565b34801561087757600080fd5b506104f560205481565b34801561088d57600080fd5b506104f5601c5481565b3480156108a357600080fd5b506104826108b2366004613610565b611870565b3480156108c357600080fd5b506104826108d2366004613610565b611909565b3480156108e357600080fd5b506104f560085481565b3480156108f957600080fd5b506104f5601d5481565b34801561090f57600080fd5b5061048261091e36600461363c565b60246020526000908152604090205460ff1681565b34801561093f57600080fd5b5060115461048290610100900460ff1681565b34801561095e57600080fd5b506104e261096d366004613918565b611916565b34801561097e57600080fd5b506104e261098d3660046138cd565b61199f565b34801561099e57600080fd5b506013546104829060ff1681565b3480156109b857600080fd5b506104e26109c736600461363c565b611aa8565b3480156109d857600080fd5b506104e26109e73660046138cd565b611b4a565b6104e2611c95565b348015610a0057600080fd5b506104f560145481565b348015610a1657600080fd5b506104e2610a253660046138cd565b611ed5565b348015610a3657600080fd5b506104f5610a45366004613951565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a7c57600080fd5b506104e2611fdc565b348015610a9157600080fd5b506104f5600b5481565b348015610aa757600080fd5b506104f560185481565b348015610abd57600080fd5b506104e2610acc3660046138e6565b6120f6565b348015610add57600080fd5b506104e2610aec366004613918565b612179565b348015610afd57600080fd5b506104e26121ce565b348015610b1257600080fd5b50600c5461044a906001600160a01b031681565b348015610b3257600080fd5b506104f5600e5481565b348015610b4857600080fd5b506104f560165481565b348015610b5e57600080fd5b506104e2610b6d36600461363c565b612204565b348015610b7e57600080fd5b506104f5601b5481565b6104e2610b96366004613951565b6122ef565b348015610ba757600080fd5b506104f5601e5481565b606060038054610bc09061397f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec9061397f565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b5050505050905090565b6000610c503384846124c8565b5060015b92915050565b6005546001600160a01b03163314610c8d5760405162461bcd60e51b8152600401610c84906139b9565b60405180910390fd5b60005b82811015610cfe5781600f6000868685818110610caf57610caf6139ee565b9050602002016020810190610cc4919061363c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610cf681613a1a565b915050610c90565b50505050565b600c546001600160a01b03163314610d2e5760405162461bcd60e51b8152600401610c8490613a33565b6000610d39306112e0565b600c54909150610d549030906001600160a01b0316836125ed565b50565b6005546001600160a01b03163314610d815760405162461bcd60e51b8152600401610c84906139b9565b8051825114610dd25760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c84565b610258825110610e435760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c84565b60005b8251811015610eab576000838281518110610e6357610e636139ee565b602002602001015190506000838381518110610e8157610e816139ee565b60200260200101519050610e963383836125ed565b50508080610ea390613a1a565b915050610e46565b505050565b6000610ebd848484612742565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f425760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c84565b610f4f85338584036124c8565b506001949350505050565b6005546001600160a01b03163314610f845760405162461bcd60e51b8152600401610c84906139b9565b670de0b6b3a76400006103e8610f9960025490565b610fa4906002613a78565b610fae9190613a8f565b610fb89190613a8f565b8110156110195760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c84565b61102b81670de0b6b3a7640000613a78565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146110915760405162461bcd60e51b8152600401610c84906139b9565b601584905560168390556017829055601881905580826110b18587613ab1565b6110bb9190613ab1565b6110c59190613ab1565b6014819055601e1015610cfe5760405162461bcd60e51b8152600401610c8490613ac4565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c50918590611121908690613ab1565b6124c8565b6005546001600160a01b031633146111505760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b0381166111b55760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c84565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112015760405162461bcd60e51b8152600401610c84906139b9565b600b5461120d306112e0565b1015611283576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c84565b600a805460ff60a01b1916600160a01b17905561129e612faf565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113255760405162461bcd60e51b8152600401610c84906139b9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113995760405162461bcd60e51b8152600401610c84906139b9565b6011805460ff199081169091556013805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114045760405162461bcd60e51b8152600401610c84906139b9565b8061147757600a546001600160a01b03908116908316036114775760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c84565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146114cf5760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b0383166115255760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c84565b306001600160a01b0384160361157d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c84565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e89190613afb565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561163b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165f9190613b14565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116d55760405162461bcd60e51b8152600401610c84906139b9565b601154610100900460ff161561172d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c84565b6011805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bc09061397f565b6005546001600160a01b031633146117a65760405162461bcd60e51b8152600401610c84906139b9565b600a546001600160a01b039081169083160361182a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c84565b61183482826131e6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c84565b6118ff33858584036124c8565b5060019392505050565b6000610c50338484612742565b6005546001600160a01b031633146119405760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119c95760405162461bcd60e51b8152600401610c84906139b9565b670de0b6b3a76400006103e86119de60025490565b6119e9906003613a78565b6119f39190613a8f565b6119fd9190613a8f565b811015611a615760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c84565b611a7381670de0b6b3a7640000613a78565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161105c565b6005546001600160a01b03163314611ad25760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b038116611b285760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c84565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b745760405162461bcd60e51b8152600401610c84906139b9565b620186a0611b8160025490565b611b8c906001613a78565b611b969190613a8f565b811015611c035760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c84565b6103e8611c0f60025490565b611c1a906001613a78565b611c249190613a8f565b811115611c905760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c84565b600b55565b3466071afd498d0000811015611ced5760405162461bcd60e51b815260206004820181905260248201527f6c657373207468616e2064656661756c74206275796261636b20616d6f756e746044820152606401610c84565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7b9190613b31565b81600081518110611d8e57611d8e6139ee565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611dc257611dc26139ee565b6001600160a01b039283166020918202929092010152600c54600091611de891166112e0565b600954600c5460405163b6f9de9560e01b81529293506001600160a01b039182169263b6f9de95928792611e2792600092899216904290600401613b92565b6000604051808303818588803b158015611e4057600080fd5b505af1158015611e54573d6000803e3d6000fd5b5050600c5460009350611e7292506001600160a01b031690506112e0565b905081811115611e9c57600c54611e9c906001600160a01b031630611e978585613bc7565b6125ed565b6040518481527fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205689060200160405180910390a150505050565b6005546001600160a01b03163314611eff5760405162461bcd60e51b8152600401610c84906139b9565b670de0b6b3a76400006103e8611f1460025490565b611f1f906002613a78565b611f299190613a8f565b611f339190613a8f565b811015611f955760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c84565b611fa781670de0b6b3a7640000613a78565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161105c565b6005546001600160a01b031633146120065760405162461bcd60e51b8152600401610c84906139b9565b6014601a8190556000601b819055601c819055601d81905590819061202c908290613ab1565b6120369190613ab1565b6120409190613ab1565b6019819055601e10156120655760405162461bcd60e51b8152600401610c8490613ac4565b600a6015819055600060168190556017819055601881905590819061208b908290613ab1565b6120959190613ab1565b61209f9190613ab1565b6014819055600f10156120f45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c84565b565b6005546001600160a01b031633146121205760405162461bcd60e51b8152600401610c84906139b9565b601a849055601b839055601c829055601d81905580826121408587613ab1565b61214a9190613ab1565b6121549190613ab1565b6019819055601e1015610cfe5760405162461bcd60e51b8152600401610c8490613ac4565b6005546001600160a01b031633146121a35760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146121f85760405162461bcd60e51b8152600401610c84906139b9565b6013805460ff19169055565b6005546001600160a01b0316331461222e5760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b0381166122935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c84565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146123195760405162461bcd60e51b8152600401610c8490613a33565b604080516002808252606082018352349260009291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190613b31565b816000815181106123be576123be6139ee565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106123f2576123f26139ee565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906124389060009086908a904290600401613b92565b6000604051808303818588803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b50505050506000612475856112e0565b905061248e8585611e97670de0b6b3a764000085613bc7565b6040518381527fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205689060200160405180910390a15050505050565b6001600160a01b03831661252a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c84565b6001600160a01b03821661258b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c84565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166126135760405162461bcd60e51b8152600401610c8490613bda565b6001600160a01b0382166126395760405162461bcd60e51b8152600401610c8490613c1f565b6001600160a01b038316600090815260208190526040902054818110156126b15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c84565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906126e8908490613ab1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273491815260200190565b60405180910390a350505050565b6001600160a01b0383166127685760405162461bcd60e51b8152600401610c8490613bda565b6001600160a01b03821661278e5760405162461bcd60e51b8152600401610c8490613c1f565b600081116127de5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c84565b601154610100900460ff16612871576001600160a01b03831660009081526022602052604090205460ff168061282c57506001600160a01b03821660009081526022602052604090205460ff165b6128715760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c84565b60115460ff1615612c2e576005546001600160a01b038481169116148015906128a857506005546001600160a01b03838116911614155b80156128bc57506001600160a01b03821615155b80156128d357506001600160a01b03821661dead14155b80156128f857506001600160a01b03831660009081526022602052604090205460ff16155b801561291d57506001600160a01b03821660009081526022602052604090205460ff16155b15612c2e5760135460ff16156129f7576009546001600160a01b038381169116148015906129595750600a546001600160a01b03838116911614155b156129f757612969600243613bc7565b32600090815260126020526040902054106129e45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c84565b3260009081526012602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015612a3857506001600160a01b03821660009081526023602052604090205460ff16155b15612b0457600654811115612aa05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c84565b600854612aac836112e0565b612ab69083613ab1565b1115612aff5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c84565b612c2e565b6001600160a01b03821660009081526024602052604090205460ff168015612b4557506001600160a01b03831660009081526023602052604090205460ff16155b15612baf57600754811115612aff5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c84565b6001600160a01b03821660009081526023602052604090205460ff16612c2e57600854612bdb836112e0565b612be59083613ab1565b1115612c2e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c84565b6000612c39306112e0565b600b5490915081108015908190612c58575060115462010000900460ff165b8015612c6e5750600a54600160a01b900460ff16155b8015612c9357506001600160a01b03851660009081526024602052604090205460ff16155b8015612cb857506001600160a01b03851660009081526022602052604090205460ff16155b8015612cdd57506001600160a01b03841660009081526022602052604090205460ff16155b15612d0b57600a805460ff60a01b1916600160a01b179055612cfd612faf565b600a805460ff60a01b191690555b6001600160a01b03851660009081526022602052604090205460019060ff1680612d4d57506001600160a01b03851660009081526022602052604090205460ff165b15612d56575060005b60008115612f9b576001600160a01b03861660009081526024602052604090205460ff168015612d8857506000601954115b15612e7057606460195486612d9d9190613a78565b612da79190613a8f565b9050601954601b5482612dba9190613a78565b612dc49190613a8f565b601f6000828254612dd59190613ab1565b9091555050601954601a54612dea9083613a78565b612df49190613a8f565b601e6000828254612e059190613ab1565b9091555050601954601c54612e1a9083613a78565b612e249190613a8f565b60206000828254612e359190613ab1565b9091555050601954601d54612e4a9083613a78565b612e549190613a8f565b60216000828254612e659190613ab1565b90915550612f7d9050565b6001600160a01b03871660009081526024602052604090205460ff168015612e9a57506000601454115b15612f7d57606460145486612eaf9190613a78565b612eb99190613a8f565b905060145460165482612ecc9190613a78565b612ed69190613a8f565b601f6000828254612ee79190613ab1565b9091555050601454601554612efc9083613a78565b612f069190613a8f565b601e6000828254612f179190613ab1565b9091555050601454601754612f2c9083613a78565b612f369190613a8f565b60206000828254612f479190613ab1565b9091555050601454601854612f5c9083613a78565b612f669190613a8f565b60216000828254612f779190613ab1565b90915550505b8015612f8e57612f8e8730836125ed565b612f988186613bc7565b94505b612fa68787876125ed565b50505050505050565b6000602154118015612fcb5750602154612fc8306112e0565b10155b15612fdc57612fdc30602154613214565b60006021819055612fec306112e0565b90506000602054601e54601f546130039190613ab1565b61300d9190613ab1565b90508160000361301b575050565b600b54613029906014613a78565b82111561304157600b5461303e906014613a78565b91505b600080600283601f54866130559190613a78565b61305f9190613a8f565b6130699190613a8f565b905061307d6130788286613bc7565b61333e565b601f544790819060009061309390600290613a8f565b61309d9087613bc7565b601e546130aa9085613a78565b6130b49190613a8f565b905060006002601f546130c79190613a8f565b6130d19088613bc7565b6020546130de9086613a78565b6130e89190613a8f565b90506130f48183613ab1565b6130fe9084613bc7565b6000601f819055601e8190556020819055602155925084158015906131235750600083115b15613132576131328584613498565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461317f576040519150601f19603f3d011682016040523d82523d6000602084013e613184565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146131d4576040519150601f19603f3d011682016040523d82523d6000602084013e6131d9565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602460205260409020805460ff1916821515179055611834828261354a565b6001600160a01b0382166132745760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c84565b6001600160a01b038216600090815260208190526040902054818110156132e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c84565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016125e0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613373576133736139ee565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f09190613b31565b81600181518110613403576134036139ee565b6001600160a01b03928316602091820292909201015260095461342991309116846124c8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613462908590600090869030904290600401613c62565b600060405180830381600087803b15801561347c57600080fd5b505af1158015613490573d6000803e3d6000fd5b505050505050565b6009546134b09030906001600160a01b0316846124c8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561351e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135439190613c9e565b5050505050565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156135da578581018301518582016040015282016135be565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d5457600080fd5b6000806040838503121561362357600080fd5b823561362e816135fb565b946020939093013593505050565b60006020828403121561364e57600080fd5b8135613659816135fb565b9392505050565b8015158114610d5457600080fd5b60008060006040848603121561368357600080fd5b833567ffffffffffffffff8082111561369b57600080fd5b818601915086601f8301126136af57600080fd5b8135818111156136be57600080fd5b8760208260051b85010111156136d357600080fd5b602092830195509350508401356136e981613660565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613733576137336136f4565b604052919050565b600067ffffffffffffffff821115613755576137556136f4565b5060051b60200190565b600082601f83011261377057600080fd5b813560206137856137808361373b565b61370a565b82815260059290921b840181019181810190868411156137a457600080fd5b8286015b848110156137bf57803583529183019183016137a8565b509695505050505050565b600080604083850312156137dd57600080fd5b823567ffffffffffffffff808211156137f557600080fd5b818501915085601f83011261380957600080fd5b813560206138196137808361373b565b82815260059290921b8401810191818101908984111561383857600080fd5b948201945b8386101561385f578535613850816135fb565b8252948201949082019061383d565b9650508601359250508082111561387557600080fd5b506138828582860161375f565b9150509250929050565b6000806000606084860312156138a157600080fd5b83356138ac816135fb565b925060208401356138bc816135fb565b929592945050506040919091013590565b6000602082840312156138df57600080fd5b5035919050565b600080600080608085870312156138fc57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561392b57600080fd5b8235613936816135fb565b9150602083013561394681613660565b809150509250929050565b6000806040838503121561396457600080fd5b823561396f816135fb565b91506020830135613946816135fb565b600181811c9082168061399357607f821691505b6020821081036139b357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613a2c57613a2c613a04565b5060010190565b60208082526025908201527f4f6e6c79204f7065726174696f6e2063616e2063616c6c20746869732066756e60408201526431ba34b7b760d91b606082015260800190565b8082028115828204841417610c5457610c54613a04565b600082613aac57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5457610c54613a04565b6020808252601d908201527f4d757374206b656570206665657320617420333025206f72206c657373000000604082015260600190565b600060208284031215613b0d57600080fd5b5051919050565b600060208284031215613b2657600080fd5b815161365981613660565b600060208284031215613b4357600080fd5b8151613659816135fb565b600081518084526020808501945080840160005b83811015613b875781516001600160a01b031687529582019590820190600101613b62565b509495945050505050565b848152608060208201526000613bab6080830186613b4e565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610c5457610c54613a04565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a060408201526000613c8160a0830186613b4e565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613cb357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f90b8558fd452a2c642bcbb87f3b48fc0bf64214062712203b1d7370e907a5f964736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103f35760003560e01c80638da5cb5b11610208578063d506d3fe11610118578063e800dff7116100ab578063f11a24d31161007a578063f11a24d314610b3c578063f2fde38b14610b52578063f637434214610b72578063f9f17d2a14610b88578063fb002c9714610b9b57600080fd5b8063e800dff714610ad1578063e884f26014610af1578063ea4cfe1214610b06578063ee40166e14610b2657600080fd5b8063e2cd5fcd116100e7578063e2cd5fcd14610a70578063e2f4560514610a85578063e71dc3f514610a9b578063e7ad9fcd14610ab157600080fd5b8063d506d3fe146109ec578063d85ba063146109f4578063dc3f0d0f14610a0a578063dd62ed3e14610a2a57600080fd5b8063aa4bde281161019b578063c02466681161016a578063c024666814610952578063c18bc19514610972578063c876d0b914610992578063d0d41fe1146109ac578063d257b34f146109cc57600080fd5b8063aa4bde28146108d7578063adb873bd146108ed578063b62496f514610903578063bbc0c7421461093357600080fd5b80639fccce32116101d75780639fccce321461086b578063a0d82dc514610881578063a457c2d714610897578063a9059cbb146108b757600080fd5b80638da5cb5b1461080257806395d89b41146108205780639a7a23d6146108355780639c3b4fdc1461085557600080fd5b8063499b8394116103035780636ddd1713116102965780637571336a116102655780637571336a146107675780638366e79a1461078757806385ecfd28146107a757806388e765ff146107d75780638a8c523c146107ed57600080fd5b80636ddd1713146106fd57806370a082311461071d578063715018a61461073d578063751039fc1461075257600080fd5b80635a139dd4116102d25780635a139dd4146106a557806366d602ae146106bb5780636a486a8e146106d15780636b0a894c146106e757600080fd5b8063499b8394146106405780634a62bb65146106605780634f77f6c01461067a57806351f205e41461069057600080fd5b80631eaf196e116103865780632e6ed7ef116103555780632e6ed7ef146105a4578063313ce567146105c457806339509351146105e05780633ad10ef614610600578063452ed4f11461062057600080fd5b80631eaf196e1461052f5780632307b4411461054457806323b872dd146105645780632be32b611461058457600080fd5b8063130a2c3c116103c2578063130a2c3c146104c257806318160ddd146104e45780631a8145bb146105035780631d7778561461051957600080fd5b806306fdde03146103ff5780630758d9241461042a578063095ea7b31461046257806310d5de531461049257600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610bb1565b60405161042191906135ad565b60405180910390f35b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b039091168152602001610421565b34801561046e57600080fd5b5061048261047d366004613610565b610c43565b6040519015158152602001610421565b34801561049e57600080fd5b506104826104ad36600461363c565b60236020526000908152604090205460ff1681565b3480156104ce57600080fd5b506104e26104dd36600461366e565b610c5a565b005b3480156104f057600080fd5b506002545b604051908152602001610421565b34801561050f57600080fd5b506104f5601f5481565b34801561052557600080fd5b506104f560215481565b34801561053b57600080fd5b506104e2610d04565b34801561055057600080fd5b506104e261055f3660046137ca565b610d57565b34801561057057600080fd5b5061048261057f36600461388c565b610eb0565b34801561059057600080fd5b506104e261059f3660046138cd565b610f5a565b3480156105b057600080fd5b506104e26105bf3660046138e6565b611067565b3480156105d057600080fd5b5060405160128152602001610421565b3480156105ec57600080fd5b506104826105fb366004613610565b6110ea565b34801561060c57600080fd5b50600d5461044a906001600160a01b031681565b34801561062c57600080fd5b50600a5461044a906001600160a01b031681565b34801561064c57600080fd5b506104e261065b36600461363c565b611126565b34801561066c57600080fd5b506011546104829060ff1681565b34801561068657600080fd5b506104f5601a5481565b34801561069c57600080fd5b506104e26111d7565b3480156106b157600080fd5b506104f560155481565b3480156106c757600080fd5b506104f560075481565b3480156106dd57600080fd5b506104f560195481565b3480156106f357600080fd5b506104f560105481565b34801561070957600080fd5b506011546104829062010000900460ff1681565b34801561072957600080fd5b506104f561073836600461363c565b6112e0565b34801561074957600080fd5b506104e26112fb565b34801561075e57600080fd5b506104e261136f565b34801561077357600080fd5b506104e2610782366004613918565b6113da565b34801561079357600080fd5b506104826107a2366004613951565b6114a2565b3480156107b357600080fd5b506104826107c236600461363c565b600f6020526000908152604090205460ff1681565b3480156107e357600080fd5b506104f560065481565b3480156107f957600080fd5b506104e26116ab565b34801561080e57600080fd5b506005546001600160a01b031661044a565b34801561082c57600080fd5b5061041461176d565b34801561084157600080fd5b506104e2610850366004613918565b61177c565b34801561086157600080fd5b506104f560175481565b34801561087757600080fd5b506104f560205481565b34801561088d57600080fd5b506104f5601c5481565b3480156108a357600080fd5b506104826108b2366004613610565b611870565b3480156108c357600080fd5b506104826108d2366004613610565b611909565b3480156108e357600080fd5b506104f560085481565b3480156108f957600080fd5b506104f5601d5481565b34801561090f57600080fd5b5061048261091e36600461363c565b60246020526000908152604090205460ff1681565b34801561093f57600080fd5b5060115461048290610100900460ff1681565b34801561095e57600080fd5b506104e261096d366004613918565b611916565b34801561097e57600080fd5b506104e261098d3660046138cd565b61199f565b34801561099e57600080fd5b506013546104829060ff1681565b3480156109b857600080fd5b506104e26109c736600461363c565b611aa8565b3480156109d857600080fd5b506104e26109e73660046138cd565b611b4a565b6104e2611c95565b348015610a0057600080fd5b506104f560145481565b348015610a1657600080fd5b506104e2610a253660046138cd565b611ed5565b348015610a3657600080fd5b506104f5610a45366004613951565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a7c57600080fd5b506104e2611fdc565b348015610a9157600080fd5b506104f5600b5481565b348015610aa757600080fd5b506104f560185481565b348015610abd57600080fd5b506104e2610acc3660046138e6565b6120f6565b348015610add57600080fd5b506104e2610aec366004613918565b612179565b348015610afd57600080fd5b506104e26121ce565b348015610b1257600080fd5b50600c5461044a906001600160a01b031681565b348015610b3257600080fd5b506104f5600e5481565b348015610b4857600080fd5b506104f560165481565b348015610b5e57600080fd5b506104e2610b6d36600461363c565b612204565b348015610b7e57600080fd5b506104f5601b5481565b6104e2610b96366004613951565b6122ef565b348015610ba757600080fd5b506104f5601e5481565b606060038054610bc09061397f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec9061397f565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b5050505050905090565b6000610c503384846124c8565b5060015b92915050565b6005546001600160a01b03163314610c8d5760405162461bcd60e51b8152600401610c84906139b9565b60405180910390fd5b60005b82811015610cfe5781600f6000868685818110610caf57610caf6139ee565b9050602002016020810190610cc4919061363c565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610cf681613a1a565b915050610c90565b50505050565b600c546001600160a01b03163314610d2e5760405162461bcd60e51b8152600401610c8490613a33565b6000610d39306112e0565b600c54909150610d549030906001600160a01b0316836125ed565b50565b6005546001600160a01b03163314610d815760405162461bcd60e51b8152600401610c84906139b9565b8051825114610dd25760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c84565b610258825110610e435760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c84565b60005b8251811015610eab576000838281518110610e6357610e636139ee565b602002602001015190506000838381518110610e8157610e816139ee565b60200260200101519050610e963383836125ed565b50508080610ea390613a1a565b915050610e46565b505050565b6000610ebd848484612742565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f425760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c84565b610f4f85338584036124c8565b506001949350505050565b6005546001600160a01b03163314610f845760405162461bcd60e51b8152600401610c84906139b9565b670de0b6b3a76400006103e8610f9960025490565b610fa4906002613a78565b610fae9190613a8f565b610fb89190613a8f565b8110156110195760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e322560b81b6064820152608401610c84565b61102b81670de0b6b3a7640000613a78565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b031633146110915760405162461bcd60e51b8152600401610c84906139b9565b601584905560168390556017829055601881905580826110b18587613ab1565b6110bb9190613ab1565b6110c59190613ab1565b6014819055601e1015610cfe5760405162461bcd60e51b8152600401610c8490613ac4565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c50918590611121908690613ab1565b6124c8565b6005546001600160a01b031633146111505760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b0381166111b55760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610c84565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112015760405162461bcd60e51b8152600401610c84906139b9565b600b5461120d306112e0565b1015611283576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610c84565b600a805460ff60a01b1916600160a01b17905561129e612faf565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113255760405162461bcd60e51b8152600401610c84906139b9565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146113995760405162461bcd60e51b8152600401610c84906139b9565b6011805460ff199081169091556013805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146114045760405162461bcd60e51b8152600401610c84906139b9565b8061147757600a546001600160a01b03908116908316036114775760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610c84565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546000906001600160a01b031633146114cf5760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b0383166115255760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c84565b306001600160a01b0384160361157d5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c84565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156115c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e89190613afb565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561163b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165f9190613b14565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b031633146116d55760405162461bcd60e51b8152600401610c84906139b9565b601154610100900460ff161561172d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610c84565b6011805462ffff0019166201010017905543600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b606060048054610bc09061397f565b6005546001600160a01b031633146117a65760405162461bcd60e51b8152600401610c84906139b9565b600a546001600160a01b039081169083160361182a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c84565b61183482826131e6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118f25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c84565b6118ff33858584036124c8565b5060019392505050565b6000610c50338484612742565b6005546001600160a01b031633146119405760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119c95760405162461bcd60e51b8152600401610c84906139b9565b670de0b6b3a76400006103e86119de60025490565b6119e9906003613a78565b6119f39190613a8f565b6119fd9190613a8f565b811015611a615760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610c84565b611a7381670de0b6b3a7640000613a78565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161105c565b6005546001600160a01b03163314611ad25760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b038116611b285760405162461bcd60e51b815260206004820152601f60248201527f5f6465764164647265737320616464726573732063616e6e6f742062652030006044820152606401610c84565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611b745760405162461bcd60e51b8152600401610c84906139b9565b620186a0611b8160025490565b611b8c906001613a78565b611b969190613a8f565b811015611c035760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c84565b6103e8611c0f60025490565b611c1a906001613a78565b611c249190613a8f565b811115611c905760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610c84565b600b55565b3466071afd498d0000811015611ced5760405162461bcd60e51b815260206004820181905260248201527f6c657373207468616e2064656661756c74206275796261636b20616d6f756e746044820152606401610c84565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611d57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7b9190613b31565b81600081518110611d8e57611d8e6139ee565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611dc257611dc26139ee565b6001600160a01b039283166020918202929092010152600c54600091611de891166112e0565b600954600c5460405163b6f9de9560e01b81529293506001600160a01b039182169263b6f9de95928792611e2792600092899216904290600401613b92565b6000604051808303818588803b158015611e4057600080fd5b505af1158015611e54573d6000803e3d6000fd5b5050600c5460009350611e7292506001600160a01b031690506112e0565b905081811115611e9c57600c54611e9c906001600160a01b031630611e978585613bc7565b6125ed565b6040518481527fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205689060200160405180910390a150505050565b6005546001600160a01b03163314611eff5760405162461bcd60e51b8152600401610c84906139b9565b670de0b6b3a76400006103e8611f1460025490565b611f1f906002613a78565b611f299190613a8f565b611f339190613a8f565b811015611f955760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e322560b01b6064820152608401610c84565b611fa781670de0b6b3a7640000613a78565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161105c565b6005546001600160a01b031633146120065760405162461bcd60e51b8152600401610c84906139b9565b6014601a8190556000601b819055601c819055601d81905590819061202c908290613ab1565b6120369190613ab1565b6120409190613ab1565b6019819055601e10156120655760405162461bcd60e51b8152600401610c8490613ac4565b600a6015819055600060168190556017819055601881905590819061208b908290613ab1565b6120959190613ab1565b61209f9190613ab1565b6014819055600f10156120f45760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610c84565b565b6005546001600160a01b031633146121205760405162461bcd60e51b8152600401610c84906139b9565b601a849055601b839055601c829055601d81905580826121408587613ab1565b61214a9190613ab1565b6121549190613ab1565b6019819055601e1015610cfe5760405162461bcd60e51b8152600401610c8490613ac4565b6005546001600160a01b031633146121a35760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146121f85760405162461bcd60e51b8152600401610c84906139b9565b6013805460ff19169055565b6005546001600160a01b0316331461222e5760405162461bcd60e51b8152600401610c84906139b9565b6001600160a01b0381166122935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c84565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546001600160a01b031633146123195760405162461bcd60e51b8152600401610c8490613a33565b604080516002808252606082018352349260009291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190613b31565b816000815181106123be576123be6139ee565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106123f2576123f26139ee565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906124389060009086908a904290600401613b92565b6000604051808303818588803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b50505050506000612475856112e0565b905061248e8585611e97670de0b6b3a764000085613bc7565b6040518381527fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205689060200160405180910390a15050505050565b6001600160a01b03831661252a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c84565b6001600160a01b03821661258b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c84565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166126135760405162461bcd60e51b8152600401610c8490613bda565b6001600160a01b0382166126395760405162461bcd60e51b8152600401610c8490613c1f565b6001600160a01b038316600090815260208190526040902054818110156126b15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c84565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906126e8908490613ab1565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161273491815260200190565b60405180910390a350505050565b6001600160a01b0383166127685760405162461bcd60e51b8152600401610c8490613bda565b6001600160a01b03821661278e5760405162461bcd60e51b8152600401610c8490613c1f565b600081116127de5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c84565b601154610100900460ff16612871576001600160a01b03831660009081526022602052604090205460ff168061282c57506001600160a01b03821660009081526022602052604090205460ff165b6128715760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c84565b60115460ff1615612c2e576005546001600160a01b038481169116148015906128a857506005546001600160a01b03838116911614155b80156128bc57506001600160a01b03821615155b80156128d357506001600160a01b03821661dead14155b80156128f857506001600160a01b03831660009081526022602052604090205460ff16155b801561291d57506001600160a01b03821660009081526022602052604090205460ff16155b15612c2e5760135460ff16156129f7576009546001600160a01b038381169116148015906129595750600a546001600160a01b03838116911614155b156129f757612969600243613bc7565b32600090815260126020526040902054106129e45760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610c84565b3260009081526012602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015612a3857506001600160a01b03821660009081526023602052604090205460ff16155b15612b0457600654811115612aa05760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610c84565b600854612aac836112e0565b612ab69083613ab1565b1115612aff5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c84565b612c2e565b6001600160a01b03821660009081526024602052604090205460ff168015612b4557506001600160a01b03831660009081526023602052604090205460ff16155b15612baf57600754811115612aff5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610c84565b6001600160a01b03821660009081526023602052604090205460ff16612c2e57600854612bdb836112e0565b612be59083613ab1565b1115612c2e5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610c84565b6000612c39306112e0565b600b5490915081108015908190612c58575060115462010000900460ff165b8015612c6e5750600a54600160a01b900460ff16155b8015612c9357506001600160a01b03851660009081526024602052604090205460ff16155b8015612cb857506001600160a01b03851660009081526022602052604090205460ff16155b8015612cdd57506001600160a01b03841660009081526022602052604090205460ff16155b15612d0b57600a805460ff60a01b1916600160a01b179055612cfd612faf565b600a805460ff60a01b191690555b6001600160a01b03851660009081526022602052604090205460019060ff1680612d4d57506001600160a01b03851660009081526022602052604090205460ff165b15612d56575060005b60008115612f9b576001600160a01b03861660009081526024602052604090205460ff168015612d8857506000601954115b15612e7057606460195486612d9d9190613a78565b612da79190613a8f565b9050601954601b5482612dba9190613a78565b612dc49190613a8f565b601f6000828254612dd59190613ab1565b9091555050601954601a54612dea9083613a78565b612df49190613a8f565b601e6000828254612e059190613ab1565b9091555050601954601c54612e1a9083613a78565b612e249190613a8f565b60206000828254612e359190613ab1565b9091555050601954601d54612e4a9083613a78565b612e549190613a8f565b60216000828254612e659190613ab1565b90915550612f7d9050565b6001600160a01b03871660009081526024602052604090205460ff168015612e9a57506000601454115b15612f7d57606460145486612eaf9190613a78565b612eb99190613a8f565b905060145460165482612ecc9190613a78565b612ed69190613a8f565b601f6000828254612ee79190613ab1565b9091555050601454601554612efc9083613a78565b612f069190613a8f565b601e6000828254612f179190613ab1565b9091555050601454601754612f2c9083613a78565b612f369190613a8f565b60206000828254612f479190613ab1565b9091555050601454601854612f5c9083613a78565b612f669190613a8f565b60216000828254612f779190613ab1565b90915550505b8015612f8e57612f8e8730836125ed565b612f988186613bc7565b94505b612fa68787876125ed565b50505050505050565b6000602154118015612fcb5750602154612fc8306112e0565b10155b15612fdc57612fdc30602154613214565b60006021819055612fec306112e0565b90506000602054601e54601f546130039190613ab1565b61300d9190613ab1565b90508160000361301b575050565b600b54613029906014613a78565b82111561304157600b5461303e906014613a78565b91505b600080600283601f54866130559190613a78565b61305f9190613a8f565b6130699190613a8f565b905061307d6130788286613bc7565b61333e565b601f544790819060009061309390600290613a8f565b61309d9087613bc7565b601e546130aa9085613a78565b6130b49190613a8f565b905060006002601f546130c79190613a8f565b6130d19088613bc7565b6020546130de9086613a78565b6130e89190613a8f565b90506130f48183613ab1565b6130fe9084613bc7565b6000601f819055601e8190556020819055602155925084158015906131235750600083115b15613132576131328584613498565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461317f576040519150601f19603f3d011682016040523d82523d6000602084013e613184565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146131d4576040519150601f19603f3d011682016040523d82523d6000602084013e6131d9565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602460205260409020805460ff1916821515179055611834828261354a565b6001600160a01b0382166132745760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c84565b6001600160a01b038216600090815260208190526040902054818110156132e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c84565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016125e0565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613373576133736139ee565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156133cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f09190613b31565b81600181518110613403576134036139ee565b6001600160a01b03928316602091820292909201015260095461342991309116846124c8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613462908590600090869030904290600401613c62565b600060405180830381600087803b15801561347c57600080fd5b505af1158015613490573d6000803e3d6000fd5b505050505050565b6009546134b09030906001600160a01b0316846124c8565b60095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561351e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135439190613c9e565b5050505050565b6001600160a01b038216600081815260236020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b600060208083528351808285015260005b818110156135da578581018301518582016040015282016135be565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d5457600080fd5b6000806040838503121561362357600080fd5b823561362e816135fb565b946020939093013593505050565b60006020828403121561364e57600080fd5b8135613659816135fb565b9392505050565b8015158114610d5457600080fd5b60008060006040848603121561368357600080fd5b833567ffffffffffffffff8082111561369b57600080fd5b818601915086601f8301126136af57600080fd5b8135818111156136be57600080fd5b8760208260051b85010111156136d357600080fd5b602092830195509350508401356136e981613660565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613733576137336136f4565b604052919050565b600067ffffffffffffffff821115613755576137556136f4565b5060051b60200190565b600082601f83011261377057600080fd5b813560206137856137808361373b565b61370a565b82815260059290921b840181019181810190868411156137a457600080fd5b8286015b848110156137bf57803583529183019183016137a8565b509695505050505050565b600080604083850312156137dd57600080fd5b823567ffffffffffffffff808211156137f557600080fd5b818501915085601f83011261380957600080fd5b813560206138196137808361373b565b82815260059290921b8401810191818101908984111561383857600080fd5b948201945b8386101561385f578535613850816135fb565b8252948201949082019061383d565b9650508601359250508082111561387557600080fd5b506138828582860161375f565b9150509250929050565b6000806000606084860312156138a157600080fd5b83356138ac816135fb565b925060208401356138bc816135fb565b929592945050506040919091013590565b6000602082840312156138df57600080fd5b5035919050565b600080600080608085870312156138fc57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561392b57600080fd5b8235613936816135fb565b9150602083013561394681613660565b809150509250929050565b6000806040838503121561396457600080fd5b823561396f816135fb565b91506020830135613946816135fb565b600181811c9082168061399357607f821691505b6020821081036139b357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613a2c57613a2c613a04565b5060010190565b60208082526025908201527f4f6e6c79204f7065726174696f6e2063616e2063616c6c20746869732066756e60408201526431ba34b7b760d91b606082015260800190565b8082028115828204841417610c5457610c54613a04565b600082613aac57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c5457610c54613a04565b6020808252601d908201527f4d757374206b656570206665657320617420333025206f72206c657373000000604082015260600190565b600060208284031215613b0d57600080fd5b5051919050565b600060208284031215613b2657600080fd5b815161365981613660565b600060208284031215613b4357600080fd5b8151613659816135fb565b600081518084526020808501945080840160005b83811015613b875781516001600160a01b031687529582019590820190600101613b62565b509495945050505050565b848152608060208201526000613bab6080830186613b4e565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610c5457610c54613a04565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b85815284602082015260a060408201526000613c8160a0830186613b4e565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613cb357600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220f90b8558fd452a2c642bcbb87f3b48fc0bf64214062712203b1d7370e907a5f964736f6c63430008110033

Deployed Bytecode Sourcemap

7968:20009:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2924:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8123:27;;;;;;;;;;-1:-1:-1;8123:27:0;;;;-1:-1:-1;;;;;8123:27:0;;;;;;-1:-1:-1;;;;;748:32:1;;;730:51;;718:2;703:18;8123:27:0;567:220:1;3838:169:0;;;;;;;;;;-1:-1:-1;3838:169:0;;;;;:::i;:::-;;:::i;:::-;;;1413:14:1;;1406:22;1388:41;;1376:2;1361:18;3838:169:0;1248:187:1;9485:64:0;;;;;;;;;;-1:-1:-1;9485:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13193:207;;;;;;;;;;-1:-1:-1;13193:207:0;;;;;:::i;:::-;;:::i;:::-;;3245:108;;;;;;;;;;-1:-1:-1;3333:12:0;;3245:108;;;2716:25:1;;;2704:2;2689:18;3245:108:0;2570:177:1;9233:33:0;;;;;;;;;;;;;;;;9307:28;;;;;;;;;;;;;;;;23766:252;;;;;;;;;;;;;:::i;15049:618::-;;;;;;;;;;-1:-1:-1;15049:618:0;;;;;:::i;:::-;;:::i;4015:492::-;;;;;;;;;;-1:-1:-1;4015:492:0;;;;;:::i;:::-;;:::i;13567:269::-;;;;;;;;;;-1:-1:-1;13567:269:0;;;;;:::i;:::-;;:::i;16494:436::-;;;;;;;;;;-1:-1:-1;16494:436:0;;;;;:::i;:::-;;:::i;3144:93::-;;;;;;;;;;-1:-1:-1;3144:93:0;;3227:2;6417:36:1;;6405:2;6390:18;3144:93:0;6275:184:1;4515:215:0;;;;;;;;;;-1:-1:-1;4515:215:0;;;;;:::i;:::-;;:::i;8296:25::-;;;;;;;;;;-1:-1:-1;8296:25:0;;;;-1:-1:-1;;;;;8296:25:0;;;8157:21;;;;;;;;;;-1:-1:-1;8157:21:0;;;;-1:-1:-1;;;;;8157:21:0;;;27168:237;;;;;;;;;;-1:-1:-1;27168:237:0;;;;;:::i;:::-;;:::i;8492:33::-;;;;;;;;;;-1:-1:-1;8492:33:0;;;;;;;;9048:32;;;;;;;;;;;;;;;;27660:312;;;;;;;;;;;;;:::i;8873:31::-;;;;;;;;;;;;;;;;8049:28;;;;;;;;;;;;;;;;9013;;;;;;;;;;;;;;;;8458:25;;;;;;;;;;;;;;;;8572:31;;;;;;;;;;-1:-1:-1;8572:31:0;;;;;;;;;;;3361:127;;;;;;;;;;-1:-1:-1;3361:127:0;;;;;:::i;:::-;;:::i;7559:150::-;;;;;;;;;;;;;:::i;12905:154::-;;;;;;;;;;;;;:::i;15675:260::-;;;;;;;;;;-1:-1:-1;15675:260:0;;;;;:::i;:::-;;:::i;26704:456::-;;;;;;;;;;-1:-1:-1;26704:456:0;;;;;:::i;:::-;;:::i;8407:44::-;;;;;;;;;;-1:-1:-1;8407:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8015:27;;;;;;;;;;;;;;;;12604:249;;;;;;;;;;;;;:::i;7345:79::-;;;;;;;;;;-1:-1:-1;7410:6:0;;-1:-1:-1;;;;;7410:6:0;7345:79;;3032:104;;;;;;;;;;;;;:::i;15943:295::-;;;;;;;;;;-1:-1:-1;15943:295:0;;;;;:::i;:::-;;:::i;8948:24::-;;;;;;;;;;;;;;;;9273:27;;;;;;;;;;;;;;;;9125:25;;;;;;;;;;;;;;;;4738:413;;;;;;;;;;-1:-1:-1;4738:413:0;;;;;:::i;:::-;;:::i;3496:175::-;;;;;;;;;;-1:-1:-1;3496:175:0;;;;;:::i;:::-;;:::i;8084:30::-;;;;;;;;;;;;;;;;9157:26;;;;;;;;;;;;;;;;9707:58;;;;;;;;;;-1:-1:-1;9707:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8532:33;;;;;;;;;;-1:-1:-1;8532:33:0;;;;;;;;;;;18003:182;;;;;;;;;;-1:-1:-1;18003:182:0;;;;;:::i;:::-;;:::i;14126:284::-;;;;;;;;;;-1:-1:-1;14126:284:0;;;;;:::i;:::-;;:::i;8791:39::-;;;;;;;;;;-1:-1:-1;8791:39:0;;;;;;;;27413:195;;;;;;;;;;-1:-1:-1;27413:195:0;;;;;:::i;:::-;;:::i;14480:346::-;;;;;;;;;;-1:-1:-1;14480:346:0;;;;;:::i;:::-;;:::i;22131:854::-;;;:::i;8839:27::-;;;;;;;;;;;;;;;;13844:274;;;;;;;;;;-1:-1:-1;13844:274:0;;;;;:::i;:::-;;:::i;3679:151::-;;;;;;;;;;-1:-1:-1;3679:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3795:18:0;;;3768:7;3795:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3679:151;17393:602;;;;;;;;;;;;;:::i;8215:33::-;;;;;;;;;;;;;;;;8979:25;;;;;;;;;;;;;;;;16938:447;;;;;;;;;;-1:-1:-1;16938:447:0;;;;;:::i;:::-;;:::i;13067:118::-;;;;;;;;;;-1:-1:-1;13067:118:0;;;;;:::i;:::-;;:::i;13461:98::-;;;;;;;;;;;;;:::i;8257:32::-;;;;;;;;;;-1:-1:-1;8257:32:0;;;;-1:-1:-1;;;;;8257:32:0;;;8330:37;;;;;;;;;;;;;;;;8911:30;;;;;;;;;;;;;;;;7717:244;;;;;;;;;;-1:-1:-1;7717:244:0;;;;;:::i;:::-;;:::i;9087:31::-;;;;;;;;;;;;;;;;22993:765;;;;;;:::i;:::-;;:::i;9192:34::-;;;;;;;;;;;;;;;;2924:100;2978:13;3011:5;3004:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2924:100;:::o;3838:169::-;3921:4;3938:39;1306:10;3961:7;3970:6;3938:8;:39::i;:::-;-1:-1:-1;3995:4:0;3838:169;;;;;:::o;13193:207::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;;;;;;;;;13297:9:::1;13293:100;13312:18:::0;;::::1;13293:100;;;13377:4;13351:11;:23;13363:7;;13371:1;13363:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13351:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13351:23:0;:30;;-1:-1:-1;;13351:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13332:3;::::1;::::0;::::1;:::i;:::-;;;;13293:100;;;;13193:207:::0;;;:::o;23766:252::-;23838:17;;-1:-1:-1;;;;;23838:17:0;23824:10;:31;23816:81;;;;-1:-1:-1;;;23816:81:0;;;;;;;:::i;:::-;23908:9;23920:24;23938:4;23920:9;:24::i;:::-;23986:17;;23908:36;;-1:-1:-1;23955:55:0;;23979:4;;-1:-1:-1;;;;;23986:17:0;23908:36;23955:15;:55::i;:::-;23805:213;23766:252::o;15049:618::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;15191:15:::1;:22;15173:7;:14;:40;15165:83;;;::::0;-1:-1:-1;;;15165:83:0;;9210:2:1;15165:83:0::1;::::0;::::1;9192:21:1::0;9249:2;9229:18;;;9222:30;9288:32;9268:18;;;9261:60;9338:18;;15165:83:0::1;9008:354:1::0;15165:83:0::1;15284:3;15267:7;:14;:20;15259:87;;;::::0;-1:-1:-1;;;15259:87:0;;9569:2:1;15259:87:0::1;::::0;::::1;9551:21:1::0;9608:2;9588:18;;;9581:30;9647:34;9627:18;;;9620:62;-1:-1:-1;;;9698:18:1;;;9691:52;9760:19;;15259:87:0::1;9367:418:1::0;15259:87:0::1;15459:9;15455:205;15478:7;:14;15474:1;:18;15455:205;;;15513:14;15530:7;15538:1;15530:10;;;;;;;;:::i;:::-;;;;;;;15513:27;;15555:14;15572:15;15588:1;15572:18;;;;;;;;:::i;:::-;;;;;;;15555:35;;15605:43;15621:10;15633:6;15641;15605:15;:43::i;:::-;15498:162;;15494:3;;;;;:::i;:::-;;;;15455:205;;;;15049:618:::0;;:::o;4015:492::-;4155:4;4172:36;4182:6;4190:9;4201:6;4172:9;:36::i;:::-;-1:-1:-1;;;;;4248:19:0;;4221:24;4248:19;;;:11;:19;;;;;;;;1306:10;4248:33;;;;;;;;4300:26;;;;4292:79;;;;-1:-1:-1;;;4292:79:0;;9992:2:1;4292:79:0;;;9974:21:1;10031:2;10011:18;;;10004:30;10070:34;10050:18;;;10043:62;-1:-1:-1;;;10121:18:1;;;10114:38;10169:19;;4292:79:0;9790:404:1;4292:79:0;4407:57;4416:6;1306:10;4457:6;4438:16;:25;4407:8;:57::i;:::-;-1:-1:-1;4495:4:0;;4015:492;-1:-1:-1;;;;4015:492:0:o;13567:269::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;13686:4:::1;13680;13660:13;3333:12:::0;;;3245:108;13660:13:::1;:17;::::0;13676:1:::1;13660:17;:::i;:::-;:24;;;;:::i;:::-;13659:31;;;;:::i;:::-;13649:6;:41;;13641:95;;;::::0;-1:-1:-1;;;13641:95:0;;10796:2:1;13641:95:0::1;::::0;::::1;10778:21:1::0;10835:2;10815:18;;;10808:30;10874:34;10854:18;;;10847:62;-1:-1:-1;;;10925:18:1;;;10918:39;10974:19;;13641:95:0::1;10594:405:1::0;13641:95:0::1;13762:17;:6:::0;13772::::1;13762:17;:::i;:::-;13747:12;:32:::0;;;13795:33:::1;::::0;2716:25:1;;;13795:33:0::1;::::0;2704:2:1;2689:18;13795:33:0::1;;;;;;;;13567:269:::0;:::o;16494:436::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;16629:16:::1;:33:::0;;;16673:15:::1;:31:::0;;;16715:9:::1;:19:::0;;;16745:10:::1;:21:::0;;;16758:8;16727:7;16792:34:::1;16691:13:::0;16648:14;16792:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;16777:12;:74:::0;;;16886:2:::1;-1:-1:-1::0;16870:18:0::1;16862:60;;;;-1:-1:-1::0;;;16862:60:0::1;;;;;;;:::i;4515:215::-:0;1306:10;4603:4;4652:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4652:34:0;;;;;;;;;;4603:4;;4620:80;;4643:7;;4652:47;;4689:10;;4652:47;:::i;:::-;4620:8;:80::i;27168:237::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27264:32:0;::::1;27256:83;;;::::0;-1:-1:-1;;;27256:83:0;;11694:2:1;27256:83:0::1;::::0;::::1;11676:21:1::0;11733:2;11713:18;;;11706:30;11772:34;11752:18;;;11745:62;-1:-1:-1;;;11823:18:1;;;11816:36;11869:19;;27256:83:0::1;11492:402:1::0;27256:83:0::1;27350:17;:47:::0;;-1:-1:-1;;;;;;27350:47:0::1;-1:-1:-1::0;;;;;27350:47:0;;;::::1;::::0;;;::::1;::::0;;27168:237::o;27660:312::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;27751:18:::1;;27723:24;27741:4;27723:9;:24::i;:::-;:46;;27715:123;;;::::0;;-1:-1:-1;;;27715:123:0;;12101:2:1;27715:123:0::1;::::0;::::1;12083:21:1::0;12120:18;;;12113:30;;;;12179:34;12159:18;;;12152:62;12250:34;12230:18;;;12223:62;12302:19;;27715:123:0::1;11899:428:1::0;27715:123:0::1;27849:8;:15:::0;;-1:-1:-1;;;;27849:15:0::1;-1:-1:-1::0;;;27849:15:0::1;::::0;;27875:10:::1;:8;:10::i;:::-;27896:8;:16:::0;;-1:-1:-1;;;;27896:16:0::1;::::0;;27928:36:::1;::::0;27948:15:::1;2716:25:1::0;;27928:36:0::1;::::0;2704:2:1;2689:18;27928:36:0::1;;;;;;;27660:312::o:0;3361:127::-;-1:-1:-1;;;;;3462:18:0;3435:7;3462:18;;;;;;;;;;;;3361:127::o;7559:150::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;7652:6:::1;::::0;7631:40:::1;::::0;7668:1:::1;::::0;-1:-1:-1;;;;;7652:6:0::1;::::0;7631:40:::1;::::0;7668:1;;7631:40:::1;7682:6;:19:::0;;-1:-1:-1;;;;;;7682:19:0::1;::::0;;7559:150::o;12905:154::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;12959:14:::1;:22:::0;;-1:-1:-1;;12959:22:0;;::::1;::::0;;;12992:20:::1;:28:::0;;;;::::1;::::0;;13036:15:::1;::::0;::::1;::::0;12976:5:::1;::::0;13036:15:::1;12905:154::o:0;15675:260::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;15771:4:::1;15767:104;;15809:6;::::0;-1:-1:-1;;;;;15809:6:0;;::::1;15799:16:::0;;::::1;::::0;15791:68:::1;;;::::0;-1:-1:-1;;;15791:68:0;;12534:2:1;15791:68:0::1;::::0;::::1;12516:21:1::0;12573:2;12553:18;;;12546:30;12612:34;12592:18;;;12585:62;-1:-1:-1;;;12663:18:1;;;12656:37;12710:19;;15791:68:0::1;12332:403:1::0;15791:68:0::1;-1:-1:-1::0;;;;;15881:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;15881:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15675:260::o;26704:456::-;7472:6;;26791:10;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26822:20:0;::::1;26814:59;;;::::0;-1:-1:-1;;;26814:59:0;;12942:2:1;26814:59:0::1;::::0;::::1;12924:21:1::0;12981:2;12961:18;;;12954:30;13020:28;13000:18;;;12993:56;13066:18;;26814:59:0::1;12740:350:1::0;26814:59:0::1;26910:4;-1:-1:-1::0;;;;;26892:23:0;::::1;::::0;26884:64:::1;;;::::0;-1:-1:-1;;;26884:64:0;;13297:2:1;26884:64:0::1;::::0;::::1;13279:21:1::0;13336:2;13316:18;;;13309:30;13375;13355:18;;;13348:58;13423:18;;26884:64:0::1;13095:352:1::0;26884:64:0::1;26986:39;::::0;-1:-1:-1;;;26986:39:0;;27019:4:::1;26986:39;::::0;::::1;730:51:1::0;26959:24:0::1;::::0;-1:-1:-1;;;;;26986:24:0;::::1;::::0;::::1;::::0;703:18:1;;26986:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27044:46;::::0;-1:-1:-1;;;27044:46:0;;-1:-1:-1;;;;;13833:32:1;;;27044:46:0::1;::::0;::::1;13815:51:1::0;13882:18;;;13875:34;;;26959:66:0;;-1:-1:-1;27044:23:0;;::::1;::::0;::::1;::::0;13788:18:1;;27044:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27106;::::0;;-1:-1:-1;;;;;13833:32:1;;13815:51;;13897:2;13882:18;;13875:34;;;27036:54:0;;-1:-1:-1;27106:46:0::1;::::0;13788:18:1;27106:46:0::1;;;;;;;26803:357;26704:456:::0;;;;:::o;12604:249::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;12668:13:::1;::::0;::::1;::::0;::::1;;;12667:14;12659:50;;;::::0;-1:-1:-1;;;12659:50:0;;14372:2:1;12659:50:0::1;::::0;::::1;14354:21:1::0;14411:2;14391:18;;;14384:30;14450:25;14430:18;;;14423:53;14493:18;;12659:50:0::1;14170:347:1::0;12659:50:0::1;12720:13;:20:::0;;-1:-1:-1;;12751:18:0;;;;;12801:12:::1;12780:18;:33:::0;12829:16:::1;::::0;::::1;::::0;-1:-1:-1;;12829:16:0::1;12604:249::o:0;3032:104::-;3088:13;3121:7;3114:14;;;;;:::i;15943:295::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;16052:6:::1;::::0;-1:-1:-1;;;;;16052:6:0;;::::1;16044:14:::0;;::::1;::::0;16036:84:::1;;;::::0;-1:-1:-1;;;16036:84:0;;14724:2:1;16036:84:0::1;::::0;::::1;14706:21:1::0;14763:2;14743:18;;;14736:30;14802:34;14782:18;;;14775:62;14873:27;14853:18;;;14846:55;14918:19;;16036:84:0::1;14522:421:1::0;16036:84:0::1;16133:41;16162:4;16168:5;16133:28;:41::i;:::-;16190:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;16190:40:0;::::1;::::0;::::1;::::0;;;::::1;15943:295:::0;;:::o;4738:413::-;1306:10;4831:4;4875:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4875:34:0;;;;;;;;;;4928:35;;;;4920:85;;;;-1:-1:-1;;;4920:85:0;;15150:2:1;4920:85:0;;;15132:21:1;15189:2;15169:18;;;15162:30;15228:34;15208:18;;;15201:62;-1:-1:-1;;;15279:18:1;;;15272:35;15324:19;;4920:85:0;14948:401:1;4920:85:0;5041:67;1306:10;5064:7;5092:15;5073:16;:34;5041:8;:67::i;:::-;-1:-1:-1;5139:4:0;;4738:413;-1:-1:-1;;;4738:413:0:o;3496:175::-;3582:4;3599:42;1306:10;3623:9;3634:6;3599:9;:42::i;18003:182::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18088:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;18088:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;18143:34;;1388:41:1;;;18143:34:0::1;::::0;1361:18:1;18143:34:0::1;;;;;;;18003:182:::0;;:::o;14126:284::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;14248:4:::1;14242;14222:13;3333:12:::0;;;3245:108;14222:13:::1;:17;::::0;14238:1:::1;14222:17;:::i;:::-;:24;;;;:::i;:::-;14221:31;;;;:::i;:::-;14211:6;:41;;14203:98;;;::::0;-1:-1:-1;;;14203:98:0;;15556:2:1;14203:98:0::1;::::0;::::1;15538:21:1::0;15595:2;15575:18;;;15568:30;15634:34;15614:18;;;15607:62;-1:-1:-1;;;15685:18:1;;;15678:42;15737:19;;14203:98:0::1;15354:408:1::0;14203:98:0::1;14330:17;:6:::0;14340::::1;14330:17;:::i;:::-;14312:15;:35:::0;;;14363:39:::1;::::0;2716:25:1;;;14363:39:0::1;::::0;2704:2:1;2689:18;14363:39:0::1;2570:177:1::0;27413:195:0;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27495:25:0;::::1;27487:69;;;::::0;-1:-1:-1;;;27487:69:0;;15969:2:1;27487:69:0::1;::::0;::::1;15951:21:1::0;16008:2;15988:18;;;15981:30;16047:33;16027:18;;;16020:61;16098:18;;27487:69:0::1;15767:355:1::0;27487:69:0::1;27567:10;:33:::0;;-1:-1:-1;;;;;;27567:33:0::1;-1:-1:-1::0;;;;;27567:33:0;;;::::1;::::0;;;::::1;::::0;;27413:195::o;14480:346::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;14603:6:::1;14583:13;3333:12:::0;;;3245:108;14583:13:::1;:17;::::0;14599:1:::1;14583:17;:::i;:::-;:26;;;;:::i;:::-;14570:9;:39;;14562:105;;;::::0;-1:-1:-1;;;14562:105:0;;16329:2:1;14562:105:0::1;::::0;::::1;16311:21:1::0;16368:2;16348:18;;;16341:30;16407:34;16387:18;;;16380:62;-1:-1:-1;;;16458:18:1;;;16451:51;16519:19;;14562:105:0::1;16127:417:1::0;14562:105:0::1;14718:4;14698:13;3333:12:::0;;;3245:108;14698:13:::1;:17;::::0;14714:1:::1;14698:17;:::i;:::-;:24;;;;:::i;:::-;14685:9;:37;;14677:102;;;::::0;-1:-1:-1;;;14677:102:0;;16751:2:1;14677:102:0::1;::::0;::::1;16733:21:1::0;16790:2;16770:18;;;16763:30;16829:34;16809:18;;;16802:62;-1:-1:-1;;;16880:18:1;;;16873:50;16940:19;;14677:102:0::1;16549:416:1::0;14677:102:0::1;14789:18;:30:::0;14480:346::o;22131:854::-;22206:9;22249:11;22234:26;;;22226:71;;;;-1:-1:-1;;;22226:71:0;;17172:2:1;22226:71:0;;;17154:21:1;;;17191:18;;;17184:30;17250:34;17230:18;;;17223:62;17302:18;;22226:71:0;16970:356:1;22226:71:0;22334:16;;;22348:1;22334:16;;;;;;;;22310:21;;22334:16;;;;;;;;-1:-1:-1;;22371:9:0;;:16;;;-1:-1:-1;;;22371:16:0;;;;22310:40;;-1:-1:-1;;;;;;22371:9:0;;;;:14;;-1:-1:-1;22371:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22361:4;22366:1;22361:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;22361:26:0;;;-1:-1:-1;;;;;22361:26:0;;;;;22416:4;22398;22403:1;22398:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22398:23:0;;;:7;;;;;;;;;:23;22464:17;;22434;;22454:28;;22464:17;22454:9;:28::i;:::-;22519:9;;22682:17;;22519:221;;-1:-1:-1;;;22519:221:0;;22434:48;;-1:-1:-1;;;;;;22519:9:0;;;;:60;;22587:11;;22519:221;;:9;;22663:4;;22682:17;;22714:15;;22519:221;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22780:17:0;;22751:16;;-1:-1:-1;22770:28:0;;-1:-1:-1;;;;;;22780:17:0;;-1:-1:-1;22770:9:0;:28::i;:::-;22751:47;;22824:9;22813:8;:20;22809:124;;;22866:17;;22850:71;;-1:-1:-1;;;;;22866:17:0;22893:4;22900:20;22911:9;22900:8;:20;:::i;:::-;22850:15;:71::i;:::-;22948:29;;2716:25:1;;;22948:29:0;;2704:2:1;2689:18;22948:29:0;;;;;;;22173:812;;;;22131:854::o;13844:274::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;13964:4:::1;13958;13938:13;3333:12:::0;;;3245:108;13938:13:::1;:17;::::0;13954:1:::1;13938:17;:::i;:::-;:24;;;;:::i;:::-;13937:31;;;;:::i;:::-;13927:6;:41;;13919:96;;;::::0;-1:-1:-1;;;13919:96:0;;18903:2:1;13919:96:0::1;::::0;::::1;18885:21:1::0;18942:2;18922:18;;;18915:30;18981:34;18961:18;;;18954:62;-1:-1:-1;;;19032:18:1;;;19025:40;19082:19;;13919:96:0::1;18701:406:1::0;13919:96:0::1;14042:17;:6:::0;14052::::1;14042:17;:::i;:::-;14026:13;:33:::0;;;14075:35:::1;::::0;2716:25:1;;;14075:35:0::1;::::0;2704:2:1;2689:18;14075:35:0::1;2570:177:1::0;17393:602:0;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;17472:2:::1;17452:17;:22:::0;;;17504:1:::1;17485:16;:20:::0;;;17516:10:::1;:14:::0;;;17541:11:::1;:15:::0;;;17504:1;;;17583:36:::1;::::0;17504:1;;17583:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;17567:13;:79:::0;;;17682:2:::1;-1:-1:-1::0;17665:19:0::1;17657:61;;;;-1:-1:-1::0;;;17657:61:0::1;;;;;;;:::i;:::-;17750:2;17731:16;:21:::0;;;17781:1:::1;17763:15;:19:::0;;;17793:9:::1;:13:::0;;;17817:10:::1;:14:::0;;;17781:1;;;17857:34:::1;::::0;17781:1;;17857:34:::1;:::i;:::-;:46;;;;:::i;:::-;:59;;;;:::i;:::-;17842:12;:74:::0;;;17951:2:::1;-1:-1:-1::0;17935:18:0::1;17927:60;;;::::0;-1:-1:-1;;;17927:60:0;;19314:2:1;17927:60:0::1;::::0;::::1;19296:21:1::0;19353:2;19333:18;;;19326:30;19392:31;19372:18;;;19365:59;19441:18;;17927:60:0::1;19112:353:1::0;17927:60:0::1;17393:602::o:0;16938:447::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;17074:17:::1;:34:::0;;;17119:16:::1;:32:::0;;;17162:10:::1;:20:::0;;;17193:11:::1;:22:::0;;;17207:8;17175:7;17242:36:::1;17138:13:::0;17094:14;17242:36:::1;:::i;:::-;:49;;;;:::i;:::-;:63;;;;:::i;:::-;17226:13;:79:::0;;;17341:2:::1;-1:-1:-1::0;17324:19:0::1;17316:61;;;;-1:-1:-1::0;;;17316:61:0::1;;;;;;;:::i;13067:118::-:0;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13151:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;13151:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13067:118::o;13461:98::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;13523:20:::1;:28:::0;;-1:-1:-1;;13523:28:0::1;::::0;;13461:98::o;7717:244::-;7472:6;;-1:-1:-1;;;;;7472:6:0;1306:10;7472:22;7464:67;;;;-1:-1:-1;;;7464:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7806:22:0;::::1;7798:73;;;::::0;-1:-1:-1;;;7798:73:0;;19672:2:1;7798:73:0::1;::::0;::::1;19654:21:1::0;19711:2;19691:18;;;19684:30;19750:34;19730:18;;;19723:62;-1:-1:-1;;;19801:18:1;;;19794:36;19847:19;;7798:73:0::1;19470:402:1::0;7798:73:0::1;7908:6;::::0;7887:38:::1;::::0;-1:-1:-1;;;;;7887:38:0;;::::1;::::0;7908:6:::1;::::0;7887:38:::1;::::0;7908:6:::1;::::0;7887:38:::1;7936:6;:17:::0;;-1:-1:-1;;;;;;7936:17:0::1;-1:-1:-1::0;;;;;7936:17:0;;;::::1;::::0;;;::::1;::::0;;7717:244::o;22993:765::-;23114:17;;-1:-1:-1;;;;;23114:17:0;23100:10;:31;23092:81;;;;-1:-1:-1;;;23092:81:0;;;;;;;:::i;:::-;23252:16;;;23266:1;23252:16;;;;;;;;23206:9;;23184:19;;23252:16;23266:1;23252:16;;;;;;;;-1:-1:-1;;23289:9:0;;:16;;;-1:-1:-1;;;23289:16:0;;;;23228:40;;-1:-1:-1;;;;;;23289:9:0;;;;:14;;-1:-1:-1;23289:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23279:4;23284:1;23279:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;23279:26:0;;;-1:-1:-1;;;;;23279:26:0;;;;;23334:4;23316;23321:1;23316:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23316:23:0;;;:7;;;;;;;;;:23;23376:9;;:213;;-1:-1:-1;;;23376:213:0;;:9;;;:60;;23444:11;;23376:213;;:9;;23520:4;;23539:9;;23563:15;;23376:213;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23600:17;23620:20;23630:9;23620;:20::i;:::-;23600:40;-1:-1:-1;23651:54:0;23667:9;23678:8;23688:16;23700:4;23600:40;23688:16;:::i;23651:54::-;23721:29;;2716:25:1;;;23721:29:0;;2704:2:1;2689:18;23721:29:0;;;;;;;23081:677;;;22993:765;;:::o;6638:380::-;-1:-1:-1;;;;;6774:19:0;;6766:68;;;;-1:-1:-1;;;6766:68:0;;20079:2:1;6766:68:0;;;20061:21:1;20118:2;20098:18;;;20091:30;20157:34;20137:18;;;20130:62;-1:-1:-1;;;20208:18:1;;;20201:34;20252:19;;6766:68:0;19877:400:1;6766:68:0;-1:-1:-1;;;;;6853:21:0;;6845:68;;;;-1:-1:-1;;;6845:68:0;;20484:2:1;6845:68:0;;;20466:21:1;20523:2;20503:18;;;20496:30;20562:34;20542:18;;;20535:62;-1:-1:-1;;;20613:18:1;;;20606:32;20655:19;;6845:68:0;20282:398:1;6845:68:0;-1:-1:-1;;;;;6926:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6978:32;;2716:25:1;;;6978:32:0;;2689:18:1;6978:32:0;;;;;;;;6638:380;;;:::o;5159:614::-;-1:-1:-1;;;;;5299:20:0;;5291:70;;;;-1:-1:-1;;;5291:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5380:23:0;;5372:71;;;;-1:-1:-1;;;5372:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5480:17:0;;5456:21;5480:17;;;;;;;;;;;5516:23;;;;5508:74;;;;-1:-1:-1;;;5508:74:0;;21697:2:1;5508:74:0;;;21679:21:1;21736:2;21716:18;;;21709:30;21775:34;21755:18;;;21748:62;-1:-1:-1;;;21826:18:1;;;21819:36;21872:19;;5508:74:0;21495:402:1;5508:74:0;-1:-1:-1;;;;;5618:17:0;;;:9;:17;;;;;;;;;;;5638:22;;;5618:42;;5682:20;;;;;;;;:30;;5654:6;;5618:9;5682:30;;5654:6;;5682:30;:::i;:::-;;;;;;;;5747:9;-1:-1:-1;;;;;5730:35:0;5739:6;-1:-1:-1;;;;;5730:35:0;;5758:6;5730:35;;;;2716:25:1;;2704:2;2689:18;;2570:177;5730:35:0;;;;;;;;5280:493;5159:614;;;:::o;18193:3829::-;-1:-1:-1;;;;;18293:18:0;;18285:68;;;;-1:-1:-1;;;18285:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18372:16:0;;18364:64;;;;-1:-1:-1;;;18364:64:0;;;;;;;:::i;:::-;18456:1;18447:6;:10;18439:52;;;;-1:-1:-1;;;18439:52:0;;22104:2:1;18439:52:0;;;22086:21:1;22143:2;22123:18;;;22116:30;22182:31;22162:18;;;22155:59;22231:18;;18439:52:0;21902:353:1;18439:52:0;18508:13;;;;;;;18504:132;;-1:-1:-1;;;;;18545:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;18574:23:0;;;;;;:19;:23;;;;;;;;18545:52;18537:87;;;;-1:-1:-1;;;18537:87:0;;22462:2:1;18537:87:0;;;22444:21:1;22501:2;22481:18;;;22474:30;-1:-1:-1;;;22520:18:1;;;22513:52;22582:18;;18537:87:0;22260:346:1;18537:87:0;18651:14;;;;18648:1520;;;7410:6;;-1:-1:-1;;;;;18685:15:0;;;7410:6;;18685:15;;;;:32;;-1:-1:-1;7410:6:0;;-1:-1:-1;;;;;18704:13:0;;;7410:6;;18704:13;;18685:32;:52;;;;-1:-1:-1;;;;;;18721:16:0;;;;18685:52;:77;;;;-1:-1:-1;;;;;;18741:21:0;;18755:6;18741:21;;18685:77;:107;;;;-1:-1:-1;;;;;;18767:25:0;;;;;;:19;:25;;;;;;;;18766:26;18685:107;:135;;;;-1:-1:-1;;;;;;18797:23:0;;;;;;:19;:23;;;;;;;;18796:24;18685:135;18681:1476;;;18978:20;;;;18974:377;;;19040:9;;-1:-1:-1;;;;;19026:24:0;;;19040:9;;19026:24;;;;:49;;-1:-1:-1;19068:6:0;;-1:-1:-1;;;;;19054:21:0;;;19068:6;;19054:21;;19026:49;19022:310;;;19153:16;19168:1;19153:12;:16;:::i;:::-;19140:9;19111:39;;;;:28;:39;;;;;;:58;19103:124;;;;-1:-1:-1;;;19103:124:0;;22813:2:1;19103:124:0;;;22795:21:1;22852:2;22832:18;;;22825:30;22891:34;22871:18;;;22864:62;-1:-1:-1;;;22942:18:1;;;22935:51;23003:19;;19103:124:0;22611:417:1;19103:124:0;19283:9;19254:39;;;;:28;:39;;;;;19296:12;19254:54;;19022:310;-1:-1:-1;;;;;19403:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;19439:35:0;;;;;;:31;:35;;;;;;;;19438:36;19403:71;19399:743;;;19521:12;;19511:6;:22;;19503:75;;;;-1:-1:-1;;;19503:75:0;;23235:2:1;19503:75:0;;;23217:21:1;23274:2;23254:18;;;23247:30;23313:34;23293:18;;;23286:62;-1:-1:-1;;;23364:18:1;;;23357:38;23412:19;;19503:75:0;23033:404:1;19503:75:0;19639:15;;19622:13;19632:2;19622:9;:13::i;:::-;19613:22;;:6;:22;:::i;:::-;:41;;19605:78;;;;-1:-1:-1;;;19605:78:0;;23644:2:1;19605:78:0;;;23626:21:1;23683:2;23663:18;;;23656:30;-1:-1:-1;;;23702:18:1;;;23695:54;23766:18;;19605:78:0;23442:348:1;19605:78:0;19399:743;;;-1:-1:-1;;;;;19759:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;19793:37:0;;;;;;:31;:37;;;;;;;;19792:38;19759:71;19755:387;;;19877:13;;19867:6;:23;;19859:78;;;;-1:-1:-1;;;19859:78:0;;23997:2:1;19859:78:0;;;23979:21:1;24036:2;24016:18;;;24009:30;24075:34;24055:18;;;24048:62;-1:-1:-1;;;24126:18:1;;;24119:40;24176:19;;19859:78:0;23795:406:1;19755:387:0;-1:-1:-1;;;;;19985:35:0;;;;;;:31;:35;;;;;;;;19980:162;;20078:15;;20061:13;20071:2;20061:9;:13::i;:::-;20052:22;;:6;:22;:::i;:::-;:41;;20044:78;;;;-1:-1:-1;;;20044:78:0;;23644:2:1;20044:78:0;;;23626:21:1;23683:2;23663:18;;;23656:30;-1:-1:-1;;;23702:18:1;;;23695:54;23766:18;;20044:78:0;23442:348:1;20044:78:0;20180:28;20211:24;20229:4;20211:9;:24::i;:::-;20287:18;;20180:55;;-1:-1:-1;20263:42:0;;;;;;;20321:22;;-1:-1:-1;20332:11:0;;;;;;;20321:22;:35;;;;-1:-1:-1;20348:8:0;;-1:-1:-1;;;20348:8:0;;;;20347:9;20321:35;:71;;;;-1:-1:-1;;;;;;20361:31:0;;;;;;:25;:31;;;;;;;;20360:32;20321:71;:101;;;;-1:-1:-1;;;;;;20397:25:0;;;;;;:19;:25;;;;;;;;20396:26;20321:101;:129;;;;-1:-1:-1;;;;;;20427:23:0;;;;;;:19;:23;;;;;;;;20426:24;20321:129;20318:236;;;20467:8;:15;;-1:-1:-1;;;;20467:15:0;-1:-1:-1;;;20467:15:0;;;20499:10;:8;:10::i;:::-;20526:8;:16;;-1:-1:-1;;;;20526:16:0;;;20318:236;-1:-1:-1;;;;;20684:25:0;;20566:12;20684:25;;;:19;:25;;;;;;20581:4;;20684:25;;;:52;;-1:-1:-1;;;;;;20713:23:0;;;;;;:19;:23;;;;;;;;20684:52;20681:99;;;-1:-1:-1;20763:5:0;20681:99;20792:12;20896:7;20893:1076;;;-1:-1:-1;;;;;20949:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;20998:1;20982:13;;:17;20949:50;20945:880;;;21051:3;21035:13;;21026:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;21019:35;;21121:13;;21102:16;;21095:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;21073:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21203:13:0;;21183:17;;21176:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;21153:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;21271:13:0;;21258:10;;21251:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;21235:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21341:13:0;;21327:11;;21320:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;21303:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;20945:880:0;;-1:-1:-1;20945:880:0;;-1:-1:-1;;;;;21417:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;21467:1;21452:12;;:16;21417:51;21414:411;;;21517:3;21502:12;;21493:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;21486:34;;21583:12;;21565:15;;21558:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;21536:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;21663:12:0;;21644:16;;21637:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;21614:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;21729:12:0;;21717:9;;21710:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;21694:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;21797:12:0;;21784:10;;21777:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;21760:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;21414:411:0;21844:8;;21841:89;;21872:42;21888:4;21902;21909;21872:15;:42::i;:::-;21943:14;21953:4;21943:14;;:::i;:::-;;;20893:1076;21981:33;21997:4;22003:2;22007:6;21981:15;:33::i;:::-;18272:3750;;;;18193:3829;;;:::o;25124:1572::-;25184:1;25168:13;;:17;:62;;;;;25217:13;;25189:24;25207:4;25189:9;:24::i;:::-;:41;;25168:62;25165:129;;;25247:35;25261:4;25268:13;;25247:5;:35::i;:::-;25320:1;25304:13;:17;;;25360:24;25378:4;25360:9;:24::i;:::-;25334:50;;25395:25;25466:12;;25444:19;;25423:18;;:40;;;;:::i;:::-;:55;;;;:::i;:::-;25395:83;;25494:15;25513:1;25494:20;25491:34;;25517:7;;25124:1572::o;25491:34::-;25558:18;;:23;;25579:2;25558:23;:::i;:::-;25540:15;:41;25537:113;;;25615:18;;:23;;25636:2;25615:23;:::i;:::-;25597:41;;25537:113;25662:12;25736:23;25821:1;25801:17;25780:18;;25762:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;25736:86;-1:-1:-1;25835:51:0;25852:33;25736:86;25852:15;:33;:::i;:::-;25835:16;:51::i;:::-;26085:18;;25920:21;;;;25899:18;;26085:20;;26104:1;;26085:20;:::i;:::-;26064:42;;:17;:42;:::i;:::-;26041:19;;26028:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;26001:106;;26118:17;26207:1;26188:18;;:20;;;;:::i;:::-;26167:42;;:17;:42;:::i;:::-;26151:12;;26138:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;26118:92;-1:-1:-1;26242:28:0;26118:92;26242:16;:28;:::i;:::-;26223:47;;;;:::i;:::-;26304:1;26283:18;:22;;;26316:19;:23;;;26350:12;:16;;;26377:13;:17;26223:47;-1:-1:-1;26410:19:0;;;;;:42;;;26451:1;26433:15;:19;26410:42;26407:119;;;26468:46;26481:15;26498;26468:12;:46::i;:::-;26559:10;;26551:46;;-1:-1:-1;;;;;26559:10:0;;;;26583:9;;26551:46;;;;26583:9;26559:10;26551:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26631:17:0;;26623:65;;26538:59;;-1:-1:-1;;;;;;26631:17:0;;26662:21;;26623:65;;;;26662:21;26631:17;26623:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25124:1572:0:o;16246:240::-;-1:-1:-1;;;;;16329:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;16329:39:0;;;;;;;16381;16329:31;:39;16381:26;:39::i;6080:550::-;-1:-1:-1;;;;;6164:21:0;;6156:67;;;;-1:-1:-1;;;6156:67:0;;24618:2:1;6156:67:0;;;24600:21:1;24657:2;24637:18;;;24630:30;24696:34;24676:18;;;24669:62;-1:-1:-1;;;24747:18:1;;;24740:31;24788:19;;6156:67:0;24416:397:1;6156:67:0;-1:-1:-1;;;;;6259:18:0;;6234:22;6259:18;;;;;;;;;;;6296:24;;;;6288:71;;;;-1:-1:-1;;;6288:71:0;;25020:2:1;6288:71:0;;;25002:21:1;25059:2;25039:18;;;25032:30;25098:34;25078:18;;;25071:62;-1:-1:-1;;;25149:18:1;;;25142:32;25191:19;;6288:71:0;24818:398:1;6288:71:0;-1:-1:-1;;;;;6395:18:0;;:9;:18;;;;;;;;;;;6416:23;;;6395:44;;6534:12;:22;;;;;;;6585:37;2716:25:1;;;6395:9:0;;:18;6585:37;;2689:18:1;6585:37:0;2570:177:1;24026:573:0;24178:16;;;24192:1;24178:16;;;;;;;;24154:21;;24178:16;;;;;;;;;;-1:-1:-1;24178:16:0;24154:40;;24223:4;24205;24210:1;24205:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24205:23:0;;;:7;;;;;;;;;;:23;;;;24249:9;;:16;;;-1:-1:-1;;;24249:16:0;;;;:9;;;;;:14;;:16;;;;;24205:7;;24249:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24239:4;24244:1;24239:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24239:26:0;;;:7;;;;;;;;;:26;24310:9;;24278:56;;24295:4;;24310:9;24322:11;24278:8;:56::i;:::-;24373:9;;:218;;-1:-1:-1;;;24373:218:0;;-1:-1:-1;;;;;24373:9:0;;;;:60;;:218;;24448:11;;24373:9;;24518:4;;24545;;24565:15;;24373:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24081:518;24026:573;:::o;24607:509::-;24787:9;;24755:56;;24772:4;;-1:-1:-1;;;;;24787:9:0;24799:11;24755:8;:56::i;:::-;24854:9;;:254;;-1:-1:-1;;;24854:254:0;;24920:4;24854:254;;;26149:34:1;26199:18;;;26192:34;;;24854:9:0;26242:18:1;;;26235:34;;;26285:18;;;26278:34;25060:6:0;26328:19:1;;;26321:44;25082:15:0;26381:19:1;;;26374:35;-1:-1:-1;;;;;24854:9:0;;;;:25;;24887:9;;26083:19:1;;24854:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24607:509;;:::o;14834:207::-;-1:-1:-1;;;;;14922:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;14922:52:0;;;;;;;;;;14990:43;;26899:51:1;;;26966:18;;;26959:50;14990:43:0;;26872:18:1;14990:43:0;;;;;;;14834:207;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;792:131::-;-1:-1:-1;;;;;867:31:1;;857:42;;847:70;;913:1;910;903:12;928:315;996:6;1004;1057:2;1045:9;1036:7;1032:23;1028:32;1025:52;;;1073:1;1070;1063:12;1025:52;1112:9;1099:23;1131:31;1156:5;1131:31;:::i;:::-;1181:5;1233:2;1218:18;;;;1205:32;;-1:-1:-1;;;928:315:1:o;1440:247::-;1499:6;1552:2;1540:9;1531:7;1527:23;1523:32;1520:52;;;1568:1;1565;1558:12;1520:52;1607:9;1594:23;1626:31;1651:5;1626:31;:::i;:::-;1676:5;1440:247;-1:-1:-1;;;1440:247:1:o;1692:118::-;1778:5;1771:13;1764:21;1757:5;1754:32;1744:60;;1800:1;1797;1790:12;1815:750;1907:6;1915;1923;1976:2;1964:9;1955:7;1951:23;1947:32;1944:52;;;1992:1;1989;1982:12;1944:52;2032:9;2019:23;2061:18;2102:2;2094:6;2091:14;2088:34;;;2118:1;2115;2108:12;2088:34;2156:6;2145:9;2141:22;2131:32;;2201:7;2194:4;2190:2;2186:13;2182:27;2172:55;;2223:1;2220;2213:12;2172:55;2263:2;2250:16;2289:2;2281:6;2278:14;2275:34;;;2305:1;2302;2295:12;2275:34;2360:7;2353:4;2343:6;2340:1;2336:14;2332:2;2328:23;2324:34;2321:47;2318:67;;;2381:1;2378;2371:12;2318:67;2412:4;2404:13;;;;-1:-1:-1;2436:6:1;-1:-1:-1;;2477:20:1;;2464:34;2507:28;2464:34;2507:28;:::i;:::-;2554:5;2544:15;;;1815:750;;;;;:::o;2752:127::-;2813:10;2808:3;2804:20;2801:1;2794:31;2844:4;2841:1;2834:15;2868:4;2865:1;2858:15;2884:275;2955:2;2949:9;3020:2;3001:13;;-1:-1:-1;;2997:27:1;2985:40;;3055:18;3040:34;;3076:22;;;3037:62;3034:88;;;3102:18;;:::i;:::-;3138:2;3131:22;2884:275;;-1:-1:-1;2884:275:1:o;3164:183::-;3224:4;3257:18;3249:6;3246:30;3243:56;;;3279:18;;:::i;:::-;-1:-1:-1;3324:1:1;3320:14;3336:4;3316:25;;3164:183::o;3352:662::-;3406:5;3459:3;3452:4;3444:6;3440:17;3436:27;3426:55;;3477:1;3474;3467:12;3426:55;3513:6;3500:20;3539:4;3563:60;3579:43;3619:2;3579:43;:::i;:::-;3563:60;:::i;:::-;3657:15;;;3743:1;3739:10;;;;3727:23;;3723:32;;;3688:12;;;;3767:15;;;3764:35;;;3795:1;3792;3785:12;3764:35;3831:2;3823:6;3819:15;3843:142;3859:6;3854:3;3851:15;3843:142;;;3925:17;;3913:30;;3963:12;;;;3876;;3843:142;;;-1:-1:-1;4003:5:1;3352:662;-1:-1:-1;;;;;;3352:662:1:o;4019:1215::-;4137:6;4145;4198:2;4186:9;4177:7;4173:23;4169:32;4166:52;;;4214:1;4211;4204:12;4166:52;4254:9;4241:23;4283:18;4324:2;4316:6;4313:14;4310:34;;;4340:1;4337;4330:12;4310:34;4378:6;4367:9;4363:22;4353:32;;4423:7;4416:4;4412:2;4408:13;4404:27;4394:55;;4445:1;4442;4435:12;4394:55;4481:2;4468:16;4503:4;4527:60;4543:43;4583:2;4543:43;:::i;4527:60::-;4621:15;;;4703:1;4699:10;;;;4691:19;;4687:28;;;4652:12;;;;4727:19;;;4724:39;;;4759:1;4756;4749:12;4724:39;4783:11;;;;4803:217;4819:6;4814:3;4811:15;4803:217;;;4899:3;4886:17;4916:31;4941:5;4916:31;:::i;:::-;4960:18;;4836:12;;;;4998;;;;4803:217;;;5039:5;-1:-1:-1;;5082:18:1;;5069:32;;-1:-1:-1;;5113:16:1;;;5110:36;;;5142:1;5139;5132:12;5110:36;;5165:63;5220:7;5209:8;5198:9;5194:24;5165:63;:::i;:::-;5155:73;;;4019:1215;;;;;:::o;5239:456::-;5316:6;5324;5332;5385:2;5373:9;5364:7;5360:23;5356:32;5353:52;;;5401:1;5398;5391:12;5353:52;5440:9;5427:23;5459:31;5484:5;5459:31;:::i;:::-;5509:5;-1:-1:-1;5566:2:1;5551:18;;5538:32;5579:33;5538:32;5579:33;:::i;:::-;5239:456;;5631:7;;-1:-1:-1;;;5685:2:1;5670:18;;;;5657:32;;5239:456::o;5700:180::-;5759:6;5812:2;5800:9;5791:7;5787:23;5783:32;5780:52;;;5828:1;5825;5818:12;5780:52;-1:-1:-1;5851:23:1;;5700:180;-1:-1:-1;5700:180:1:o;5885:385::-;5971:6;5979;5987;5995;6048:3;6036:9;6027:7;6023:23;6019:33;6016:53;;;6065:1;6062;6055:12;6016:53;-1:-1:-1;;6088:23:1;;;6158:2;6143:18;;6130:32;;-1:-1:-1;6209:2:1;6194:18;;6181:32;;6260:2;6245:18;6232:32;;-1:-1:-1;5885:385:1;-1:-1:-1;5885:385:1:o;6672:382::-;6737:6;6745;6798:2;6786:9;6777:7;6773:23;6769:32;6766:52;;;6814:1;6811;6804:12;6766:52;6853:9;6840:23;6872:31;6897:5;6872:31;:::i;:::-;6922:5;-1:-1:-1;6979:2:1;6964:18;;6951:32;6992:30;6951:32;6992:30;:::i;:::-;7041:7;7031:17;;;6672:382;;;;;:::o;7059:388::-;7127:6;7135;7188:2;7176:9;7167:7;7163:23;7159:32;7156:52;;;7204:1;7201;7194:12;7156:52;7243:9;7230:23;7262:31;7287:5;7262:31;:::i;:::-;7312:5;-1:-1:-1;7369:2:1;7354:18;;7341:32;7382:33;7341:32;7382:33;:::i;7452:380::-;7531:1;7527:12;;;;7574;;;7595:61;;7649:4;7641:6;7637:17;7627:27;;7595:61;7702:2;7694:6;7691:14;7671:18;7668:38;7665:161;;7748:10;7743:3;7739:20;7736:1;7729:31;7783:4;7780:1;7773:15;7811:4;7808:1;7801:15;7665:161;;7452:380;;;:::o;7837:356::-;8039:2;8021:21;;;8058:18;;;8051:30;8117:34;8112:2;8097:18;;8090:62;8184:2;8169:18;;7837:356::o;8198:127::-;8259:10;8254:3;8250:20;8247:1;8240:31;8290:4;8287:1;8280:15;8314:4;8311:1;8304:15;8330:127;8391:10;8386:3;8382:20;8379:1;8372:31;8422:4;8419:1;8412:15;8446:4;8443:1;8436:15;8462:135;8501:3;8522:17;;;8519:43;;8542:18;;:::i;:::-;-1:-1:-1;8589:1:1;8578:13;;8462:135::o;8602:401::-;8804:2;8786:21;;;8843:2;8823:18;;;8816:30;8882:34;8877:2;8862:18;;8855:62;-1:-1:-1;;;8948:2:1;8933:18;;8926:35;8993:3;8978:19;;8602:401::o;10199:168::-;10272:9;;;10303;;10320:15;;;10314:22;;10300:37;10290:71;;10341:18;;:::i;10372:217::-;10412:1;10438;10428:132;;10482:10;10477:3;10473:20;10470:1;10463:31;10517:4;10514:1;10507:15;10545:4;10542:1;10535:15;10428:132;-1:-1:-1;10574:9:1;;10372:217::o;11004:125::-;11069:9;;;11090:10;;;11087:36;;;11103:18;;:::i;11134:353::-;11336:2;11318:21;;;11375:2;11355:18;;;11348:30;11414:31;11409:2;11394:18;;11387:59;11478:2;11463:18;;11134:353::o;13452:184::-;13522:6;13575:2;13563:9;13554:7;13550:23;13546:32;13543:52;;;13591:1;13588;13581:12;13543:52;-1:-1:-1;13614:16:1;;13452:184;-1:-1:-1;13452:184:1:o;13920:245::-;13987:6;14040:2;14028:9;14019:7;14015:23;14011:32;14008:52;;;14056:1;14053;14046:12;14008:52;14088:9;14082:16;14107:28;14129:5;14107:28;:::i;17331:251::-;17401:6;17454:2;17442:9;17433:7;17429:23;17425:32;17422:52;;;17470:1;17467;17460:12;17422:52;17502:9;17496:16;17521:31;17546:5;17521:31;:::i;17587:461::-;17640:3;17678:5;17672:12;17705:6;17700:3;17693:19;17731:4;17760:2;17755:3;17751:12;17744:19;;17797:2;17790:5;17786:14;17818:1;17828:195;17842:6;17839:1;17836:13;17828:195;;;17907:13;;-1:-1:-1;;;;;17903:39:1;17891:52;;17963:12;;;;17998:15;;;;17939:1;17857:9;17828:195;;;-1:-1:-1;18039:3:1;;17587:461;-1:-1:-1;;;;;17587:461:1:o;18053:510::-;18324:6;18313:9;18306:25;18367:3;18362:2;18351:9;18347:18;18340:31;18287:4;18388:57;18440:3;18429:9;18425:19;18417:6;18388:57;:::i;:::-;-1:-1:-1;;;;;18481:32:1;;;;18476:2;18461:18;;18454:60;-1:-1:-1;18545:2:1;18530:18;18523:34;18380:65;18053:510;-1:-1:-1;;18053:510:1:o;18568:128::-;18635:9;;;18656:11;;;18653:37;;;18670:18;;:::i;20685:401::-;20887:2;20869:21;;;20926:2;20906:18;;;20899:30;20965:34;20960:2;20945:18;;20938:62;-1:-1:-1;;;21031:2:1;21016:18;;21009:35;21076:3;21061:19;;20685:401::o;21091:399::-;21293:2;21275:21;;;21332:2;21312:18;;;21305:30;21371:34;21366:2;21351:18;;21344:62;-1:-1:-1;;;21437:2:1;21422:18;;21415:33;21480:3;21465:19;;21091:399::o;25221:582::-;25520:6;25509:9;25502:25;25563:6;25558:2;25547:9;25543:18;25536:34;25606:3;25601:2;25590:9;25586:18;25579:31;25483:4;25627:57;25679:3;25668:9;25664:19;25656:6;25627:57;:::i;:::-;-1:-1:-1;;;;;25720:32:1;;;;25715:2;25700:18;;25693:60;-1:-1:-1;25784:3:1;25769:19;25762:35;25619:65;25221:582;-1:-1:-1;;;25221:582:1:o;26420:306::-;26508:6;26516;26524;26577:2;26565:9;26556:7;26552:23;26548:32;26545:52;;;26593:1;26590;26583:12;26545:52;26622:9;26616:16;26606:26;;26672:2;26661:9;26657:18;26651:25;26641:35;;26716:2;26705:9;26701:18;26695:25;26685:35;;26420:306;;;;;:::o

Swarm Source

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