ETH Price: $2,650.85 (+1.75%)

Token

ChadGPT (CHAD)
 

Overview

Max Total Supply

1,000,000 CHAD

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.624021652488127516 CHAD

Value
$0.00
0x29192a50b1bc440dde7599c2d6b56a8e9bde4bb7
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:
ChadGPTEntry

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 777 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*

// TELEGRAM
// https://t.me/ChadGPTEntry

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address 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;
    }
}

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

contract ChadGPTEntry 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 operationsAddress;
    address TreasuryAddress;

    uint256 public tradingActiveBlock = 3; // 0 means trading is not active
    uint256 public blockForPenaltyEnd;
    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 buyTreasuryFee;
    uint256 public buyBurnFee;

    uint256 public sellTotalFees;
    uint256 public sellOperationsFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTreasuryFee;
    uint256 public sellBurnFee;

    uint256 public tokensForOperations;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTreasury;
    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("ChadGPT", "CHAD") {

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

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

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

        uint256 totalSupply = 1000000 * 1e18;

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

        buyOperationsFee = 10;
        buyLiquidityFee = 5;
        buyTreasuryFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee + buyBurnFee;

        sellOperationsFee = 50;
        sellLiquidityFee = 20;
        sellTreasuryFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee + sellBurnFee;

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

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

        operationsAddress = address(newOwner);
        TreasuryAddress = address(newOwner);

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

    receive() external payable {}

    // only enable if no plan to airdrop

    function enableTrading(uint256 deadBlocks) external onlyOwner {
        require(!tradingActive, "Cannot reenable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + deadBlocks;
        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 _TreasuryFee, uint256 _burnFee) external onlyOwner {
        buyOperationsFee = _operationsFee;
        buyLiquidityFee = _liquidityFee;
        buyTreasuryFee = _TreasuryFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee + buyBurnFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    function returnToNormalTax() external onlyOwner {
        sellOperationsFee = 10;
        sellLiquidityFee = 5;
        sellTreasuryFee = 0;
        sellBurnFee = 0;
        sellTotalFees = sellOperationsFee + sellLiquidityFee + sellTreasuryFee + sellBurnFee;
        require(sellTotalFees <= 30, "Keep fees at 30% or less");

        buyOperationsFee = 3;
        buyLiquidityFee = 2;
        buyTreasuryFee = 0;
        buyBurnFee = 0;
        buyTotalFees = buyOperationsFee + buyLiquidityFee + buyTreasuryFee + buyBurnFee;
        require(buyTotalFees <= 15, "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(blockForPenaltyEnd > 0){
            require(!boughtEarly[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        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 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                        _holderLastTransferTimestamp[to] = 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){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){

                if(!boughtEarly[to]){
                    boughtEarly[to] = true;
                    botsCaught += 1;
                    emit CaughtEarlyBuyer(to);
                }

                fees = amount * 99 / 100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForOperations += fees * buyOperationsFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForOperations += fees * sellOperationsFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / 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;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
            }

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

        	amount -= fees;
        }

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

    function earlyBuyPenaltyInEffect() public view returns (bool){
        return block.number < blockForPenaltyEnd;
    }

    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(operationsAddress),
            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 + tokensForTreasury;

        if(contractBalance == 0 || totalTokensToSwap == 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 ethForTreasury = ethBalance * tokensForTreasury / (totalTokensToSwap - (tokensForLiquidity/2));

        ethForLiquidity -= ethForOperations + ethForTreasury;

        tokensForLiquidity = 0;
        tokensForOperations = 0;
        tokensForTreasury = 0;
        tokensForBurn = 0;

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

        (success,) = address(TreasuryAddress).call{value: ethForTreasury}("");

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

    // withdraw ETH if stuck or someone sends to the address
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

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

    function setTreasuryAddress(address _TreasuryAddress) external onlyOwner {
        require(_TreasuryAddress != address(0), "_TreasuryAddress address cannot be 0");
        TreasuryAddress = payable(_TreasuryAddress);
    }

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

    // useful for buybacks or to reclaim any ETH on the contract in a way that helps holders.
    function buyBackTokens(uint256 amountInWei) external onlyOwner {
        require(amountInWei <= 10 ether, "May not buy more than 10 ETH in a single buy to reduce sandwich attacks");

        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,
            address(0xdead),
            block.timestamp
        );
        emit BuyBackTriggered(amountInWei);
    }
}

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":"blockForPenaltyEnd","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":[{"internalType":"uint256","name":"amountInWei","type":"uint256"}],"name":"buyBackTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"buyTreasuryFee","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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadBlocks","type":"uint256"}],"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":"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":"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":[],"name":"sellTreasuryFee","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":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TreasuryAddress","type":"address"}],"name":"setTreasuryAddress","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":"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":"tokensForTreasury","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":"_TreasuryFee","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":"_TreasuryFee","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":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003600e556012805462ffffff191660019081179091556014805460ff191690911790553480156200003557600080fd5b506040518060400160405280600781526020016610da185911d41560ca1b8152506040518060400160405280600481526020016310d2105160e21b815250816003908162000084919062000851565b50600462000093828262000851565b5050506000620000a86200044960201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062004cd5833981519152908290a350600980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b81529051339291829163c45a0155916004808201926020929091908290030181865afa1580156200014f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017591906200091d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e991906200091d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d91906200091d565b600a80546001600160a01b0319166001600160a01b03929092169182179055620002899060016200044d565b600a54620002a2906001600160a01b03166001620004b0565b69d3c21bcecceda10000006064620002bc82600262000965565b620002c8919062000985565b6006556064620002da82600262000965565b620002e6919062000985565b6007556064620002f882600262000965565b62000304919062000985565b6008556127106200031782600562000965565b62000323919062000985565b600b55600a6016819055600560178190556000601881905560198190559182916200034e91620009a8565b6200035a9190620009a8565b620003669190620009a8565b6015556032601b8190556014601c8190556000601d819055601e8190559182916200039191620009a8565b6200039d9190620009a8565b620003a99190620009a8565b601a55620003b98360016200044d565b620003c63060016200044d565b620003d561dead60016200044d565b620003e28360016200051c565b620003ef3060016200051c565b620003fe61dead60016200051c565b600c80546001600160a01b0385166001600160a01b03199182168117909255600d80549091169091179055620004358382620005ca565b6200044083620006af565b505050620009be565b3390565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055620004e082826200044d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200056b5760405162461bcd60e51b8152602060048201819052602482015260008051602062004cb583398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006225760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000562565b8060026000828254620006369190620009a8565b90915550506001600160a01b0382166000908152602081905260408120805483929062000665908490620009a8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620006fa5760405162461bcd60e51b8152602060048201819052602482015260008051602062004cb5833981519152604482015260640162000562565b6001600160a01b038116620007615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000562565b6005546040516001600160a01b0380841692169060008051602062004cd583398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d757607f821691505b602082108103620007f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200084c57600081815260208120601f850160051c81016020861015620008275750805b601f850160051c820191505b81811015620008485782815560010162000833565b5050505b505050565b81516001600160401b038111156200086d576200086d620007ac565b62000885816200087e8454620007c2565b84620007fe565b602080601f831160018114620008bd5760008415620008a45750858301515b600019600386901b1c1916600185901b17855562000848565b600085815260208120601f198616915b82811015620008ee57888601518255948401946001909101908401620008cd565b50858210156200090d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200093057600080fd5b81516001600160a01b03811681146200094857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200097f576200097f6200094f565b92915050565b600082620009a357634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200097f576200097f6200094f565b6142e780620009ce6000396000f3fe6080604052600436106104185760003560e01c80638366e79a11610228578063d257b34f11610128578063e800dff7116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b9d578063fb002c9714610bb3578063fc155d1d14610bc957600080fd5b8063f2fde38b14610b68578063f5648a4f14610b8857600080fd5b8063e800dff714610b07578063e884f26014610b27578063ee40166e14610b3c578063f11a24d314610b5257600080fd5b8063e2cd5fcd116100f7578063e2cd5fcd14610aa6578063e2f4560514610abb578063e71dc3f514610ad1578063e7ad9fcd14610ae757600080fd5b8063d257b34f14610a0a578063d85ba06314610a2a578063dc3f0d0f14610a40578063dd62ed3e14610a6057600080fd5b8063a9059cbb116101bb578063bbc0c7421161018a578063c18bc1951161016f578063c18bc195146109ba578063c876d0b9146109da578063cc2ffe7c146109f457600080fd5b8063bbc0c7421461097b578063c02466681461099a57600080fd5b8063a9059cbb146108ff578063aa4bde281461091f578063adb873bd14610935578063b62496f51461094b57600080fd5b806395d89b41116101f757806395d89b41146108945780639a7a23d6146108a9578063a457c2d7146108c9578063a62068ce146108e957600080fd5b80638366e79a1461081057806385ecfd281461083057806388e765ff146108605780638da5cb5b1461087657600080fd5b80634a62bb65116103335780636a486a8e116102c657806370a0823111610295578063751039fc1161027a578063751039fc146107bb5780637571336a146107d057806382aa7c68146107f057600080fd5b806370a0823114610770578063715018a6146107a657600080fd5b80636a486a8e1461070e5780636b0a894c146107245780636b2fb1241461073a5780636ddd17131461075057600080fd5b80635a139dd4116103025780635a139dd4146106ac5780635c068a8c146106c25780636605bfda146106d857806366d602ae146106f857600080fd5b80634a62bb65146106505780634f77f6c01461066a57806351f205e41461068057806358a6d5311461069557600080fd5b80632307b441116103ab578063313ce5671161037a578063313ce567146105d457806339509351146105f0578063452ed4f114610610578063499b83941461063057600080fd5b80632307b4411461055457806323b872dd146105745780632be32b61146105945780632e6ed7ef146105b457600080fd5b8063130a2c3c116103e7578063130a2c3c146104e757806318160ddd146105095780631a8145bb146105285780631d7778561461053e57600080fd5b806306fdde03146104245780630758d9241461044f578063095ea7b31461048757806310d5de53146104b757600080fd5b3661041f57005b600080fd5b34801561043057600080fd5b50610439610be9565b6040516104469190613ca8565b60405180910390f35b34801561045b57600080fd5b5060095461046f906001600160a01b031681565b6040516001600160a01b039091168152602001610446565b34801561049357600080fd5b506104a76104a2366004613d0e565b610c7b565b6040519015158152602001610446565b3480156104c357600080fd5b506104a76104d2366004613d3a565b60246020526000908152604090205460ff1681565b3480156104f357600080fd5b50610507610502366004613d6c565b610c92565b005b34801561051557600080fd5b506002545b604051908152602001610446565b34801561053457600080fd5b5061051a60205481565b34801561054a57600080fd5b5061051a60225481565b34801561056057600080fd5b5061050761056f366004613ec8565b610d56565b34801561058057600080fd5b506104a761058f366004613f8a565b610ed4565b3480156105a057600080fd5b506105076105af366004613fcb565b610f93565b3480156105c057600080fd5b506105076105cf366004613fe4565b6110d2565b3480156105e057600080fd5b5060405160128152602001610446565b3480156105fc57600080fd5b506104a761060b366004613d0e565b6111a3565b34801561061c57600080fd5b50600a5461046f906001600160a01b031681565b34801561063c57600080fd5b5061050761064b366004613d3a565b6111df565b34801561065c57600080fd5b506012546104a79060ff1681565b34801561067657600080fd5b5061051a601b5481565b34801561068c57600080fd5b506105076112c5565b3480156106a157600080fd5b50600f5443106104a7565b3480156106b857600080fd5b5061051a60165481565b3480156106ce57600080fd5b5061051a60185481565b3480156106e457600080fd5b506105076106f3366004613d3a565b6113f3565b34801561070457600080fd5b5061051a60075481565b34801561071a57600080fd5b5061051a601a5481565b34801561073057600080fd5b5061051a60115481565b34801561074657600080fd5b5061051a601d5481565b34801561075c57600080fd5b506012546104a79062010000900460ff1681565b34801561077c57600080fd5b5061051a61078b366004613d3a565b6001600160a01b031660009081526020819052604090205490565b3480156107b257600080fd5b506105076114bf565b3480156107c757600080fd5b50610507611551565b3480156107dc57600080fd5b506105076107eb366004614016565b6115da565b3480156107fc57600080fd5b5061050761080b366004613fcb565b6116d6565b34801561081c57600080fd5b506104a761082b36600461404f565b6117c7565b34801561083c57600080fd5b506104a761084b366004613d3a565b60106020526000908152604090205460ff1681565b34801561086c57600080fd5b5061051a60065481565b34801561088257600080fd5b506005546001600160a01b031661046f565b3480156108a057600080fd5b506104396119ee565b3480156108b557600080fd5b506105076108c4366004614016565b6119fd565b3480156108d557600080fd5b506104a76108e4366004613d0e565b611b0f565b3480156108f557600080fd5b5061051a600f5481565b34801561090b57600080fd5b506104a761091a366004613d0e565b611ba8565b34801561092b57600080fd5b5061051a60085481565b34801561094157600080fd5b5061051a601e5481565b34801561095757600080fd5b506104a7610966366004613d3a565b60256020526000908152604090205460ff1681565b34801561098757600080fd5b506012546104a790610100900460ff1681565b3480156109a657600080fd5b506105076109b5366004614016565b611bb5565b3480156109c657600080fd5b506105076109d5366004613fcb565b611c5c565b3480156109e657600080fd5b506014546104a79060ff1681565b348015610a0057600080fd5b5061051a60215481565b348015610a1657600080fd5b50610507610a25366004613fcb565b611d94565b348015610a3657600080fd5b5061051a60155481565b348015610a4c57600080fd5b50610507610a5b366004613fcb565b611f0e565b348015610a6c57600080fd5b5061051a610a7b36600461404f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab257600080fd5b50610507612046565b348015610ac757600080fd5b5061051a600b5481565b348015610add57600080fd5b5061051a60195481565b348015610af357600080fd5b50610507610b02366004613fe4565b6121ae565b348015610b1357600080fd5b50610507610b22366004614016565b61227f565b348015610b3357600080fd5b506105076122f2565b348015610b4857600080fd5b5061051a600e5481565b348015610b5e57600080fd5b5061051a60175481565b348015610b7457600080fd5b50610507610b83366004613d3a565b612346565b348015610b9457600080fd5b50610507612466565b348015610ba957600080fd5b5061051a601c5481565b348015610bbf57600080fd5b5061051a601f5481565b348015610bd557600080fd5b50610507610be4366004613fcb565b6124f0565b606060038054610bf89061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c249061407d565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b6000610c88338484612768565b5060015b92915050565b6005546001600160a01b03163314610cdf5760405162461bcd60e51b8152602060048201819052602482015260008051602061429283398151915260448201526064015b60405180910390fd5b60005b82811015610d50578160106000868685818110610d0157610d016140b7565b9050602002016020810190610d169190613d3a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d48816140e3565b915050610ce2565b50505050565b6005546001600160a01b03163314610d9e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b8051825114610def5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cd6565b610258825110610e675760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610cd6565b60005b8251811015610ecf576000838281518110610e8757610e876140b7565b602002602001015190506000838381518110610ea557610ea56140b7565b60200260200101519050610eba33838361288d565b50508080610ec7906140e3565b915050610e6a565b505050565b6000610ee1848484612a73565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f7b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610cd6565b610f888533858403612768565b506001949350505050565b6005546001600160a01b03163314610fdb5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b670de0b6b3a76400006103e8610ff060025490565b610ffb9060026140fc565b6110059190614113565b61100f9190614113565b8110156110845760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060448201527f7468616e20302e322500000000000000000000000000000000000000000000006064820152608401610cd6565b61109681670de0b6b3a76400006140fc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461111a5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6016849055601783905560188290556019819055808261113a8587614135565b6111449190614135565b61114e9190614135565b6015819055600f1015610d505760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610cd6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c889185906111da908690614135565b612768565b6005546001600160a01b031633146112275760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201527f74206265203000000000000000000000000000000000000000000000000000006064820152608401610cd6565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461130d5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b600b54306000908152602081905260409020541015611396576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cd6565b600a805460ff60a01b1916600160a01b1790556113b161369c565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461143b5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b03811661149d5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610cd6565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115075760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115995760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116225760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b806116ab57600a546001600160a01b03908116908316036116ab5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201527f6d61782074786e000000000000000000000000000000000000000000000000006064820152608401610cd6565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461171e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b601254610100900460ff16156117765760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cd6565b6012805462ffff0019166201010017905543600e819055611798908290614135565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118125760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b0383166118685760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cd6565b306001600160a01b038416036118c05760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610cd6565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b9190614148565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190614161565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610bf89061407d565b6005546001600160a01b03163314611a455760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b600a546001600160a01b0390811690831603611ac95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cd6565b611ad382826138e6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611b915760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cd6565b611b9e3385858403612768565b5060019392505050565b6000610c88338484612a73565b6005546001600160a01b03163314611bfd5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611ca45760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b670de0b6b3a76400006103e8611cb960025490565b611cc49060036140fc565b611cce9190614113565b611cd89190614113565b811015611d4d5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610cd6565b611d5f81670de0b6b3a76400006140fc565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110c7565b6005546001600160a01b03163314611ddc5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b620186a0611de960025490565b611df49060016140fc565b611dfe9190614113565b811015611e735760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610cd6565b6103e8611e7f60025490565b611e8a9060016140fc565b611e949190614113565b811115611f095760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610cd6565b600b55565b6005546001600160a01b03163314611f565760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b670de0b6b3a76400006103e8611f6b60025490565b611f769060026140fc565b611f809190614113565b611f8a9190614113565b811015611fff5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201527f207468616e20302e3225000000000000000000000000000000000000000000006064820152608401610cd6565b61201181670de0b6b3a76400006140fc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110c7565b6005546001600160a01b0316331461208e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b600a601b8190556005601c8190556000601d819055601e8190559182916120b491614135565b6120be9190614135565b6120c89190614135565b601a819055601e101561211d5760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420333025206f72206c65737300000000000000006044820152606401610cd6565b600360168190556002601781905560006018819055601981905591829161214391614135565b61214d9190614135565b6121579190614135565b6015819055600f10156121ac5760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420313525206f72206c65737300000000000000006044820152606401610cd6565b565b6005546001600160a01b031633146121f65760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b601b849055601c839055601d829055601e81905580826122168587614135565b6122209190614135565b61222a9190614135565b601a819055601e1015610d505760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420333025206f72206c65737300000000000000006044820152606401610cd6565b6005546001600160a01b031633146122c75760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461233a5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6014805460ff19169055565b6005546001600160a01b0316331461238e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b03811661240a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cd6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146124ae5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b604051600090339047908381818185875af1925050503d8060008114610d50576040519150601f19603f3d011682016040523d82523d6000602084013e610d50565b6005546001600160a01b031633146125385760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b678ac7230489e800008111156125dc5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201527f61747461636b7300000000000000000000000000000000000000000000000000608482015260a401610cd6565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266a919061417e565b8160008151811061267d5761267d6140b7565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106126b1576126b16140b7565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906126f990600090869061dead9042906004016141df565b6000604051808303818588803b15801561271257600080fd5b505af1158015612726573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161275c91815260200190565b60405180910390a15050565b6001600160a01b0383166127ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd6565b6001600160a01b03821661282b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cd6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166128f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cd6565b6001600160a01b0382166129535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cd6565b6001600160a01b038316600090815260208190526040902054818110156129e25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cd6565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a19908490614135565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a6591815260200190565b60405180910390a350505050565b6001600160a01b038316612ad75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cd6565b6001600160a01b038216612b395760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cd6565b60008111612b895760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cd6565b601254610100900460ff16612c23576001600160a01b03831660009081526023602052604090205460ff1680612bd757506001600160a01b03821660009081526023602052604090205460ff165b612c235760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610cd6565b600f5415612d0d576001600160a01b03831660009081526010602052604090205460ff161580612c6057506005546001600160a01b038381169116145b80612c7557506001600160a01b03821661dead145b612d0d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f72206465616420616460648201527f64726573732e0000000000000000000000000000000000000000000000000000608482015260a401610cd6565b60125460ff1615613163576005546001600160a01b03848116911614801590612d4457506005546001600160a01b03838116911614155b8015612d5857506001600160a01b03821615155b8015612d6f57506001600160a01b03821661dead14155b8015612d9457506001600160a01b03831660009081526023602052604090205460ff16155b8015612db957506001600160a01b03821660009081526023602052604090205460ff16155b156131635760145460ff1615612eda576009546001600160a01b03838116911614801590612df55750600a546001600160a01b03838116911614155b15612eda57612e05600243614214565b32600090815260136020526040902054108015612e435750612e28600243614214565b6001600160a01b038316600090815260136020526040902054105b612eb55760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610cd6565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612f1b57506001600160a01b03821660009081526024602052604090205460ff16155b1561301157600654811115612f985760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d6178206275792e0000000000000000000000000000000000000000000000006064820152608401610cd6565b6008546001600160a01b038316600090815260208190526040902054612fbe9083614135565b111561300c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cd6565b613163565b6001600160a01b03821660009081526025602052604090205460ff16801561305257506001600160a01b03831660009081526024602052604090205460ff16155b156130cf5760075481111561300c5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61782073656c6c2e000000000000000000000000000000000000000000006064820152608401610cd6565b6001600160a01b03821660009081526024602052604090205460ff16613163576008546001600160a01b0383166000908152602081905260409020546131159083614135565b11156131635760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cd6565b30600090815260208190526040902054600b548110801590819061318f575060125462010000900460ff165b80156131a55750600a54600160a01b900460ff16155b80156131ca57506001600160a01b03851660009081526025602052604090205460ff16155b80156131ef57506001600160a01b03851660009081526023602052604090205460ff16155b801561321457506001600160a01b03841660009081526023602052604090205460ff16155b1561324257600a805460ff60a01b1916600160a01b17905561323461369c565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff168061328457506001600160a01b03851660009081526023602052604090205460ff165b1561328d575060005b6000811561368857600f54431080156132be57506001600160a01b03871660009081526025602052604090205460ff165b80156132e357506001600160a01b03861660009081526025602052604090205460ff16155b80156132f157506000601554115b15613471576001600160a01b03861660009081526010602052604090205460ff16613391576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601180549192909161334f908490614135565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461339e8660636140fc565b6133a89190614113565b9050601554601754826133bb91906140fc565b6133c59190614113565b602060008282546133d69190614135565b90915550506015546016546133eb90836140fc565b6133f59190614113565b601f60008282546134069190614135565b909155505060155460185461341b90836140fc565b6134259190614113565b602160008282546134369190614135565b909155505060155460195461344b90836140fc565b6134559190614113565b602260008282546134669190614135565b9091555061366a9050565b6001600160a01b03861660009081526025602052604090205460ff16801561349b57506000601a54115b1561355d576064601a54866134b091906140fc565b6134ba9190614113565b9050601a54601c54826134cd91906140fc565b6134d79190614113565b602060008282546134e89190614135565b9091555050601a54601b546134fd90836140fc565b6135079190614113565b601f60008282546135189190614135565b9091555050601a54601d5461352d90836140fc565b6135379190614113565b602160008282546135489190614135565b9091555050601a54601e5461344b90836140fc565b6001600160a01b03871660009081526025602052604090205460ff16801561358757506000601554115b1561366a5760646015548661359c91906140fc565b6135a69190614113565b9050601554601754826135b991906140fc565b6135c39190614113565b602060008282546135d49190614135565b90915550506015546016546135e990836140fc565b6135f39190614113565b601f60008282546136049190614135565b909155505060155460185461361990836140fc565b6136239190614113565b602160008282546136349190614135565b909155505060155460195461364990836140fc565b6136539190614113565b602260008282546136649190614135565b90915550505b801561367b5761367b87308361288d565b6136858186614214565b94505b61369387878761288d565b50505050505050565b60006022541180156136bf57506022543060009081526020819052604090205410155b156136d0576136d030602254613914565b600060228190553081526020819052604081205490506000602154601f546020546136fb9190614135565b6137059190614135565b9050811580613712575080155b1561371b575050565b600b546137299060146140fc565b82111561374157600b5461373e9060146140fc565b91505b6000806002836020548661375591906140fc565b61375f9190614113565b6137699190614113565b905061377d6137788286614214565b613a3e565b6020544790819060009061379390600290614113565b61379d9087614214565b601f546137aa90856140fc565b6137b49190614113565b9050600060026020546137c79190614113565b6137d19088614214565b6021546137de90866140fc565b6137e89190614113565b90506137f48183614135565b6137fe9084614214565b60006020819055601f8190556021819055602255925084158015906138235750600083115b15613832576138328584613b98565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461387f576040519150601f19603f3d011682016040523d82523d6000602084013e613884565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146138d4576040519150601f19603f3d011682016040523d82523d6000602084013e6138d9565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055611ad38282613c4c565b6001600160a01b0382166139745760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cd6565b6001600160a01b038216600090815260208190526040902054818110156139e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cd6565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612880565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a7357613a736140b7565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af0919061417e565b81600181518110613b0357613b036140b7565b6001600160a01b039283166020918202929092010152600954613b299130911684612768565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613b62908590600090869030904290600401614227565b600060405180830381600087803b158015613b7c57600080fd5b505af1158015613b90573d6000803e3d6000fd5b505050505050565b600954613bb09030906001600160a01b031684612768565b600954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613c20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c459190614263565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161275c565b600060208083528351808285015260005b81811015613cd557858101830151858201604001528201613cb9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613d0b57600080fd5b50565b60008060408385031215613d2157600080fd5b8235613d2c81613cf6565b946020939093013593505050565b600060208284031215613d4c57600080fd5b8135613d5781613cf6565b9392505050565b8015158114613d0b57600080fd5b600080600060408486031215613d8157600080fd5b833567ffffffffffffffff80821115613d9957600080fd5b818601915086601f830112613dad57600080fd5b813581811115613dbc57600080fd5b8760208260051b8501011115613dd157600080fd5b60209283019550935050840135613de781613d5e565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e3157613e31613df2565b604052919050565b600067ffffffffffffffff821115613e5357613e53613df2565b5060051b60200190565b600082601f830112613e6e57600080fd5b81356020613e83613e7e83613e39565b613e08565b82815260059290921b84018101918181019086841115613ea257600080fd5b8286015b84811015613ebd5780358352918301918301613ea6565b509695505050505050565b60008060408385031215613edb57600080fd5b823567ffffffffffffffff80821115613ef357600080fd5b818501915085601f830112613f0757600080fd5b81356020613f17613e7e83613e39565b82815260059290921b84018101918181019089841115613f3657600080fd5b948201945b83861015613f5d578535613f4e81613cf6565b82529482019490820190613f3b565b96505086013592505080821115613f7357600080fd5b50613f8085828601613e5d565b9150509250929050565b600080600060608486031215613f9f57600080fd5b8335613faa81613cf6565b92506020840135613fba81613cf6565b929592945050506040919091013590565b600060208284031215613fdd57600080fd5b5035919050565b60008060008060808587031215613ffa57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561402957600080fd5b823561403481613cf6565b9150602083013561404481613d5e565b809150509250929050565b6000806040838503121561406257600080fd5b823561406d81613cf6565b9150602083013561404481613cf6565b600181811c9082168061409157607f821691505b6020821081036140b157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016140f5576140f56140cd565b5060010190565b8082028115828204841417610c8c57610c8c6140cd565b60008261413057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c8c57610c8c6140cd565b60006020828403121561415a57600080fd5b5051919050565b60006020828403121561417357600080fd5b8151613d5781613d5e565b60006020828403121561419057600080fd5b8151613d5781613cf6565b600081518084526020808501945080840160005b838110156141d45781516001600160a01b0316875295820195908201906001016141af565b509495945050505050565b8481526080602082015260006141f8608083018661419b565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610c8c57610c8c6140cd565b85815284602082015260a06040820152600061424660a083018661419b565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561427857600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220e5b6e8fa6b0732cc2dcce8c275b1403bae60d4de34a2b215e8f8e2fd1aa69a5064736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106104185760003560e01c80638366e79a11610228578063d257b34f11610128578063e800dff7116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610b9d578063fb002c9714610bb3578063fc155d1d14610bc957600080fd5b8063f2fde38b14610b68578063f5648a4f14610b8857600080fd5b8063e800dff714610b07578063e884f26014610b27578063ee40166e14610b3c578063f11a24d314610b5257600080fd5b8063e2cd5fcd116100f7578063e2cd5fcd14610aa6578063e2f4560514610abb578063e71dc3f514610ad1578063e7ad9fcd14610ae757600080fd5b8063d257b34f14610a0a578063d85ba06314610a2a578063dc3f0d0f14610a40578063dd62ed3e14610a6057600080fd5b8063a9059cbb116101bb578063bbc0c7421161018a578063c18bc1951161016f578063c18bc195146109ba578063c876d0b9146109da578063cc2ffe7c146109f457600080fd5b8063bbc0c7421461097b578063c02466681461099a57600080fd5b8063a9059cbb146108ff578063aa4bde281461091f578063adb873bd14610935578063b62496f51461094b57600080fd5b806395d89b41116101f757806395d89b41146108945780639a7a23d6146108a9578063a457c2d7146108c9578063a62068ce146108e957600080fd5b80638366e79a1461081057806385ecfd281461083057806388e765ff146108605780638da5cb5b1461087657600080fd5b80634a62bb65116103335780636a486a8e116102c657806370a0823111610295578063751039fc1161027a578063751039fc146107bb5780637571336a146107d057806382aa7c68146107f057600080fd5b806370a0823114610770578063715018a6146107a657600080fd5b80636a486a8e1461070e5780636b0a894c146107245780636b2fb1241461073a5780636ddd17131461075057600080fd5b80635a139dd4116103025780635a139dd4146106ac5780635c068a8c146106c25780636605bfda146106d857806366d602ae146106f857600080fd5b80634a62bb65146106505780634f77f6c01461066a57806351f205e41461068057806358a6d5311461069557600080fd5b80632307b441116103ab578063313ce5671161037a578063313ce567146105d457806339509351146105f0578063452ed4f114610610578063499b83941461063057600080fd5b80632307b4411461055457806323b872dd146105745780632be32b61146105945780632e6ed7ef146105b457600080fd5b8063130a2c3c116103e7578063130a2c3c146104e757806318160ddd146105095780631a8145bb146105285780631d7778561461053e57600080fd5b806306fdde03146104245780630758d9241461044f578063095ea7b31461048757806310d5de53146104b757600080fd5b3661041f57005b600080fd5b34801561043057600080fd5b50610439610be9565b6040516104469190613ca8565b60405180910390f35b34801561045b57600080fd5b5060095461046f906001600160a01b031681565b6040516001600160a01b039091168152602001610446565b34801561049357600080fd5b506104a76104a2366004613d0e565b610c7b565b6040519015158152602001610446565b3480156104c357600080fd5b506104a76104d2366004613d3a565b60246020526000908152604090205460ff1681565b3480156104f357600080fd5b50610507610502366004613d6c565b610c92565b005b34801561051557600080fd5b506002545b604051908152602001610446565b34801561053457600080fd5b5061051a60205481565b34801561054a57600080fd5b5061051a60225481565b34801561056057600080fd5b5061050761056f366004613ec8565b610d56565b34801561058057600080fd5b506104a761058f366004613f8a565b610ed4565b3480156105a057600080fd5b506105076105af366004613fcb565b610f93565b3480156105c057600080fd5b506105076105cf366004613fe4565b6110d2565b3480156105e057600080fd5b5060405160128152602001610446565b3480156105fc57600080fd5b506104a761060b366004613d0e565b6111a3565b34801561061c57600080fd5b50600a5461046f906001600160a01b031681565b34801561063c57600080fd5b5061050761064b366004613d3a565b6111df565b34801561065c57600080fd5b506012546104a79060ff1681565b34801561067657600080fd5b5061051a601b5481565b34801561068c57600080fd5b506105076112c5565b3480156106a157600080fd5b50600f5443106104a7565b3480156106b857600080fd5b5061051a60165481565b3480156106ce57600080fd5b5061051a60185481565b3480156106e457600080fd5b506105076106f3366004613d3a565b6113f3565b34801561070457600080fd5b5061051a60075481565b34801561071a57600080fd5b5061051a601a5481565b34801561073057600080fd5b5061051a60115481565b34801561074657600080fd5b5061051a601d5481565b34801561075c57600080fd5b506012546104a79062010000900460ff1681565b34801561077c57600080fd5b5061051a61078b366004613d3a565b6001600160a01b031660009081526020819052604090205490565b3480156107b257600080fd5b506105076114bf565b3480156107c757600080fd5b50610507611551565b3480156107dc57600080fd5b506105076107eb366004614016565b6115da565b3480156107fc57600080fd5b5061050761080b366004613fcb565b6116d6565b34801561081c57600080fd5b506104a761082b36600461404f565b6117c7565b34801561083c57600080fd5b506104a761084b366004613d3a565b60106020526000908152604090205460ff1681565b34801561086c57600080fd5b5061051a60065481565b34801561088257600080fd5b506005546001600160a01b031661046f565b3480156108a057600080fd5b506104396119ee565b3480156108b557600080fd5b506105076108c4366004614016565b6119fd565b3480156108d557600080fd5b506104a76108e4366004613d0e565b611b0f565b3480156108f557600080fd5b5061051a600f5481565b34801561090b57600080fd5b506104a761091a366004613d0e565b611ba8565b34801561092b57600080fd5b5061051a60085481565b34801561094157600080fd5b5061051a601e5481565b34801561095757600080fd5b506104a7610966366004613d3a565b60256020526000908152604090205460ff1681565b34801561098757600080fd5b506012546104a790610100900460ff1681565b3480156109a657600080fd5b506105076109b5366004614016565b611bb5565b3480156109c657600080fd5b506105076109d5366004613fcb565b611c5c565b3480156109e657600080fd5b506014546104a79060ff1681565b348015610a0057600080fd5b5061051a60215481565b348015610a1657600080fd5b50610507610a25366004613fcb565b611d94565b348015610a3657600080fd5b5061051a60155481565b348015610a4c57600080fd5b50610507610a5b366004613fcb565b611f0e565b348015610a6c57600080fd5b5061051a610a7b36600461404f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab257600080fd5b50610507612046565b348015610ac757600080fd5b5061051a600b5481565b348015610add57600080fd5b5061051a60195481565b348015610af357600080fd5b50610507610b02366004613fe4565b6121ae565b348015610b1357600080fd5b50610507610b22366004614016565b61227f565b348015610b3357600080fd5b506105076122f2565b348015610b4857600080fd5b5061051a600e5481565b348015610b5e57600080fd5b5061051a60175481565b348015610b7457600080fd5b50610507610b83366004613d3a565b612346565b348015610b9457600080fd5b50610507612466565b348015610ba957600080fd5b5061051a601c5481565b348015610bbf57600080fd5b5061051a601f5481565b348015610bd557600080fd5b50610507610be4366004613fcb565b6124f0565b606060038054610bf89061407d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c249061407d565b8015610c715780601f10610c4657610100808354040283529160200191610c71565b820191906000526020600020905b815481529060010190602001808311610c5457829003601f168201915b5050505050905090565b6000610c88338484612768565b5060015b92915050565b6005546001600160a01b03163314610cdf5760405162461bcd60e51b8152602060048201819052602482015260008051602061429283398151915260448201526064015b60405180910390fd5b60005b82811015610d50578160106000868685818110610d0157610d016140b7565b9050602002016020810190610d169190613d3a565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610d48816140e3565b915050610ce2565b50505050565b6005546001600160a01b03163314610d9e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b8051825114610def5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610cd6565b610258825110610e675760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203630302077616c6c6574732070657260448201527f2074786e2064756520746f20676173206c696d697473000000000000000000006064820152608401610cd6565b60005b8251811015610ecf576000838281518110610e8757610e876140b7565b602002602001015190506000838381518110610ea557610ea56140b7565b60200260200101519050610eba33838361288d565b50508080610ec7906140e3565b915050610e6a565b505050565b6000610ee1848484612a73565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f7b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610cd6565b610f888533858403612768565b506001949350505050565b6005546001600160a01b03163314610fdb5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b670de0b6b3a76400006103e8610ff060025490565b610ffb9060026140fc565b6110059190614113565b61100f9190614113565b8110156110845760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060448201527f7468616e20302e322500000000000000000000000000000000000000000000006064820152608401610cd6565b61109681670de0b6b3a76400006140fc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b0316331461111a5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6016849055601783905560188290556019819055808261113a8587614135565b6111449190614135565b61114e9190614135565b6015819055600f1015610d505760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610cd6565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c889185906111da908690614135565b612768565b6005546001600160a01b031633146112275760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b0381166112a35760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201527f74206265203000000000000000000000000000000000000000000000000000006064820152608401610cd6565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461130d5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b600b54306000908152602081905260409020541015611396576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610cd6565b600a805460ff60a01b1916600160a01b1790556113b161369c565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461143b5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b03811661149d5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610cd6565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146115075760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146115995760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6012805460ff199081169091556014805490911690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116225760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b806116ab57600a546001600160a01b03908116908316036116ab5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201527f6d61782074786e000000000000000000000000000000000000000000000000006064820152608401610cd6565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461171e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b601254610100900460ff16156117765760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610cd6565b6012805462ffff0019166201010017905543600e819055611798908290614135565b600f556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b031633146118125760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b0383166118685760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610cd6565b306001600160a01b038416036118c05760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610cd6565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b9190614148565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af115801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190614161565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b606060048054610bf89061407d565b6005546001600160a01b03163314611a455760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b600a546001600160a01b0390811690831603611ac95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610cd6565b611ad382826138e6565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611b915760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cd6565b611b9e3385858403612768565b5060019392505050565b6000610c88338484612a73565b6005546001600160a01b03163314611bfd5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611ca45760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b670de0b6b3a76400006103e8611cb960025490565b611cc49060036140fc565b611cce9190614113565b611cd89190614113565b811015611d4d5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201527f6572207468616e20302e332500000000000000000000000000000000000000006064820152608401610cd6565b611d5f81670de0b6b3a76400006140fc565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc906020016110c7565b6005546001600160a01b03163314611ddc5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b620186a0611de960025490565b611df49060016140fc565b611dfe9190614113565b811015611e735760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610cd6565b6103e8611e7f60025490565b611e8a9060016140fc565b611e949190614113565b811115611f095760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610cd6565b600b55565b6005546001600160a01b03163314611f565760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b670de0b6b3a76400006103e8611f6b60025490565b611f769060026140fc565b611f809190614113565b611f8a9190614113565b811015611fff5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201527f207468616e20302e3225000000000000000000000000000000000000000000006064820152608401610cd6565b61201181670de0b6b3a76400006140fc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e906020016110c7565b6005546001600160a01b0316331461208e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b600a601b8190556005601c8190556000601d819055601e8190559182916120b491614135565b6120be9190614135565b6120c89190614135565b601a819055601e101561211d5760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420333025206f72206c65737300000000000000006044820152606401610cd6565b600360168190556002601781905560006018819055601981905591829161214391614135565b61214d9190614135565b6121579190614135565b6015819055600f10156121ac5760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420313525206f72206c65737300000000000000006044820152606401610cd6565b565b6005546001600160a01b031633146121f65760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b601b849055601c839055601d829055601e81905580826122168587614135565b6122209190614135565b61222a9190614135565b601a819055601e1015610d505760405162461bcd60e51b815260206004820152601860248201527f4b656570206665657320617420333025206f72206c65737300000000000000006044820152606401610cd6565b6005546001600160a01b031633146122c75760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461233a5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6014805460ff19169055565b6005546001600160a01b0316331461238e5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b6001600160a01b03811661240a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cd6565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146124ae5760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b604051600090339047908381818185875af1925050503d8060008114610d50576040519150601f19603f3d011682016040523d82523d6000602084013e610d50565b6005546001600160a01b031633146125385760405162461bcd60e51b815260206004820181905260248201526000805160206142928339815191526044820152606401610cd6565b678ac7230489e800008111156125dc5760405162461bcd60e51b815260206004820152604760248201527f4d6179206e6f7420627579206d6f7265207468616e2031302045544820696e2060448201527f612073696e676c652062757920746f207265647563652073616e64776963682060648201527f61747461636b7300000000000000000000000000000000000000000000000000608482015260a401610cd6565b6040805160028082526060820183526000926020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266a919061417e565b8160008151811061267d5761267d6140b7565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106126b1576126b16140b7565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de959084906126f990600090869061dead9042906004016141df565b6000604051808303818588803b15801561271257600080fd5b505af1158015612726573d6000803e3d6000fd5b50505050507fa017c1567cfcdd2d750a8c01e39fe2a846bcebc293c7d078477014d6848205688260405161275c91815260200190565b60405180910390a15050565b6001600160a01b0383166127ca5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd6565b6001600160a01b03821661282b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cd6565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166128f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cd6565b6001600160a01b0382166129535760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cd6565b6001600160a01b038316600090815260208190526040902054818110156129e25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cd6565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612a19908490614135565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a6591815260200190565b60405180910390a350505050565b6001600160a01b038316612ad75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cd6565b6001600160a01b038216612b395760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cd6565b60008111612b895760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610cd6565b601254610100900460ff16612c23576001600160a01b03831660009081526023602052604090205460ff1680612bd757506001600160a01b03821660009081526023602052604090205460ff165b612c235760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610cd6565b600f5415612d0d576001600160a01b03831660009081526010602052604090205460ff161580612c6057506005546001600160a01b038381169116145b80612c7557506001600160a01b03821661dead145b612d0d5760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f72206465616420616460648201527f64726573732e0000000000000000000000000000000000000000000000000000608482015260a401610cd6565b60125460ff1615613163576005546001600160a01b03848116911614801590612d4457506005546001600160a01b03838116911614155b8015612d5857506001600160a01b03821615155b8015612d6f57506001600160a01b03821661dead14155b8015612d9457506001600160a01b03831660009081526023602052604090205460ff16155b8015612db957506001600160a01b03821660009081526023602052604090205460ff16155b156131635760145460ff1615612eda576009546001600160a01b03838116911614801590612df55750600a546001600160a01b03838116911614155b15612eda57612e05600243614214565b32600090815260136020526040902054108015612e435750612e28600243614214565b6001600160a01b038316600090815260136020526040902054105b612eb55760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610cd6565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526025602052604090205460ff168015612f1b57506001600160a01b03821660009081526024602052604090205460ff16155b1561301157600654811115612f985760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d6178206275792e0000000000000000000000000000000000000000000000006064820152608401610cd6565b6008546001600160a01b038316600090815260208190526040902054612fbe9083614135565b111561300c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cd6565b613163565b6001600160a01b03821660009081526025602052604090205460ff16801561305257506001600160a01b03831660009081526024602052604090205460ff16155b156130cf5760075481111561300c5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61782073656c6c2e000000000000000000000000000000000000000000006064820152608401610cd6565b6001600160a01b03821660009081526024602052604090205460ff16613163576008546001600160a01b0383166000908152602081905260409020546131159083614135565b11156131635760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610cd6565b30600090815260208190526040902054600b548110801590819061318f575060125462010000900460ff165b80156131a55750600a54600160a01b900460ff16155b80156131ca57506001600160a01b03851660009081526025602052604090205460ff16155b80156131ef57506001600160a01b03851660009081526023602052604090205460ff16155b801561321457506001600160a01b03841660009081526023602052604090205460ff16155b1561324257600a805460ff60a01b1916600160a01b17905561323461369c565b600a805460ff60a01b191690555b6001600160a01b03851660009081526023602052604090205460019060ff168061328457506001600160a01b03851660009081526023602052604090205460ff165b1561328d575060005b6000811561368857600f54431080156132be57506001600160a01b03871660009081526025602052604090205460ff165b80156132e357506001600160a01b03861660009081526025602052604090205460ff16155b80156132f157506000601554115b15613471576001600160a01b03861660009081526010602052604090205460ff16613391576001600160a01b0386166000908152601060205260408120805460ff19166001908117909155601180549192909161334f908490614135565b90915550506040516001600160a01b03871681527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b606461339e8660636140fc565b6133a89190614113565b9050601554601754826133bb91906140fc565b6133c59190614113565b602060008282546133d69190614135565b90915550506015546016546133eb90836140fc565b6133f59190614113565b601f60008282546134069190614135565b909155505060155460185461341b90836140fc565b6134259190614113565b602160008282546134369190614135565b909155505060155460195461344b90836140fc565b6134559190614113565b602260008282546134669190614135565b9091555061366a9050565b6001600160a01b03861660009081526025602052604090205460ff16801561349b57506000601a54115b1561355d576064601a54866134b091906140fc565b6134ba9190614113565b9050601a54601c54826134cd91906140fc565b6134d79190614113565b602060008282546134e89190614135565b9091555050601a54601b546134fd90836140fc565b6135079190614113565b601f60008282546135189190614135565b9091555050601a54601d5461352d90836140fc565b6135379190614113565b602160008282546135489190614135565b9091555050601a54601e5461344b90836140fc565b6001600160a01b03871660009081526025602052604090205460ff16801561358757506000601554115b1561366a5760646015548661359c91906140fc565b6135a69190614113565b9050601554601754826135b991906140fc565b6135c39190614113565b602060008282546135d49190614135565b90915550506015546016546135e990836140fc565b6135f39190614113565b601f60008282546136049190614135565b909155505060155460185461361990836140fc565b6136239190614113565b602160008282546136349190614135565b909155505060155460195461364990836140fc565b6136539190614113565b602260008282546136649190614135565b90915550505b801561367b5761367b87308361288d565b6136858186614214565b94505b61369387878761288d565b50505050505050565b60006022541180156136bf57506022543060009081526020819052604090205410155b156136d0576136d030602254613914565b600060228190553081526020819052604081205490506000602154601f546020546136fb9190614135565b6137059190614135565b9050811580613712575080155b1561371b575050565b600b546137299060146140fc565b82111561374157600b5461373e9060146140fc565b91505b6000806002836020548661375591906140fc565b61375f9190614113565b6137699190614113565b905061377d6137788286614214565b613a3e565b6020544790819060009061379390600290614113565b61379d9087614214565b601f546137aa90856140fc565b6137b49190614113565b9050600060026020546137c79190614113565b6137d19088614214565b6021546137de90866140fc565b6137e89190614113565b90506137f48183614135565b6137fe9084614214565b60006020819055601f8190556021819055602255925084158015906138235750600083115b15613832576138328584613b98565b600d546040516001600160a01b03909116908290600081818185875af1925050503d806000811461387f576040519150601f19603f3d011682016040523d82523d6000602084013e613884565b606091505b5050600c546040519197506001600160a01b0316904790600081818185875af1925050503d80600081146138d4576040519150601f19603f3d011682016040523d82523d6000602084013e6138d9565b606091505b5050505050505050505050565b6001600160a01b0382166000908152602560205260409020805460ff1916821515179055611ad38282613c4c565b6001600160a01b0382166139745760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cd6565b6001600160a01b038216600090815260208190526040902054818110156139e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cd6565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612880565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613a7357613a736140b7565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af0919061417e565b81600181518110613b0357613b036140b7565b6001600160a01b039283166020918202929092010152600954613b299130911684612768565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613b62908590600090869030904290600401614227565b600060405180830381600087803b158015613b7c57600080fd5b505af1158015613b90573d6000803e3d6000fd5b505050505050565b600954613bb09030906001600160a01b031684612768565b600954600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613c20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c459190614263565b5050505050565b6001600160a01b038216600081815260246020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910161275c565b600060208083528351808285015260005b81811015613cd557858101830151858201604001528201613cb9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114613d0b57600080fd5b50565b60008060408385031215613d2157600080fd5b8235613d2c81613cf6565b946020939093013593505050565b600060208284031215613d4c57600080fd5b8135613d5781613cf6565b9392505050565b8015158114613d0b57600080fd5b600080600060408486031215613d8157600080fd5b833567ffffffffffffffff80821115613d9957600080fd5b818601915086601f830112613dad57600080fd5b813581811115613dbc57600080fd5b8760208260051b8501011115613dd157600080fd5b60209283019550935050840135613de781613d5e565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613e3157613e31613df2565b604052919050565b600067ffffffffffffffff821115613e5357613e53613df2565b5060051b60200190565b600082601f830112613e6e57600080fd5b81356020613e83613e7e83613e39565b613e08565b82815260059290921b84018101918181019086841115613ea257600080fd5b8286015b84811015613ebd5780358352918301918301613ea6565b509695505050505050565b60008060408385031215613edb57600080fd5b823567ffffffffffffffff80821115613ef357600080fd5b818501915085601f830112613f0757600080fd5b81356020613f17613e7e83613e39565b82815260059290921b84018101918181019089841115613f3657600080fd5b948201945b83861015613f5d578535613f4e81613cf6565b82529482019490820190613f3b565b96505086013592505080821115613f7357600080fd5b50613f8085828601613e5d565b9150509250929050565b600080600060608486031215613f9f57600080fd5b8335613faa81613cf6565b92506020840135613fba81613cf6565b929592945050506040919091013590565b600060208284031215613fdd57600080fd5b5035919050565b60008060008060808587031215613ffa57600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561402957600080fd5b823561403481613cf6565b9150602083013561404481613d5e565b809150509250929050565b6000806040838503121561406257600080fd5b823561406d81613cf6565b9150602083013561404481613cf6565b600181811c9082168061409157607f821691505b6020821081036140b157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016140f5576140f56140cd565b5060010190565b8082028115828204841417610c8c57610c8c6140cd565b60008261413057634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610c8c57610c8c6140cd565b60006020828403121561415a57600080fd5b5051919050565b60006020828403121561417357600080fd5b8151613d5781613d5e565b60006020828403121561419057600080fd5b8151613d5781613cf6565b600081518084526020808501945080840160005b838110156141d45781516001600160a01b0316875295820195908201906001016141af565b509495945050505050565b8481526080602082015260006141f8608083018661419b565b6001600160a01b03949094166040830152506060015292915050565b81810381811115610c8c57610c8c6140cd565b85815284602082015260a06040820152600061424660a083018661419b565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561427857600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220e5b6e8fa6b0732cc2dcce8c275b1403bae60d4de34a2b215e8f8e2fd1aa69a5064736f6c63430008110033

Deployed Bytecode Sourcemap

10114:20249:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4003:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10271:27;;;;;;;;;;-1:-1:-1;10271:27:0;;;;-1:-1:-1;;;;;10271:27:0;;;;;;-1:-1:-1;;;;;749:55:1;;;731:74;;719:2;704:18;10271:27:0;567:244:1;4917:169:0;;;;;;;;;;-1:-1:-1;4917:169:0;;;;;:::i;:::-;;:::i;:::-;;;1460:14:1;;1453:22;1435:41;;1423:2;1408:18;4917:169:0;1295:187:1;11679:64:0;;;;;;;;;;-1:-1:-1;11679:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15273:207;;;;;;;;;;-1:-1:-1;15273:207:0;;;;;:::i;:::-;;:::i;:::-;;4324:108;;;;;;;;;;-1:-1:-1;4412:12:0;;4324:108;;;2763:25:1;;;2751:2;2736:18;4324:108:0;2617:177:1;11422:33:0;;;;;;;;;;;;;;;;11501:28;;;;;;;;;;;;;;;;17129:618;;;;;;;;;;-1:-1:-1;17129:618:0;;;;;:::i;:::-;;:::i;5094:492::-;;;;;;;;;;-1:-1:-1;5094:492:0;;;;;:::i;:::-;;:::i;15647:269::-;;;;;;;;;;-1:-1:-1;15647:269:0;;;;;:::i;:::-;;:::i;18574:456::-;;;;;;;;;;-1:-1:-1;18574:456:0;;;;;:::i;:::-;;:::i;4223:93::-;;;;;;;;;;-1:-1:-1;4223:93:0;;4306:2;6464:36:1;;6452:2;6437:18;4223:93:0;6322:184:1;5594:215:0;;;;;;;;;;-1:-1:-1;5594:215:0;;;;;:::i;:::-;;:::i;10305:21::-;;;;;;;;;;-1:-1:-1;10305:21:0;;;;-1:-1:-1;;;;;10305:21:0;;;28807:237;;;;;;;;;;-1:-1:-1;28807:237:0;;;;;:::i;:::-;;:::i;10671:33::-;;;;;;;;;;-1:-1:-1;10671:33:0;;;;;;;;11232:32;;;;;;;;;;;;;;;;29329:312;;;;;;;;;;;;;:::i;25235:120::-;;;;;;;;;;-1:-1:-1;25329:18:0;;25314:12;:33;25235:120;;11052:31;;;;;;;;;;;;;;;;11127:29;;;;;;;;;;;;;;;;29052:225;;;;;;;;;;-1:-1:-1;29052:225:0;;;;;:::i;:::-;;:::i;10197:28::-;;;;;;;;;;;;;;;;11197;;;;;;;;;;;;;;;;10637:25;;;;;;;;;;;;;;;;11309:30;;;;;;;;;;;;;;;;10751:31;;;;;;;;;;-1:-1:-1;10751:31:0;;;;;;;;;;;4440:127;;;;;;;;;;-1:-1:-1;4440:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;4541:18:0;4514:7;4541:18;;;;;;;;;;;;4440:127;8638:150;;;;;;;;;;;;;:::i;14985:154::-;;;;;;;;;;;;;:::i;17755:260::-;;;;;;;;;;-1:-1:-1;17755:260:0;;;;;:::i;:::-;;:::i;14603:330::-;;;;;;;;;;-1:-1:-1;14603:330:0;;;;;:::i;:::-;;:::i;28113:456::-;;;;;;;;;;-1:-1:-1;28113:456:0;;;;;:::i;:::-;;:::i;10586:44::-;;;;;;;;;;-1:-1:-1;10586:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10163:27;;;;;;;;;;;;;;;;8424:79;;;;;;;;;;-1:-1:-1;8489:6:0;;-1:-1:-1;;;;;8489:6:0;8424:79;;4111:104;;;;;;;;;;;;;:::i;18023:295::-;;;;;;;;;;-1:-1:-1;18023:295:0;;;;;:::i;:::-;;:::i;5817:413::-;;;;;;;;;;-1:-1:-1;5817:413:0;;;;;:::i;:::-;;:::i;10546:33::-;;;;;;;;;;;;;;;;4575:175;;;;;;;;;;-1:-1:-1;4575:175:0;;;;;:::i;:::-;;:::i;10232:30::-;;;;;;;;;;;;;;;;11346:26;;;;;;;;;;;;;;;;11901:58;;;;;;;;;;-1:-1:-1;11901:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10711:33;;;;;;;;;;-1:-1:-1;10711:33:0;;;;;;;;;;;20127:182;;;;;;;;;;-1:-1:-1;20127:182:0;;;;;:::i;:::-;;:::i;16206:284::-;;;;;;;;;;-1:-1:-1;16206:284:0;;;;;:::i;:::-;;:::i;10970:39::-;;;;;;;;;;-1:-1:-1;10970:39:0;;;;;;;;11462:32;;;;;;;;;;;;;;;;16560:346;;;;;;;;;;-1:-1:-1;16560:346:0;;;;;:::i;:::-;;:::i;11018:27::-;;;;;;;;;;;;;;;;15924:274;;;;;;;;;;-1:-1:-1;15924:274:0;;;;;:::i;:::-;;:::i;4758:151::-;;;;;;;;;;-1:-1:-1;4758:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4874:18:0;;;4847:7;4874:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4758:151;19508:611;;;;;;;;;;;;;:::i;10363:33::-;;;;;;;;;;;;;;;;11163:25;;;;;;;;;;;;;;;;19038:462;;;;;;;;;;-1:-1:-1;19038:462:0;;;;;:::i;:::-;;:::i;15147:118::-;;;;;;;;;;-1:-1:-1;15147:118:0;;;;;:::i;:::-;;:::i;15541:98::-;;;;;;;;;;;;;:::i;10469:37::-;;;;;;;;;;;;;;;;11090:30;;;;;;;;;;;;;;;;8796:244;;;;;;;;;;-1:-1:-1;8796:244:0;;;;;:::i;:::-;;:::i;28639:160::-;;;;;;;;;;;;;:::i;11271:31::-;;;;;;;;;;;;;;;;11381:34;;;;;;;;;;;;;;;;29744:616;;;;;;;;;;-1:-1:-1;29744:616:0;;;;;:::i;:::-;;:::i;4003:100::-;4057:13;4090:5;4083:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4003:100;:::o;4917:169::-;5000:4;5017:39;232:10;5040:7;5049:6;5017:8;:39::i;:::-;-1:-1:-1;5074:4:0;4917:169;;;;;:::o;15273:207::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;;;;;;;;;15377:9:::1;15373:100;15392:18:::0;;::::1;15373:100;;;15457:4;15431:11;:23;15443:7;;15451:1;15443:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15431:23:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;15431:23:0;:30;;-1:-1:-1;;15431:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15412:3;::::1;::::0;::::1;:::i;:::-;;;;15373:100;;;;15273:207:::0;;;:::o;17129:618::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;17271:15:::1;:22;17253:7;:14;:40;17245:83;;;::::0;-1:-1:-1;;;17245:83:0;;8874:2:1;17245:83:0::1;::::0;::::1;8856:21:1::0;8913:2;8893:18;;;8886:30;8952:32;8932:18;;;8925:60;9002:18;;17245:83:0::1;8672:354:1::0;17245:83:0::1;17364:3;17347:7;:14;:20;17339:87;;;::::0;-1:-1:-1;;;17339:87:0;;9233:2:1;17339:87:0::1;::::0;::::1;9215:21:1::0;9272:2;9252:18;;;9245:30;9311:34;9291:18;;;9284:62;9382:24;9362:18;;;9355:52;9424:19;;17339:87:0::1;9031:418:1::0;17339:87:0::1;17539:9;17535:205;17558:7;:14;17554:1;:18;17535:205;;;17593:14;17610:7;17618:1;17610:10;;;;;;;;:::i;:::-;;;;;;;17593:27;;17635:14;17652:15;17668:1;17652:18;;;;;;;;:::i;:::-;;;;;;;17635:35;;17685:43;17701:10;17713:6;17721;17685:15;:43::i;:::-;17578:162;;17574:3;;;;;:::i;:::-;;;;17535:205;;;;17129:618:::0;;:::o;5094:492::-;5234:4;5251:36;5261:6;5269:9;5280:6;5251:9;:36::i;:::-;-1:-1:-1;;;;;5327:19:0;;5300:24;5327:19;;;:11;:19;;;;;;;;232:10;5327:33;;;;;;;;5379:26;;;;5371:79;;;;-1:-1:-1;;;5371:79:0;;9656:2:1;5371:79:0;;;9638:21:1;9695:2;9675:18;;;9668:30;9734:34;9714:18;;;9707:62;9805:10;9785:18;;;9778:38;9833:19;;5371:79:0;9454:404:1;5371:79:0;5486:57;5495:6;232:10;5536:6;5517:16;:25;5486:8;:57::i;:::-;-1:-1:-1;5574:4:0;;5094:492;-1:-1:-1;;;;5094:492:0:o;15647:269::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;15766:4:::1;15760;15740:13;4412:12:::0;;;4324:108;15740:13:::1;:17;::::0;15756:1:::1;15740:17;:::i;:::-;:24;;;;:::i;:::-;15739:31;;;;:::i;:::-;15729:6;:41;;15721:95;;;::::0;-1:-1:-1;;;15721:95:0;;10460:2:1;15721:95:0::1;::::0;::::1;10442:21:1::0;10499:2;10479:18;;;10472:30;10538:34;10518:18;;;10511:62;10609:11;10589:18;;;10582:39;10638:19;;15721:95:0::1;10258:405:1::0;15721:95:0::1;15842:17;:6:::0;15852::::1;15842:17;:::i;:::-;15827:12;:32:::0;;;15875:33:::1;::::0;2763:25:1;;;15875:33:0::1;::::0;2751:2:1;2736:18;15875:33:0::1;;;;;;;;15647:269:::0;:::o;18574:456::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;18714:16:::1;:33:::0;;;18758:15:::1;:31:::0;;;18800:14:::1;:29:::0;;;18840:10:::1;:21:::0;;;18853:8;18817:12;18887:34:::1;18776:13:::0;18733:14;18887:34:::1;:::i;:::-;:51;;;;:::i;:::-;:64;;;;:::i;:::-;18872:12;:79:::0;;;18986:2:::1;-1:-1:-1::0;18970:18:0::1;18962:60;;;::::0;-1:-1:-1;;;18962:60:0;;11000:2:1;18962:60:0::1;::::0;::::1;10982:21:1::0;11039:2;11019:18;;;11012:30;11078:31;11058:18;;;11051:59;11127:18;;18962:60:0::1;10798:353:1::0;5594:215:0;232:10;5682:4;5731:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5731:34:0;;;;;;;;;;5682:4;;5699:80;;5722:7;;5731:47;;5768:10;;5731:47;:::i;:::-;5699:8;:80::i;28807:237::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;-1:-1:-1;;;;;28903:32:0;::::1;28895:83;;;::::0;-1:-1:-1;;;28895:83:0;;11358:2:1;28895:83:0::1;::::0;::::1;11340:21:1::0;11397:2;11377:18;;;11370:30;11436:34;11416:18;;;11409:62;11507:8;11487:18;;;11480:36;11533:19;;28895:83:0::1;11156:402:1::0;28895:83:0::1;28989:17;:47:::0;;-1:-1:-1;;;;;;28989:47:0::1;-1:-1:-1::0;;;;;28989:47:0;;;::::1;::::0;;;::::1;::::0;;28807:237::o;29329:312::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;29420:18:::1;::::0;29410:4:::1;4514:7:::0;4541:18;;;;;;;;;;;29392:46:::1;;29384:123;;;::::0;;-1:-1:-1;;;29384:123:0;;11765:2:1;29384:123:0::1;::::0;::::1;11747:21:1::0;11784:18;;;11777:30;;;;11843:34;11823:18;;;11816:62;11914:34;11894:18;;;11887:62;11966:19;;29384:123:0::1;11563:428:1::0;29384:123:0::1;29518:8;:15:::0;;-1:-1:-1;;;;29518:15:0::1;-1:-1:-1::0;;;29518:15:0::1;::::0;;29544:10:::1;:8;:10::i;:::-;29565:8;:16:::0;;-1:-1:-1;;;;29565:16:0::1;::::0;;29597:36:::1;::::0;29617:15:::1;2763:25:1::0;;29597:36:0::1;::::0;2751:2:1;2736:18;29597:36:0::1;;;;;;;29329:312::o:0;29052:225::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;-1:-1:-1;;;;;29144:30:0;::::1;29136:79;;;::::0;-1:-1:-1;;;29136:79:0;;12198:2:1;29136:79:0::1;::::0;::::1;12180:21:1::0;12237:2;12217:18;;;12210:30;12276:34;12256:18;;;12249:62;-1:-1:-1;;;12327:18:1;;;12320:34;12371:19;;29136:79:0::1;11996:400:1::0;29136:79:0::1;29226:15;:43:::0;;-1:-1:-1;;;;;;29226:43:0::1;-1:-1:-1::0;;;;;29226:43:0;;;::::1;::::0;;;::::1;::::0;;29052:225::o;8638:150::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;8731:6:::1;::::0;8710:40:::1;::::0;8747:1:::1;::::0;-1:-1:-1;;;;;8731:6:0::1;::::0;8710:40:::1;::::0;8747:1;;8710:40:::1;8761:6;:19:::0;;-1:-1:-1;;;;;;8761:19:0::1;::::0;;8638:150::o;14985:154::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;15039:14:::1;:22:::0;;-1:-1:-1;;15039:22:0;;::::1;::::0;;;15072:20:::1;:28:::0;;;;::::1;::::0;;15116:15:::1;::::0;::::1;::::0;15056:5:::1;::::0;15116:15:::1;14985:154::o:0;17755:260::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;17851:4:::1;17847:104;;17889:6;::::0;-1:-1:-1;;;;;17889:6:0;;::::1;17879:16:::0;;::::1;::::0;17871:68:::1;;;::::0;-1:-1:-1;;;17871:68:0;;12603:2:1;17871:68:0::1;::::0;::::1;12585:21:1::0;12642:2;12622:18;;;12615:30;12681:34;12661:18;;;12654:62;12752:9;12732:18;;;12725:37;12779:19;;17871:68:0::1;12401:403:1::0;17871:68:0::1;-1:-1:-1::0;;;;;17961:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;17961:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17755:260::o;14603:330::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;14685:13:::1;::::0;::::1;::::0;::::1;;;14684:14;14676:50;;;::::0;-1:-1:-1;;;14676:50:0;;13011:2:1;14676:50:0::1;::::0;::::1;12993:21:1::0;13050:2;13030:18;;;13023:30;13089:25;13069:18;;;13062:53;13132:18;;14676:50:0::1;12809:347:1::0;14676:50:0::1;14737:13;:20:::0;;-1:-1:-1;;14768:18:0;;;;;14818:12:::1;14797:18;:33:::0;;;14862:31:::1;::::0;14883:10;;14862:31:::1;:::i;:::-;14841:18;:52:::0;14909:16:::1;::::0;::::1;::::0;;;::::1;14603:330:::0;:::o;28113:456::-;8551:6;;28200:10;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;-1:-1:-1;;;;;28231:20:0;::::1;28223:59;;;::::0;-1:-1:-1;;;28223:59:0;;13363:2:1;28223:59:0::1;::::0;::::1;13345:21:1::0;13402:2;13382:18;;;13375:30;13441:28;13421:18;;;13414:56;13487:18;;28223:59:0::1;13161:350:1::0;28223:59:0::1;28319:4;-1:-1:-1::0;;;;;28301:23:0;::::1;::::0;28293:64:::1;;;::::0;-1:-1:-1;;;28293:64:0;;13718:2:1;28293:64:0::1;::::0;::::1;13700:21:1::0;13757:2;13737:18;;;13730:30;13796;13776:18;;;13769:58;13844:18;;28293:64:0::1;13516:352:1::0;28293:64:0::1;28395:39;::::0;-1:-1:-1;;;28395:39:0;;28428:4:::1;28395:39;::::0;::::1;731:74:1::0;28368:24:0::1;::::0;-1:-1:-1;;;;;28395:24:0;::::1;::::0;::::1;::::0;704:18:1;;28395:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28453:46;::::0;-1:-1:-1;;;28453:46:0;;-1:-1:-1;;;;;14254:55:1;;;28453:46:0::1;::::0;::::1;14236:74:1::0;14326:18;;;14319:34;;;28368:66:0;;-1:-1:-1;28453:23:0;;::::1;::::0;::::1;::::0;14209:18:1;;28453:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28515;::::0;;-1:-1:-1;;;;;14254:55:1;;14236:74;;14341:2;14326:18;;14319:34;;;28445:54:0;;-1:-1:-1;28515:46:0::1;::::0;14209:18:1;28515:46:0::1;;;;;;;28212:357;28113:456:::0;;;;:::o;4111:104::-;4167:13;4200:7;4193:14;;;;;:::i;18023:295::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;18132:6:::1;::::0;-1:-1:-1;;;;;18132:6:0;;::::1;18124:14:::0;;::::1;::::0;18116:84:::1;;;::::0;-1:-1:-1;;;18116:84:0;;14816:2:1;18116:84:0::1;::::0;::::1;14798:21:1::0;14855:2;14835:18;;;14828:30;14894:34;14874:18;;;14867:62;14965:27;14945:18;;;14938:55;15010:19;;18116:84:0::1;14614:421:1::0;18116:84:0::1;18213:41;18242:4;18248:5;18213:28;:41::i;:::-;18270:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;18270:40:0;::::1;::::0;::::1;::::0;;;::::1;18023:295:::0;;:::o;5817:413::-;232:10;5910:4;5954:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5954:34:0;;;;;;;;;;6007:35;;;;5999:85;;;;-1:-1:-1;;;5999:85:0;;15242:2:1;5999:85:0;;;15224:21:1;15281:2;15261:18;;;15254:30;15320:34;15300:18;;;15293:62;-1:-1:-1;;;15371:18:1;;;15364:35;15416:19;;5999:85:0;15040:401:1;5999:85:0;6120:67;232:10;6143:7;6171:15;6152:16;:34;6120:8;:67::i;:::-;-1:-1:-1;6218:4:0;;5817:413;-1:-1:-1;;;5817:413:0:o;4575:175::-;4661:4;4678:42;232:10;4702:9;4713:6;4678:9;:42::i;20127:182::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;-1:-1:-1;;;;;20212:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20212:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20267:34;;1435:41:1;;;20267:34:0::1;::::0;1408:18:1;20267:34:0::1;;;;;;;20127:182:::0;;:::o;16206:284::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;16328:4:::1;16322;16302:13;4412:12:::0;;;4324:108;16302:13:::1;:17;::::0;16318:1:::1;16302:17;:::i;:::-;:24;;;;:::i;:::-;16301:31;;;;:::i;:::-;16291:6;:41;;16283:98;;;::::0;-1:-1:-1;;;16283:98:0;;15648:2:1;16283:98:0::1;::::0;::::1;15630:21:1::0;15687:2;15667:18;;;15660:30;15726:34;15706:18;;;15699:62;15797:14;15777:18;;;15770:42;15829:19;;16283:98:0::1;15446:408:1::0;16283:98:0::1;16410:17;:6:::0;16420::::1;16410:17;:::i;:::-;16392:15;:35:::0;;;16443:39:::1;::::0;2763:25:1;;;16443:39:0::1;::::0;2751:2:1;2736:18;16443:39:0::1;2617:177:1::0;16560:346:0;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;16683:6:::1;16663:13;4412:12:::0;;;4324:108;16663:13:::1;:17;::::0;16679:1:::1;16663:17;:::i;:::-;:26;;;;:::i;:::-;16650:9;:39;;16642:105;;;::::0;-1:-1:-1;;;16642:105:0;;16061:2:1;16642:105:0::1;::::0;::::1;16043:21:1::0;16100:2;16080:18;;;16073:30;16139:34;16119:18;;;16112:62;16210:23;16190:18;;;16183:51;16251:19;;16642:105:0::1;15859:417:1::0;16642:105:0::1;16798:4;16778:13;4412:12:::0;;;4324:108;16778:13:::1;:17;::::0;16794:1:::1;16778:17;:::i;:::-;:24;;;;:::i;:::-;16765:9;:37;;16757:102;;;::::0;-1:-1:-1;;;16757:102:0;;16483:2:1;16757:102:0::1;::::0;::::1;16465:21:1::0;16522:2;16502:18;;;16495:30;16561:34;16541:18;;;16534:62;16632:22;16612:18;;;16605:50;16672:19;;16757:102:0::1;16281:416:1::0;16757:102:0::1;16869:18;:30:::0;16560:346::o;15924:274::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;16044:4:::1;16038;16018:13;4412:12:::0;;;4324:108;16018:13:::1;:17;::::0;16034:1:::1;16018:17;:::i;:::-;:24;;;;:::i;:::-;16017:31;;;;:::i;:::-;16007:6;:41;;15999:96;;;::::0;-1:-1:-1;;;15999:96:0;;16904:2:1;15999:96:0::1;::::0;::::1;16886:21:1::0;16943:2;16923:18;;;16916:30;16982:34;16962:18;;;16955:62;17053:12;17033:18;;;17026:40;17083:19;;15999:96:0::1;16702:406:1::0;15999:96:0::1;16122:17;:6:::0;16132::::1;16122:17;:::i;:::-;16106:13;:33:::0;;;16155:35:::1;::::0;2763:25:1;;;16155:35:0::1;::::0;2751:2:1;2736:18;16155:35:0::1;2617:177:1::0;19508:611:0;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;19587:2:::1;19567:17;:22:::0;;;19619:1:::1;19600:16;:20:::0;;;-1:-1:-1;19631:15:0::1;:19:::0;;;19661:11:::1;:15:::0;;;-1:-1:-1;;;19703:36:0::1;::::0;::::1;:::i;:::-;:54;;;;:::i;:::-;:68;;;;:::i;:::-;19687:13;:84:::0;;;19807:2:::1;-1:-1:-1::0;19790:19:0::1;19782:56;;;::::0;-1:-1:-1;;;19782:56:0;;17315:2:1;19782:56:0::1;::::0;::::1;17297:21:1::0;17354:2;17334:18;;;17327:30;17393:26;17373:18;;;17366:54;17437:18;;19782:56:0::1;17113:348:1::0;19782:56:0::1;19870:1;19851:16;:20:::0;;;19900:1:::1;19882:15;:19:::0;;;-1:-1:-1;19912:14:0::1;:18:::0;;;19941:10:::1;:14:::0;;;-1:-1:-1;;;19981:34:0::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;:64;;;;:::i;:::-;19966:12;:79:::0;;;20080:2:::1;-1:-1:-1::0;20064:18:0::1;20056:55;;;::::0;-1:-1:-1;;;20056:55:0;;17668:2:1;20056:55:0::1;::::0;::::1;17650:21:1::0;17707:2;17687:18;;;17680:30;17746:26;17726:18;;;17719:54;17790:18;;20056:55:0::1;17466:348:1::0;20056:55:0::1;19508:611::o:0;19038:462::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;19179:17:::1;:34:::0;;;19224:16:::1;:32:::0;;;19267:15:::1;:30:::0;;;19308:11:::1;:22:::0;;;19322:8;19285:12;19357:36:::1;19243:13:::0;19199:14;19357:36:::1;:::i;:::-;:54;;;;:::i;:::-;:68;;;;:::i;:::-;19341:13;:84:::0;;;19461:2:::1;-1:-1:-1::0;19444:19:0::1;19436:56;;;::::0;-1:-1:-1;;;19436:56:0;;17315:2:1;19436:56:0::1;::::0;::::1;17297:21:1::0;17354:2;17334:18;;;17327:30;17393:26;17373:18;;;17366:54;17437:18;;19436:56:0::1;17113:348:1::0;15147:118:0;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;-1:-1:-1;;;;;15231:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:26;;-1:-1:-1;;15231:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15147:118::o;15541:98::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;15603:20:::1;:28:::0;;-1:-1:-1;;15603:28:0::1;::::0;;15541:98::o;8796:244::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;-1:-1:-1;;;;;8885:22:0;::::1;8877:73;;;::::0;-1:-1:-1;;;8877:73:0;;18021:2:1;8877:73:0::1;::::0;::::1;18003:21:1::0;18060:2;18040:18;;;18033:30;18099:34;18079:18;;;18072:62;18170:8;18150:18;;;18143:36;18196:19;;8877:73:0::1;17819:402:1::0;8877:73:0::1;8987:6;::::0;8966:38:::1;::::0;-1:-1:-1;;;;;8966:38:0;;::::1;::::0;8987:6:::1;::::0;8966:38:::1;::::0;8987:6:::1;::::0;8966:38:::1;9015:6;:17:::0;;-1:-1:-1;;;;;;9015:17:0::1;-1:-1:-1::0;;;;;9015:17:0;;;::::1;::::0;;;::::1;::::0;;8796:244::o;28639:160::-;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;28733:58:::1;::::0;28697:12:::1;::::0;28741:10:::1;::::0;28765:21:::1;::::0;28697:12;28733:58;28697:12;28733:58;28765:21;28741:10;28733:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29744:616:::0;8551:6;;-1:-1:-1;;;;;8551:6:0;232:10;8551:22;8543:67;;;;-1:-1:-1;;;8543:67:0;;8109:2:1;8543:67:0;;;8091:21:1;;;8128:18;;;8121:30;-1:-1:-1;;;;;;;;;;;8167:18:1;;;8160:62;8239:18;;8543:67:0;7907:356:1;8543:67:0;29841:8:::1;29826:11;:23;;29818:107;;;::::0;-1:-1:-1;;;29818:107:0;;18638:2:1;29818:107:0::1;::::0;::::1;18620:21:1::0;18677:2;18657:18;;;18650:30;18716:34;18696:18;;;18689:62;18787:34;18767:18;;;18760:62;18859:9;18838:19;;;18831:38;18886:19;;29818:107:0::1;18436:475:1::0;29818:107:0::1;29962:16;::::0;;29976:1:::1;29962:16:::0;;;;;::::1;::::0;;29938:21:::1;::::0;29962:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;29999:9:0::1;::::0;:16:::1;::::0;;-1:-1:-1;;;29999:16:0;;;;29938:40;;-1:-1:-1;;;;;;29999:9:0;;::::1;::::0;:14:::1;::::0;-1:-1:-1;29999:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29989:4;29994:1;29989:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1::0;;;;;29989:26:0::1;;;-1:-1:-1::0;;;;;29989:26:0::1;;;::::0;::::1;30044:4;30026;30031:1;30026:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30026:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30088:9:::1;::::0;:219:::1;::::0;-1:-1:-1;;;30088:219:0;;:9;::::1;::::0;:60:::1;::::0;30156:11;;30088:219:::1;::::0;:9:::1;::::0;30232:4;;30259:6:::1;::::0;30281:15:::1;::::0;30088:219:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;30323:29;30340:11;30323:29;;;;2763:25:1::0;;2751:2;2736:18;;2617:177;30323:29:0::1;;;;;;;;29807:553;29744:616:::0;:::o;7717:380::-;-1:-1:-1;;;;;7853:19:0;;7845:68;;;;-1:-1:-1;;;7845:68:0;;20401:2:1;7845:68:0;;;20383:21:1;20440:2;20420:18;;;20413:30;20479:34;20459:18;;;20452:62;-1:-1:-1;;;20530:18:1;;;20523:34;20574:19;;7845:68:0;20199:400:1;7845:68:0;-1:-1:-1;;;;;7932:21:0;;7924:68;;;;-1:-1:-1;;;7924:68:0;;20806:2:1;7924:68:0;;;20788:21:1;20845:2;20825:18;;;20818:30;20884:34;20864:18;;;20857:62;-1:-1:-1;;;20935:18:1;;;20928:32;20977:19;;7924:68:0;20604:398:1;7924:68:0;-1:-1:-1;;;;;8005:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8057:32;;2763:25:1;;;8057:32:0;;2736:18:1;8057:32:0;;;;;;;;7717:380;;;:::o;6238:614::-;-1:-1:-1;;;;;6378:20:0;;6370:70;;;;-1:-1:-1;;;6370:70:0;;21209:2:1;6370:70:0;;;21191:21:1;21248:2;21228:18;;;21221:30;21287:34;21267:18;;;21260:62;-1:-1:-1;;;21338:18:1;;;21331:35;21383:19;;6370:70:0;21007:401:1;6370:70:0;-1:-1:-1;;;;;6459:23:0;;6451:71;;;;-1:-1:-1;;;6451:71:0;;21615:2:1;6451:71:0;;;21597:21:1;21654:2;21634:18;;;21627:30;21693:34;21673:18;;;21666:62;-1:-1:-1;;;21744:18:1;;;21737:33;21787:19;;6451:71:0;21413:399:1;6451:71:0;-1:-1:-1;;;;;6559:17:0;;6535:21;6559:17;;;;;;;;;;;6595:23;;;;6587:74;;;;-1:-1:-1;;;6587:74:0;;22019:2:1;6587:74:0;;;22001:21:1;22058:2;22038:18;;;22031:30;22097:34;22077:18;;;22070:62;22168:8;22148:18;;;22141:36;22194:19;;6587:74:0;21817:402:1;6587:74:0;-1:-1:-1;;;;;6697:17:0;;;:9;:17;;;;;;;;;;;6717:22;;;6697:42;;6761:20;;;;;;;;:30;;6733:6;;6697:9;6761:30;;6733:6;;6761:30;:::i;:::-;;;;;;;;6826:9;-1:-1:-1;;;;;6809:35:0;6818:6;-1:-1:-1;;;;;6809:35:0;;6837:6;6809:35;;;;2763:25:1;;2751:2;2736:18;;2617:177;6809:35:0;;;;;;;;6359:493;6238:614;;;:::o;20317:4910::-;-1:-1:-1;;;;;20417:18:0;;20409:68;;;;-1:-1:-1;;;20409:68:0;;21209:2:1;20409:68:0;;;21191:21:1;21248:2;21228:18;;;21221:30;21287:34;21267:18;;;21260:62;-1:-1:-1;;;21338:18:1;;;21331:35;21383:19;;20409:68:0;21007:401:1;20409:68:0;-1:-1:-1;;;;;20496:16:0;;20488:64;;;;-1:-1:-1;;;20488:64:0;;21615:2:1;20488:64:0;;;21597:21:1;21654:2;21634:18;;;21627:30;21693:34;21673:18;;;21666:62;-1:-1:-1;;;21744:18:1;;;21737:33;21787:19;;20488:64:0;21413:399:1;20488:64:0;20580:1;20571:6;:10;20563:52;;;;-1:-1:-1;;;20563:52:0;;22426:2:1;20563:52:0;;;22408:21:1;22465:2;22445:18;;;22438:30;22504:31;22484:18;;;22477:59;22553:18;;20563:52:0;22224:353:1;20563:52:0;20632:13;;;;;;;20628:132;;-1:-1:-1;;;;;20669:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;20698:23:0;;;;;;:19;:23;;;;;;;;20669:52;20661:87;;;;-1:-1:-1;;;20661:87:0;;22784:2:1;20661:87:0;;;22766:21:1;22823:2;22803:18;;;22796:30;22862:24;22842:18;;;22835:52;22904:18;;20661:87:0;22582:346:1;20661:87:0;20775:18;;:22;20772:196;;-1:-1:-1;;;;;20822:17:0;;;;;;:11;:17;;;;;;;;20821:18;;:35;;-1:-1:-1;8489:6:0;;-1:-1:-1;;;;;20843:13:0;;;8489:6;;20843:13;20821:35;:60;;;-1:-1:-1;;;;;;20860:21:0;;20874:6;20860:21;20821:60;20813:143;;;;-1:-1:-1;;;20813:143:0;;23135:2:1;20813:143:0;;;23117:21:1;23174:2;23154:18;;;23147:30;23213:34;23193:18;;;23186:62;23284:34;23264:18;;;23257:62;23356:8;23335:19;;;23328:37;23382:19;;20813:143:0;22933:474:1;20813:143:0;20983:14;;;;20980:1649;;;8489:6;;-1:-1:-1;;;;;21017:15:0;;;8489:6;;21017:15;;;;:32;;-1:-1:-1;8489:6:0;;-1:-1:-1;;;;;21036:13:0;;;8489:6;;21036:13;;21017:32;:52;;;;-1:-1:-1;;;;;;21053:16:0;;;;21017:52;:77;;;;-1:-1:-1;;;;;;21073:21:0;;21087:6;21073:21;;21017:77;:107;;;;-1:-1:-1;;;;;;21099:25:0;;;;;;:19;:25;;;;;;;;21098:26;21017:107;:135;;;;-1:-1:-1;;;;;;21129:23:0;;;;;;:19;:23;;;;;;;;21128:24;21017:135;21013:1605;;;21310:20;;;;21306:506;;;21372:9;;-1:-1:-1;;;;;21358:24:0;;;21372:9;;21358:24;;;;:49;;-1:-1:-1;21400:6:0;;-1:-1:-1;;;;;21386:21:0;;;21400:6;;21386:21;;21358:49;21354:439;;;21485:16;21500:1;21485:12;:16;:::i;:::-;21472:9;21443:39;;;;:28;:39;;;;;;:58;:113;;;;-1:-1:-1;21540:16:0;21555:1;21540:12;:16;:::i;:::-;-1:-1:-1;;;;;21505:32:0;;;;;;:28;:32;;;;;;:51;21443:113;21435:179;;;;-1:-1:-1;;;21435:179:0;;23747:2:1;21435:179:0;;;23729:21:1;23786:2;23766:18;;;23759:30;23825:34;23805:18;;;23798:62;23896:23;23876:18;;;23869:51;23937:19;;21435:179:0;23545:417:1;21435:179:0;21670:9;21641:39;;;;:28;:39;;;;;;21683:12;21641:54;;;;-1:-1:-1;;;;;21722:32:0;;;;;;:47;21354:439;-1:-1:-1;;;;;21864:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;21900:35:0;;;;;;:31;:35;;;;;;;;21899:36;21864:71;21860:743;;;21982:12;;21972:6;:22;;21964:75;;;;-1:-1:-1;;;21964:75:0;;24169:2:1;21964:75:0;;;24151:21:1;24208:2;24188:18;;;24181:30;24247:34;24227:18;;;24220:62;24318:10;24298:18;;;24291:38;24346:19;;21964:75:0;23967:404:1;21964:75:0;22100:15;;-1:-1:-1;;;;;4541:18:0;;4514:7;4541:18;;;;;;;;;;;22074:22;;:6;:22;:::i;:::-;:41;;22066:78;;;;-1:-1:-1;;;22066:78:0;;24578:2:1;22066:78:0;;;24560:21:1;24617:2;24597:18;;;24590:30;24656:26;24636:18;;;24629:54;24700:18;;22066:78:0;24376:348:1;22066:78:0;21860:743;;;-1:-1:-1;;;;;22220:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;22254:37:0;;;;;;:31;:37;;;;;;;;22253:38;22220:71;22216:387;;;22338:13;;22328:6;:23;;22320:78;;;;-1:-1:-1;;;22320:78:0;;24931:2:1;22320:78:0;;;24913:21:1;24970:2;24950:18;;;24943:30;25009:34;24989:18;;;24982:62;25080:12;25060:18;;;25053:40;25110:19;;22320:78:0;24729:406:1;22216:387:0;-1:-1:-1;;;;;22446:35:0;;;;;;:31;:35;;;;;;;;22441:162;;22539:15;;-1:-1:-1;;;;;4541:18:0;;4514:7;4541:18;;;;;;;;;;;22513:22;;:6;:22;:::i;:::-;:41;;22505:78;;;;-1:-1:-1;;;22505:78:0;;24578:2:1;22505:78:0;;;24560:21:1;24617:2;24597:18;;;24590:30;24656:26;24636:18;;;24629:54;24700:18;;22505:78:0;24376:348:1;22505:78:0;22690:4;22641:28;4541:18;;;;;;;;;;;22748;;22724:42;;;;;;;22782:22;;-1:-1:-1;22793:11:0;;;;;;;22782:22;:35;;;;-1:-1:-1;22809:8:0;;-1:-1:-1;;;22809:8:0;;;;22808:9;22782:35;:71;;;;-1:-1:-1;;;;;;22822:31:0;;;;;;:25;:31;;;;;;;;22821:32;22782:71;:101;;;;-1:-1:-1;;;;;;22858:25:0;;;;;;:19;:25;;;;;;;;22857:26;22782:101;:129;;;;-1:-1:-1;;;;;;22888:23:0;;;;;;:19;:23;;;;;;;;22887:24;22782:129;22779:236;;;22928:8;:15;;-1:-1:-1;;;;22928:15:0;-1:-1:-1;;;22928:15:0;;;22960:10;:8;:10::i;:::-;22987:8;:16;;-1:-1:-1;;;;22987:16:0;;;22779:236;-1:-1:-1;;;;;23145:25:0;;23027:12;23145:25;;;:19;:25;;;;;;23042:4;;23145:25;;;:52;;-1:-1:-1;;;;;;23174:23:0;;;;;;:19;:23;;;;;;;;23145:52;23142:99;;;-1:-1:-1;23224:5:0;23142:99;23253:12;23357:7;23354:1820;;;25329:18;;25314:12;:33;23419:60;;;;-1:-1:-1;;;;;;23448:31:0;;;;;;:25;:31;;;;;;;;23419:60;:94;;;;-1:-1:-1;;;;;;23484:29:0;;;;;;:25;:29;;;;;;;;23483:30;23419:94;:114;;;;;23532:1;23517:12;;:16;23419:114;23416:1614;;;-1:-1:-1;;;;;23559:15:0;;;;;;:11;:15;;;;;;;;23555:171;;-1:-1:-1;;;;;23598:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;23598:22:0;23616:4;23598:22;;;;;;23643:10;:15;;23616:4;;23643:10;;:15;;23616:4;;23643:15;:::i;:::-;;;;-1:-1:-1;;23686:20:0;;-1:-1:-1;;;;;749:55:1;;731:74;;23686:20:0;;719:2:1;704:18;23686:20:0;;;;;;;23555:171;23767:3;23753:11;:6;23762:2;23753:11;:::i;:::-;:17;;;;:::i;:::-;23746:24;;23833:12;;23815:15;;23808:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;23786:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;23913:12:0;;23894:16;;23887:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;23864:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;23989:12:0;;23972:14;;23965:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;23944:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;24057:12:0;;24044:10;;24037:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;24020:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;23416:1614:0;;-1:-1:-1;23416:1614:0;;-1:-1:-1;;;;;24134:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;24183:1;24167:13;;:17;24134:50;24130:900;;;24236:3;24220:13;;24211:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;24204:35;;24306:13;;24287:16;;24280:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;24258:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24388:13:0;;24368:17;;24361:24;;:4;:24;:::i;:::-;:40;;;;:::i;:::-;24338:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24466:13:0;;24448:15;;24441:22;;:4;:22;:::i;:::-;:38;;;;:::i;:::-;24420:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24536:13:0;;24522:11;;24515:18;;:4;:18;:::i;24130:900::-;-1:-1:-1;;;;;24612:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;24662:1;24647:12;;:16;24612:51;24609:421;;;24712:3;24697:12;;24688:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;24681:34;;24778:12;;24760:15;;24753:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;24731:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;24858:12:0;;24839:16;;24832:23;;:4;:23;:::i;:::-;:38;;;;:::i;:::-;24809:19;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;24934:12:0;;24917:14;;24910:21;;:4;:21;:::i;:::-;:36;;;;:::i;:::-;24889:17;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;25002:12:0;;24989:10;;24982:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;24965:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;24609:421:0;25049:8;;25046:89;;25077:42;25093:4;25107;25114;25077:15;:42::i;:::-;25148:14;25158:4;25148:14;;:::i;:::-;;;23354:1820;25186:33;25202:4;25208:2;25212:6;25186:15;:33::i;:::-;20396:4831;;;;20317:4910;;;:::o;26472:1633::-;26532:1;26516:13;;:17;:62;;;;-1:-1:-1;26565:13:0;;26555:4;4514:7;4541:18;;;;;;;;;;;26537:41;;26516:62;26513:129;;;26595:35;26609:4;26616:13;;26595:5;:35::i;:::-;26668:1;26652:13;:17;;;26726:4;4541:18;;;;;;;;;;26682:50;;26743:25;26814:17;;26792:19;;26771:18;;:40;;;;:::i;:::-;:60;;;;:::i;:::-;26743:88;-1:-1:-1;26847:20:0;;;:46;;-1:-1:-1;26871:22:0;;26847:46;26844:60;;;26896:7;;26472:1633::o;26844:60::-;26937:18;;:23;;26958:2;26937:23;:::i;:::-;26919:15;:41;26916:113;;;26994:18;;:23;;27015:2;26994:23;:::i;:::-;26976:41;;26916:113;27041:12;27115:23;27200:1;27180:17;27159:18;;27141:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;27115:86;-1:-1:-1;27214:51:0;27231:33;27115:86;27231:15;:33;:::i;:::-;27214:16;:51::i;:::-;27464:18;;27299:21;;;;27278:18;;27464:20;;27483:1;;27464:20;:::i;:::-;27443:42;;:17;:42;:::i;:::-;27420:19;;27407:32;;:10;:32;:::i;:::-;:79;;;;:::i;:::-;27380:106;;27497:22;27596:1;27577:18;;:20;;;;:::i;:::-;27556:42;;:17;:42;:::i;:::-;27535:17;;27522:30;;:10;:30;:::i;:::-;:77;;;;:::i;:::-;27497:102;-1:-1:-1;27631:33:0;27497:102;27631:16;:33;:::i;:::-;27612:52;;;;:::i;:::-;27698:1;27677:18;:22;;;27710:19;:23;;;27744:17;:21;;;27776:13;:17;27612:52;-1:-1:-1;27809:19:0;;;;;:42;;;27850:1;27832:15;:19;27809:42;27806:119;;;27867:46;27880:15;27897;27867:12;:46::i;:::-;27958:15;;27950:56;;-1:-1:-1;;;;;27958:15:0;;;;27987:14;;27950:56;;;;27987:14;27958:15;27950:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28040:17:0;;28032:65;;27937:69;;-1:-1:-1;;;;;;28040:17:0;;28071:21;;28032:65;;;;28071:21;28040:17;28032:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;26472:1633:0:o;18326:240::-;-1:-1:-1;;;;;18409:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;18409:39:0;;;;;;;18461;18409:31;:39;18461:26;:39::i;7159:550::-;-1:-1:-1;;;;;7243:21:0;;7235:67;;;;-1:-1:-1;;;7235:67:0;;25342:2:1;7235:67:0;;;25324:21:1;25381:2;25361:18;;;25354:30;25420:34;25400:18;;;25393:62;-1:-1:-1;;;25471:18:1;;;25464:31;25512:19;;7235:67:0;25140:397:1;7235:67:0;-1:-1:-1;;;;;7338:18:0;;7313:22;7338:18;;;;;;;;;;;7375:24;;;;7367:71;;;;-1:-1:-1;;;7367:71:0;;25744:2:1;7367:71:0;;;25726:21:1;25783:2;25763:18;;;25756:30;25822:34;25802:18;;;25795:62;-1:-1:-1;;;25873:18:1;;;25866:32;25915:19;;7367:71:0;25542:398:1;7367:71:0;-1:-1:-1;;;;;7474:18:0;;:9;:18;;;;;;;;;;;7495:23;;;7474:44;;7613:12;:22;;;;;;;7664:37;2763:25:1;;;7474:9:0;;:18;7664:37;;2736:18:1;7664:37:0;2617:177:1;25363:573:0;25515:16;;;25529:1;25515:16;;;;;;;;25491:21;;25515:16;;;;;;;;;;-1:-1:-1;25515:16:0;25491:40;;25560:4;25542;25547:1;25542:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25542:23:0;;;:7;;;;;;;;;;:23;;;;25586:9;;:16;;;-1:-1:-1;;;25586:16:0;;;;:9;;;;;:14;;:16;;;;;25542:7;;25586:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25576:4;25581:1;25576:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25576:26:0;;;:7;;;;;;;;;:26;25647:9;;25615:56;;25632:4;;25647:9;25659:11;25615:8;:56::i;:::-;25710:9;;:218;;-1:-1:-1;;;25710:218:0;;-1:-1:-1;;;;;25710:9:0;;;;:60;;:218;;25785:11;;25710:9;;25855:4;;25882;;25902:15;;25710:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25418:518;25363:573;:::o;25944:520::-;26124:9;;26092:56;;26109:4;;-1:-1:-1;;;;;26124:9:0;26136:11;26092:8;:56::i;:::-;26191:9;;26397:17;;26191:265;;-1:-1:-1;;;26191:265:0;;26257:4;26191:265;;;26919:34:1;26969:18;;;26962:34;;;26191:9:0;27012:18:1;;;27005:34;;;27055:18;;;27048:34;-1:-1:-1;;;;;26397:17:0;;;27098:19:1;;;27091:44;26430:15:0;27151:19:1;;;27144:35;26191:9:0;;;:25;;26224:9;;26830:19:1;;26191:265:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25944:520;;:::o;16914:207::-;-1:-1:-1;;;;;17002:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;17002:52:0;;;;;;;;;;17070:43;;27669:74:1;;;27759:18;;;27752:50;17070:43:0;;27642:18:1;17070:43:0;27501:307:1;14:548;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;816:154::-;-1:-1:-1;;;;;895:5:1;891:54;884:5;881:65;871:93;;960:1;957;950:12;871:93;816:154;:::o;975:315::-;1043:6;1051;1104:2;1092:9;1083:7;1079:23;1075:32;1072:52;;;1120:1;1117;1110:12;1072:52;1159:9;1146:23;1178:31;1203:5;1178:31;:::i;:::-;1228:5;1280:2;1265:18;;;;1252:32;;-1:-1:-1;;;975:315:1:o;1487:247::-;1546:6;1599:2;1587:9;1578:7;1574:23;1570:32;1567:52;;;1615:1;1612;1605:12;1567:52;1654:9;1641:23;1673:31;1698:5;1673:31;:::i;:::-;1723:5;1487:247;-1:-1:-1;;;1487:247:1:o;1739:118::-;1825:5;1818:13;1811:21;1804:5;1801:32;1791:60;;1847:1;1844;1837:12;1862:750;1954:6;1962;1970;2023:2;2011:9;2002:7;1998:23;1994:32;1991:52;;;2039:1;2036;2029:12;1991:52;2079:9;2066:23;2108:18;2149:2;2141:6;2138:14;2135:34;;;2165:1;2162;2155:12;2135:34;2203:6;2192:9;2188:22;2178:32;;2248:7;2241:4;2237:2;2233:13;2229:27;2219:55;;2270:1;2267;2260:12;2219:55;2310:2;2297:16;2336:2;2328:6;2325:14;2322:34;;;2352:1;2349;2342:12;2322:34;2407:7;2400:4;2390:6;2387:1;2383:14;2379:2;2375:23;2371:34;2368:47;2365:67;;;2428:1;2425;2418:12;2365:67;2459:4;2451:13;;;;-1:-1:-1;2483:6:1;-1:-1:-1;;2524:20:1;;2511:34;2554:28;2511:34;2554:28;:::i;:::-;2601:5;2591:15;;;1862:750;;;;;:::o;2799:127::-;2860:10;2855:3;2851:20;2848:1;2841:31;2891:4;2888:1;2881:15;2915:4;2912:1;2905:15;2931:275;3002:2;2996:9;3067:2;3048:13;;-1:-1:-1;;3044:27:1;3032:40;;3102:18;3087:34;;3123:22;;;3084:62;3081:88;;;3149:18;;:::i;:::-;3185:2;3178:22;2931:275;;-1:-1:-1;2931:275:1:o;3211:183::-;3271:4;3304:18;3296:6;3293:30;3290:56;;;3326:18;;:::i;:::-;-1:-1:-1;3371:1:1;3367:14;3383:4;3363:25;;3211:183::o;3399:662::-;3453:5;3506:3;3499:4;3491:6;3487:17;3483:27;3473:55;;3524:1;3521;3514:12;3473:55;3560:6;3547:20;3586:4;3610:60;3626:43;3666:2;3626:43;:::i;:::-;3610:60;:::i;:::-;3704:15;;;3790:1;3786:10;;;;3774:23;;3770:32;;;3735:12;;;;3814:15;;;3811:35;;;3842:1;3839;3832:12;3811:35;3878:2;3870:6;3866:15;3890:142;3906:6;3901:3;3898:15;3890:142;;;3972:17;;3960:30;;4010:12;;;;3923;;3890:142;;;-1:-1:-1;4050:5:1;3399:662;-1:-1:-1;;;;;;3399:662:1:o;4066:1215::-;4184:6;4192;4245:2;4233:9;4224:7;4220:23;4216:32;4213:52;;;4261:1;4258;4251:12;4213:52;4301:9;4288:23;4330:18;4371:2;4363:6;4360:14;4357:34;;;4387:1;4384;4377:12;4357:34;4425:6;4414:9;4410:22;4400:32;;4470:7;4463:4;4459:2;4455:13;4451:27;4441:55;;4492:1;4489;4482:12;4441:55;4528:2;4515:16;4550:4;4574:60;4590:43;4630:2;4590:43;:::i;4574:60::-;4668:15;;;4750:1;4746:10;;;;4738:19;;4734:28;;;4699:12;;;;4774:19;;;4771:39;;;4806:1;4803;4796:12;4771:39;4830:11;;;;4850:217;4866:6;4861:3;4858:15;4850:217;;;4946:3;4933:17;4963:31;4988:5;4963:31;:::i;:::-;5007:18;;4883:12;;;;5045;;;;4850:217;;;5086:5;-1:-1:-1;;5129:18:1;;5116:32;;-1:-1:-1;;5160:16:1;;;5157:36;;;5189:1;5186;5179:12;5157:36;;5212:63;5267:7;5256:8;5245:9;5241:24;5212:63;:::i;:::-;5202:73;;;4066:1215;;;;;:::o;5286:456::-;5363:6;5371;5379;5432:2;5420:9;5411:7;5407:23;5403:32;5400:52;;;5448:1;5445;5438:12;5400:52;5487:9;5474:23;5506:31;5531:5;5506:31;:::i;:::-;5556:5;-1:-1:-1;5613:2:1;5598:18;;5585:32;5626:33;5585:32;5626:33;:::i;:::-;5286:456;;5678:7;;-1:-1:-1;;;5732:2:1;5717:18;;;;5704:32;;5286:456::o;5747:180::-;5806:6;5859:2;5847:9;5838:7;5834:23;5830:32;5827:52;;;5875:1;5872;5865:12;5827:52;-1:-1:-1;5898:23:1;;5747:180;-1:-1:-1;5747:180:1:o;5932:385::-;6018:6;6026;6034;6042;6095:3;6083:9;6074:7;6070:23;6066:33;6063:53;;;6112:1;6109;6102:12;6063:53;-1:-1:-1;;6135:23:1;;;6205:2;6190:18;;6177:32;;-1:-1:-1;6256:2:1;6241:18;;6228:32;;6307:2;6292:18;6279:32;;-1:-1:-1;5932:385:1;-1:-1:-1;5932:385:1:o;6742:382::-;6807:6;6815;6868:2;6856:9;6847:7;6843:23;6839:32;6836:52;;;6884:1;6881;6874:12;6836:52;6923:9;6910:23;6942:31;6967:5;6942:31;:::i;:::-;6992:5;-1:-1:-1;7049:2:1;7034:18;;7021:32;7062:30;7021:32;7062:30;:::i;:::-;7111:7;7101:17;;;6742:382;;;;;:::o;7129:388::-;7197:6;7205;7258:2;7246:9;7237:7;7233:23;7229:32;7226:52;;;7274:1;7271;7264:12;7226:52;7313:9;7300:23;7332:31;7357:5;7332:31;:::i;:::-;7382:5;-1:-1:-1;7439:2:1;7424:18;;7411:32;7452:33;7411:32;7452:33;:::i;7522:380::-;7601:1;7597:12;;;;7644;;;7665:61;;7719:4;7711:6;7707:17;7697:27;;7665:61;7772:2;7764:6;7761:14;7741:18;7738:38;7735:161;;7818:10;7813:3;7809:20;7806:1;7799:31;7853:4;7850:1;7843:15;7881:4;7878:1;7871:15;7735:161;;7522:380;;;:::o;8268:127::-;8329:10;8324:3;8320:20;8317:1;8310:31;8360:4;8357:1;8350:15;8384:4;8381:1;8374:15;8400:127;8461:10;8456:3;8452:20;8449:1;8442:31;8492:4;8489:1;8482:15;8516:4;8513:1;8506:15;8532:135;8571:3;8592:17;;;8589:43;;8612:18;;:::i;:::-;-1:-1:-1;8659:1:1;8648:13;;8532:135::o;9863:168::-;9936:9;;;9967;;9984:15;;;9978:22;;9964:37;9954:71;;10005:18;;:::i;10036:217::-;10076:1;10102;10092:132;;10146:10;10141:3;10137:20;10134:1;10127:31;10181:4;10178:1;10171:15;10209:4;10206:1;10199:15;10092:132;-1:-1:-1;10238:9:1;;10036:217::o;10668:125::-;10733:9;;;10754:10;;;10751:36;;;10767:18;;:::i;13873:184::-;13943:6;13996:2;13984:9;13975:7;13971:23;13967:32;13964:52;;;14012:1;14009;14002:12;13964:52;-1:-1:-1;14035:16:1;;13873:184;-1:-1:-1;13873:184:1:o;14364:245::-;14431:6;14484:2;14472:9;14463:7;14459:23;14455:32;14452:52;;;14500:1;14497;14490:12;14452:52;14532:9;14526:16;14551:28;14573:5;14551:28;:::i;18916:251::-;18986:6;19039:2;19027:9;19018:7;19014:23;19010:32;19007:52;;;19055:1;19052;19045:12;19007:52;19087:9;19081:16;19106:31;19131:5;19106:31;:::i;19172:484::-;19225:3;19263:5;19257:12;19290:6;19285:3;19278:19;19316:4;19345:2;19340:3;19336:12;19329:19;;19382:2;19375:5;19371:14;19403:1;19413:218;19427:6;19424:1;19421:13;19413:218;;;19492:13;;-1:-1:-1;;;;;19488:62:1;19476:75;;19571:12;;;;19606:15;;;;19449:1;19442:9;19413:218;;;-1:-1:-1;19647:3:1;;19172:484;-1:-1:-1;;;;;19172:484:1:o;19661:533::-;19932:6;19921:9;19914:25;19975:3;19970:2;19959:9;19955:18;19948:31;19895:4;19996:57;20048:3;20037:9;20033:19;20025:6;19996:57;:::i;:::-;-1:-1:-1;;;;;20089:55:1;;;;20084:2;20069:18;;20062:83;-1:-1:-1;20176:2:1;20161:18;20154:34;19988:65;19661:533;-1:-1:-1;;19661:533:1:o;23412:128::-;23479:9;;;23500:11;;;23497:37;;;23514:18;;:::i;25945:605::-;26244:6;26233:9;26226:25;26287:6;26282:2;26271:9;26267:18;26260:34;26330:3;26325:2;26314:9;26310:18;26303:31;26207:4;26351:57;26403:3;26392:9;26388:19;26380:6;26351:57;:::i;:::-;-1:-1:-1;;;;;26444:55:1;;;;26439:2;26424:18;;26417:83;-1:-1:-1;26531:3:1;26516:19;26509:35;26343:65;25945:605;-1:-1:-1;;;25945:605:1:o;27190:306::-;27278:6;27286;27294;27347:2;27335:9;27326:7;27322:23;27318:32;27315:52;;;27363:1;27360;27353:12;27315:52;27392:9;27386:16;27376:26;;27442:2;27431:9;27427:18;27421:25;27411:35;;27486:2;27475:9;27471:18;27465:25;27455:35;;27190:306;;;;;:::o

Swarm Source

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