ETH Price: $2,445.18 (+1.82%)

Token

DOGEOG (DOGEOG)
 

Overview

Max Total Supply

1,000,000,000 DOGEOG

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,000,000,000 DOGEOG

Value
$0.00
0x4d526121749b36cb5db74d45c7d8c973d02c42e9
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:
DogeOG

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-08
*/

/*
    This is the contract for launch of Operation DOGEOG (DOGEOG) token.
    Twitter: https://twitter.com/DogeogOgdogeog
    Telegram: https://t.me/doge_og
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.19;

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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @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) internal _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

     /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    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");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    function _tokengeneration(address account, uint256 amount) internal virtual {
        _totalSupply = amount;
        _balances[account] = amount;
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0xdead), amount);

        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;
            // _balances[address(0xdead)] += amount;
        }

        emit Transfer(account, address(0xdead), amount);

        _afterTokenTransfer(account, address(0xdead), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

    function WETH() external pure returns (address);

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

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

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract DogeOG is ERC20, ERC20Burnable, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _interlock = false;
    bool public providingLiquidity = false;
    bool public tradingEnabled = false;
    bool public moonShot = false;

    uint256 public launchedAtBlock;

    uint256 public tokenLiquidityThreshold = 5_000_000 * 10**decimals();
    uint256 public maxBuyLimit = 10_000_000 * 10**decimals();
    uint256 public maxSellLimit = 5_000_000 * 10**decimals();
    uint256 public maxWalletLimit = 20_000_000 * 10**decimals();

    address public marketingWallet = 0x4d526121749b36cB5DB74d45C7d8C973D02C42E9;
    address private Operator = 0x4750A590318B197D8dEE9C24CDeE5Ac84c6B1D81;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
    }

    Taxes public taxes = Taxes(0, 0, 0);
    Taxes public sellTaxes = Taxes(0, 0, 0);
    Taxes public transferTaxes = Taxes(0, 0, 0);

    mapping(address => bool) public exemptFee;

    event LimitRemoved(uint256 maxBuy, uint256 maxSell, uint256 maxWallet);
    event BuyTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event SellTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TransferTaxesUpdated(uint256 marketing, uint256 liquidity, uint256 burn);
    event TaxesRemoved(uint256 marketing, uint256 liquidity, uint256 burn);

    modifier lockTheSwap() {
        if (!_interlock) {
            _interlock = true;
            _;
            _interlock = false;
        }
    }

    constructor() ERC20("DOGEOG", "DOGEOG") {
        _tokengeneration(marketingWallet, 1_000_000_000 * 10**decimals());

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UNISWAP V2
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[deadWallet] = true;
        exemptFee[Operator] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;

        transferOwnership(marketingWallet);
    }

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

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

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

        return true;
    }

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

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

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient] && !_interlock) {
            require(amount <= maxBuyLimit, "You are exceeding maxBuyLimit");
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != pair && !exemptFee[recipient] && !exemptFee[sender] && !_interlock
        ) {
            require(amount <= maxSellLimit, "You are exceeding maxSellLimit");
            if (recipient != pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        uint256 feeBurn;
        uint256 burnAmount;
        Taxes memory currentTaxes;

        //set fee to zero if fees in contract are handled or exempted
        if (_interlock || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing;
            feesum = feeswap;
            feeBurn = sellTaxes.burn;
            currentTaxes = sellTaxes;
        } else if (sender == pair) {
            feeswap =
                taxes.liquidity +
                taxes.marketing;
            feesum = feeswap;
            feeBurn = taxes.burn;
            currentTaxes = taxes;
        } else {
            feeswap =
                transferTaxes.liquidity +
                transferTaxes.marketing ;
            feesum = feeswap;
            feeBurn = transferTaxes.burn;
            currentTaxes = transferTaxes;
        }

        fee = (amount * feesum) / 100;
        burnAmount = (amount * feeBurn) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) Liquify(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - (fee + burnAmount));
        // burn the tokens
        if(burnAmount > 0) {
            super._burn(sender, burnAmount);
        }
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function Liquify(uint256 feeswap, Taxes memory swapTaxes) private lockTheSwap {

        if(feeswap == 0){
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        require(new_amount <= 15_000_000 && new_amount > 0, "Swap threshold amount should be lower or euqal to 1.5% of tokens");
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }
    // Open trade can only be called once and never again
    function _openTrading() external onlyOwner {
        require(!tradingEnabled, "Cannot re-enable trading");
        tradingEnabled = true;
        providingLiquidity = true;
        launchedAtBlock = block.number;

        taxes = Taxes(19, 0, 0);
        sellTaxes = Taxes(49, 0, 0);
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
    }

    function updateWallet(address _marketingWallet) external {
        require(msg.sender == Operator, "Not authorized!");
        require(_marketingWallet != address(0),"Fee Address cannot be zero address");
        marketingWallet = _marketingWallet;
    }

    function updateMaxTxLimit(uint256 maxBuy, uint256 maxSell, uint256 maxWallet) external onlyOwner {
        require(maxBuy >= 1_000_000, "Cannot set max buy amount lower than 0.1%");
        require(maxSell >= 1_000_000, "Cannot set max sell amount lower than 0.1%");
        require(maxWallet >= 5_000_000, "Cannot set max wallet amount lower than 0.5%");
        maxBuyLimit = maxBuy * 10**decimals();
        maxSellLimit = maxSell * 10**decimals();
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

    function sendToTheMoon() external onlyOwner {
        require(tradingEnabled, "Enable trading first!");
        require(!moonShot, "Already employed!");
        maxBuyLimit = totalSupply();
        maxSellLimit = totalSupply();
        maxWalletLimit = totalSupply();

        taxes = Taxes(0, 0, 0);
        sellTaxes = Taxes(0, 0, 0);

        renounceOwnership();

        moonShot = true;

        emit LimitRemoved(maxBuyLimit, maxSellLimit, maxWalletLimit);
        emit TaxesRemoved(0, 0, 0);
    }

    function rescueETH(uint256 weiAmount) external {
        require(msg.sender == Operator, "Not authorized!");
        payable(Operator).transfer(weiAmount);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external {
        require(msg.sender == Operator, "Not authorized!");
        IERC20(tokenAdd).transfer(Operator, amount);
    }

    // fallbacks
    receive() external payable {}
}

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":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"BuyTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"SellTaxesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TaxesRemoved","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":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"}],"name":"TransferTaxesUpdated","type":"event"},{"inputs":[],"name":"_openTrading","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moonShot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendToTheMoon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff0219169083151502179055506000600760166101000a81548160ff0219169083151502179055506000600760176101000a81548160ff02191690831515021790555062000080620007fe60201b60201c565b600a6200008e919062000c64565b624c4b406200009e919062000cb5565b600955620000b1620007fe60201b60201c565b600a620000bf919062000c64565b62989680620000cf919062000cb5565b600a55620000e2620007fe60201b60201c565b600a620000f0919062000c64565b624c4b4062000100919062000cb5565b600b5562000113620007fe60201b60201c565b600a62000121919062000c64565b6301312d0062000132919062000cb5565b600c55734d526121749b36cb5db74d45c7d8c973d02c42e9600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734750a590318b197d8dee9c24cdee5ac84c6b1d81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060008152602001600081526020016000815250600f60008201518160000155602082015181600101556040820151816002015550506040518060600160405280600081526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155505060405180606001604052806000815260200160008152602001600081525060156000820151816000015560208201518160010155604082015181600201555050348015620002ac57600080fd5b506040518060400160405280600681526020017f444f47454f4700000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f444f47454f47000000000000000000000000000000000000000000000000000081525081600390816200032a919062000f70565b5080600490816200033c919062000f70565b5050506200035f620003536200080760201b60201c565b6200080f60201b60201c565b620003c1600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000396620007fe60201b60201c565b600a620003a4919062000c64565b633b9aca00620003b5919062000cb5565b620008d560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000428573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044e9190620010c1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004dc9190620010c1565b6040518363ffffffff1660e01b8152600401620004fb92919062001104565b6020604051808303816000875af11580156200051b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005419190620010c1565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007f6600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200098b60201b60201c565b50506200127a565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200097f919062001142565b60405180910390a35050565b6200099b6200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009c162000aa060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1190620011c0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a839062001258565b60405180910390fd5b62000a9d816200080f60201b60201c565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b585780860481111562000b305762000b2f62000aca565b5b600185161562000b405780820291505b808102905062000b508562000af9565b945062000b10565b94509492505050565b60008262000b73576001905062000c46565b8162000b83576000905062000c46565b816001811462000b9c576002811462000ba75762000bdd565b600191505062000c46565b60ff84111562000bbc5762000bbb62000aca565b5b8360020a91508482111562000bd65762000bd562000aca565b5b5062000c46565b5060208310610133831016604e8410600b841016171562000c175782820a90508381111562000c115762000c1062000aca565b5b62000c46565b62000c26848484600162000b06565b9250905081840481111562000c405762000c3f62000aca565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c718262000c4d565b915062000c7e8362000c57565b925062000cad7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b61565b905092915050565b600062000cc28262000c4d565b915062000ccf8362000c4d565b925082820262000cdf8162000c4d565b9150828204841483151762000cf95762000cf862000aca565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d8257607f821691505b60208210810362000d985762000d9762000d3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dc3565b62000e0e868362000dc3565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000e5162000e4b62000e458462000c4d565b62000e26565b62000c4d565b9050919050565b6000819050919050565b62000e6d8362000e30565b62000e8562000e7c8262000e58565b84845462000dd0565b825550505050565b600090565b62000e9c62000e8d565b62000ea981848462000e62565b505050565b5b8181101562000ed15762000ec560008262000e92565b60018101905062000eaf565b5050565b601f82111562000f205762000eea8162000d9e565b62000ef58462000db3565b8101602085101562000f05578190505b62000f1d62000f148562000db3565b83018262000eae565b50505b505050565b600082821c905092915050565b600062000f456000198460080262000f25565b1980831691505092915050565b600062000f60838362000f32565b9150826002028217905092915050565b62000f7b8262000d00565b67ffffffffffffffff81111562000f975762000f9662000d0b565b5b62000fa3825462000d69565b62000fb082828562000ed5565b600060209050601f83116001811462000fe8576000841562000fd3578287015190505b62000fdf858262000f52565b8655506200104f565b601f19841662000ff88662000d9e565b60005b82811015620010225784890151825560018201915060208501945060208101905062000ffb565b868310156200104257848901516200103e601f89168262000f32565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001089826200105c565b9050919050565b6200109b816200107c565b8114620010a757600080fd5b50565b600081519050620010bb8162001090565b92915050565b600060208284031215620010da57620010d962001057565b5b6000620010ea84828501620010aa565b91505092915050565b620010fe816200107c565b82525050565b60006040820190506200111b6000830185620010f3565b6200112a6020830184620010f3565b9392505050565b6200113c8162000c4d565b82525050565b600060208201905062001159600083018462001131565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011a86020836200115f565b9150620011b58262001170565b602082019050919050565b60006020820190508181036000830152620011db8162001199565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620012406026836200115f565b91506200124d82620011e2565b604082019050919050565b60006020820190508181036000830152620012738162001231565b9050919050565b614cab806200128a6000396000f3fe60806040526004361061024a5760003560e01c8063715018a6116101395780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e1461086d578063e1b450ad146108aa578063f2fde38b146108d3578063f66895a3146108fc578063f887ea4014610929578063fbe6324e1461095457610251565b80639e252f0014610762578063a457c2d71461078b578063a8aa1b31146107c8578063a9059cbb146107f3578063c5d32bb21461083057610251565b806385141a77116100fd57806385141a771461068d5780638cd4426d146106b85780638da5cb5b146106e15780638de890bd1461070c57806395d89b411461073757610251565b8063715018a6146105cc578063728f8eea146105e357806375f0a8741461061057806379cc67901461063b578063848b86e31461066457610251565b806340b28c2f116101c75780635331803c1161018b5780635331803c146104e1578063652e2f041461050e57806366a88d96146105395780636aa5b37f1461056457806370a082311461058f57610251565b806340b28c2f1461041057806342966c681461043957806342b6fa111461046257806348c34a601461048b5780634ada218b146104b657610251565b806318160ddd1161020e57806318160ddd146103295780631c1702f31461035457806323b872dd1461036b578063313ce567146103a857806339509351146103d357610251565b806306fdde0314610256578063095ea7b31461028157806310dfd37d146102be5780631340538f146102d55780631675d802146102fe57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61097f565b604051610278919061335e565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613419565b610a11565b6040516102b59190613474565b60405180910390f35b3480156102ca57600080fd5b506102d3610a2f565b005b3480156102e157600080fd5b506102fc60048036038101906102f791906134bb565b610c99565b005b34801561030a57600080fd5b50610313610d32565b60405161032091906134f7565b60405180910390f35b34801561033557600080fd5b5061033e610d38565b60405161034b91906134f7565b60405180910390f35b34801561036057600080fd5b50610369610d42565b005b34801561037757600080fd5b50610392600480360381019061038d9190613512565b610ecf565b60405161039f9190613474565b60405180910390f35b3480156103b457600080fd5b506103bd610fd0565b6040516103ca9190613581565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190613419565b610fd9565b6040516104079190613474565b60405180910390f35b34801561041c57600080fd5b506104376004803603810190610432919061359c565b611085565b005b34801561044557600080fd5b50610460600480360381019061045b91906135dc565b611187565b005b34801561046e57600080fd5b50610489600480360381019061048491906135dc565b61119b565b005b34801561049757600080fd5b506104a0611291565b6040516104ad9190613474565b60405180910390f35b3480156104c257600080fd5b506104cb6112a4565b6040516104d89190613474565b60405180910390f35b3480156104ed57600080fd5b506104f66112b7565b60405161050593929190613609565b60405180910390f35b34801561051a57600080fd5b506105236112cf565b60405161053091906134f7565b60405180910390f35b34801561054557600080fd5b5061054e6112d5565b60405161055b91906134f7565b60405180910390f35b34801561057057600080fd5b506105796112db565b60405161058691906134f7565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613640565b6112e1565b6040516105c391906134f7565b60405180910390f35b3480156105d857600080fd5b506105e1611329565b005b3480156105ef57600080fd5b506105f86113b1565b60405161060793929190613609565b60405180910390f35b34801561061c57600080fd5b506106256113c9565b604051610632919061367c565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190613419565b6113ef565b005b34801561067057600080fd5b5061068b60048036038101906106869190613640565b61140f565b005b34801561069957600080fd5b506106a2611552565b6040516106af919061367c565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190613419565b611558565b005b3480156106ed57600080fd5b506106f661168d565b604051610703919061367c565b60405180910390f35b34801561071857600080fd5b506107216116b7565b60405161072e91906134f7565b60405180910390f35b34801561074357600080fd5b5061074c6116bd565b604051610759919061335e565b60405180910390f35b34801561076e57600080fd5b50610789600480360381019061078491906135dc565b61174f565b005b34801561079757600080fd5b506107b260048036038101906107ad9190613419565b61184b565b6040516107bf9190613474565b60405180910390f35b3480156107d457600080fd5b506107dd61193f565b6040516107ea919061367c565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190613419565b611965565b6040516108279190613474565b60405180910390f35b34801561083c57600080fd5b5061085760048036038101906108529190613640565b61197c565b6040516108649190613474565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061359c565b61199c565b6040516108a191906134f7565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613697565b611a23565b005b3480156108df57600080fd5b506108fa60048036038101906108f59190613640565b611be5565b005b34801561090857600080fd5b50610911611cdc565b60405161092093929190613609565b60405180910390f35b34801561093557600080fd5b5061093e611cf4565b60405161094b9190613749565b60405180910390f35b34801561096057600080fd5b50610969611d1a565b6040516109769190613474565b60405180910390f35b60606003805461098e90613793565b80601f01602080910402602001604051908101604052809291908181526020018280546109ba90613793565b8015610a075780601f106109dc57610100808354040283529160200191610a07565b820191906000526020600020905b8154815290600101906020018083116109ea57829003601f168201915b5050505050905090565b6000610a25610a1e611d2d565b8484611d35565b6001905092915050565b610a37611d2d565b73ffffffffffffffffffffffffffffffffffffffff16610a5561168d565b73ffffffffffffffffffffffffffffffffffffffff1614610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290613810565b60405180910390fd5b600760169054906101000a900460ff16610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061387c565b60405180910390fd5b600760179054906101000a900460ff1615610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b41906138e8565b60405180910390fd5b610b52610d38565b600a81905550610b60610d38565b600b81905550610b6e610d38565b600c81905550604051806060016040528060008152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280600081526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050610bfe611329565b6001600760176101000a81548160ff0219169083151502179055507f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d35600a54600b54600c54604051610c5293929190613609565b60405180910390a17f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b09286000806000604051610c8f93929190613943565b60405180910390a1565b610ca1611d2d565b73ffffffffffffffffffffffffffffffffffffffff16610cbf61168d565b73ffffffffffffffffffffffffffffffffffffffff1614610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90613810565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60095481565b6000600254905090565b610d4a611d2d565b73ffffffffffffffffffffffffffffffffffffffff16610d6861168d565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613810565b60405180910390fd5b600760169054906101000a900460ff1615610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e05906139c6565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550604051806060016040528060138152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280603181526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050565b6000610edc848484611efe565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f27611d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90613a58565b60405180910390fd5b610fc485610fb3611d2d565b8584610fbf9190613aa7565b611d35565b60019150509392505050565b60006012905090565b600061107b610fe6611d2d565b848460016000610ff4611d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110769190613adb565b611d35565b6001905092915050565b61108d611d2d565b73ffffffffffffffffffffffffffffffffffffffff166110ab61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613810565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611198611192611d2d565b82612754565b50565b6111a3611d2d565b73ffffffffffffffffffffffffffffffffffffffff166111c161168d565b73ffffffffffffffffffffffffffffffffffffffff1614611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90613810565b60405180910390fd5b62e4e1c0811115801561122a5750600081115b611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613b81565b60405180910390fd5b611271610fd0565b600a61127d9190613cd4565b816112889190613d1f565b60098190555050565b600760179054906101000a900460ff1681565b600760169054906101000a900460ff1681565b60158060000154908060010154908060020154905083565b600b5481565b600c5481565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611331611d2d565b73ffffffffffffffffffffffffffffffffffffffff1661134f61168d565b73ffffffffffffffffffffffffffffffffffffffff16146113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c90613810565b60405180910390fd5b6113af6000612924565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611401826113fb611d2d565b836129ea565b61140b8282612754565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613dad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590613e3f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613dad565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611645929190613e5f565b6020604051808303816000875af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116889190613e9d565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b6060600480546116cc90613793565b80601f01602080910402602001604051908101604052809291908181526020018280546116f890613793565b80156117455780601f1061171a57610100808354040283529160200191611745565b820191906000526020600020905b81548152906001019060200180831161172857829003601f168201915b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690613dad565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611847573d6000803e3d6000fd5b5050565b6000806001600061185a611d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613f3c565b60405180910390fd5b611934611922611d2d565b85858461192f9190613aa7565b611d35565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611972338484611efe565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a2b611d2d565b73ffffffffffffffffffffffffffffffffffffffff16611a4961168d565b73ffffffffffffffffffffffffffffffffffffffff1614611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9690613810565b60405180910390fd5b620f4240831015611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90613fce565b60405180910390fd5b620f4240821015611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614060565b60405180910390fd5b624c4b40811015611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906140f2565b60405180910390fd5b611b79610fd0565b600a611b859190613cd4565b83611b909190613d1f565b600a81905550611b9e610fd0565b600a611baa9190613cd4565b82611bb59190613d1f565b600b81905550611bc3610fd0565b600a611bcf9190613cd4565b81611bda9190613d1f565b600c81905550505050565b611bed611d2d565b73ffffffffffffffffffffffffffffffffffffffff16611c0b61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613810565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790614184565b60405180910390fd5b611cd981612924565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614216565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a906142a8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ef191906134f7565b60405180910390a3505050565b60008111611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f389061433a565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fe55750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203a57600760169054906101000a900460ff16612039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612030906143a6565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120e15750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120fa5750600760149054906101000a900460ff16155b1561219d57600a54811115612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614412565b60405180910390fd5b600c5481612151846112e1565b61215b9190613adb565b111561219c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121939061447e565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122455750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561229b5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b45750600760149054906101000a900460ff16155b156123ad57600b548111156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f5906144ea565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123ac57600c5481612360846112e1565b61236a9190613adb565b11156123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a29061447e565b60405180910390fd5b5b5b60008060008060006123bd6132ad565b600760149054906101000a900460ff16806124215750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806124755750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612483576000935061262a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361252d576012600001546012600101546124ee9190613adb565b95508594506012600201549250601260405180606001604052908160008201548152602001600182015481526020016002820154815250509050612629565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16036125d757600f60000154600f600101546125989190613adb565b9550859450600f600201549250600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509050612628565b6015600001546015600101546125ed9190613adb565b955085945060156002015492506015604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b5b5b606485886126389190613d1f565b6126429190614539565b9350606483886126529190613d1f565b61265c9190614539565b9150600760159054906101000a900460ff1680156126c85750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156126d8576126d78682612a76565b5b6126f9898984876126e99190613adb565b8a6126f49190613aa7565b612c1a565b600082111561270d5761270c8983612754565b5b60008411156127495760008611156127485760006064878961272f9190613d1f565b6127399190614539565b90506127468a3083612c1a565b505b5b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba906145dc565b60405180910390fd5b6127d08261dead83612e8c565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d9061466e565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290a91906134f7565b60405180910390a361291f8361dead84612e91565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129f6848461199c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612a705781811015612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a59906146da565b60405180910390fd5b612a6f8484848403611d35565b5b50505050565b600760149054906101000a900460ff16612c16576001600760146101000a81548160ff0219169083151502179055506000820315612bfa576000612ab9306112e1565b90506009548110612bf85760016009541115612ad55760095490505b6000600284612ae49190613d1f565b9050600081846020015184612af99190613d1f565b612b039190614539565b905060008184612b139190613aa7565b90506000479050612b2382612e96565b60008147612b319190613aa7565b90506000876020015186612b459190613aa7565b82612b509190614539565b90506000886020015182612b649190613d1f565b90506000811115612b7a57612b7986826130d9565b5b60008960000151600284612b8e9190613d1f565b612b989190613d1f565b90506000811115612bef57612bee81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166131b990919063ffffffff16565b5b50505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c809061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef906147fe565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614890565b60405180910390fd5b8181612d8a9190613aa7565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e1a9190613adb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e7e91906134f7565b60405180910390a350505050565b505050565b505050565b6000600267ffffffffffffffff811115612eb357612eb26148b0565b5b604051908082528060200260200182016040528015612ee15781602001602082028036833780820191505090505b5090503081600081518110612ef957612ef86148df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc49190614923565b81600181518110612fd857612fd76148df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061303f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d35565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130a3959493929190614a0e565b600060405180830381600087803b1580156130bd57600080fd5b505af11580156130d1573d6000803e3d6000fd5b505050505050565b61310630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d35565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161316f96959493929190614a68565b60606040518083038185885af115801561318d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131b29190614ade565b5050505050565b804710156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614b7d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161322290614bce565b60006040518083038185875af1925050503d806000811461325f576040519150601f19603f3d011682016040523d82523d6000602084013e613264565b606091505b50509050806132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90614c55565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156133085780820151818401526020810190506132ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000613330826132ce565b61333a81856132d9565b935061334a8185602086016132ea565b61335381613314565b840191505092915050565b600060208201905081810360008301526133788184613325565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b082613385565b9050919050565b6133c0816133a5565b81146133cb57600080fd5b50565b6000813590506133dd816133b7565b92915050565b6000819050919050565b6133f6816133e3565b811461340157600080fd5b50565b600081359050613413816133ed565b92915050565b600080604083850312156134305761342f613380565b5b600061343e858286016133ce565b925050602061344f85828601613404565b9150509250929050565b60008115159050919050565b61346e81613459565b82525050565b60006020820190506134896000830184613465565b92915050565b61349881613459565b81146134a357600080fd5b50565b6000813590506134b58161348f565b92915050565b6000602082840312156134d1576134d0613380565b5b60006134df848285016134a6565b91505092915050565b6134f1816133e3565b82525050565b600060208201905061350c60008301846134e8565b92915050565b60008060006060848603121561352b5761352a613380565b5b6000613539868287016133ce565b935050602061354a868287016133ce565b925050604061355b86828701613404565b9150509250925092565b600060ff82169050919050565b61357b81613565565b82525050565b60006020820190506135966000830184613572565b92915050565b600080604083850312156135b3576135b2613380565b5b60006135c1858286016133ce565b92505060206135d2858286016133ce565b9150509250929050565b6000602082840312156135f2576135f1613380565b5b600061360084828501613404565b91505092915050565b600060608201905061361e60008301866134e8565b61362b60208301856134e8565b61363860408301846134e8565b949350505050565b60006020828403121561365657613655613380565b5b6000613664848285016133ce565b91505092915050565b613676816133a5565b82525050565b6000602082019050613691600083018461366d565b92915050565b6000806000606084860312156136b0576136af613380565b5b60006136be86828701613404565b93505060206136cf86828701613404565b92505060406136e086828701613404565b9150509250925092565b6000819050919050565b600061370f61370a61370584613385565b6136ea565b613385565b9050919050565b6000613721826136f4565b9050919050565b600061373382613716565b9050919050565b61374381613728565b82525050565b600060208201905061375e600083018461373a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137ab57607f821691505b6020821081036137be576137bd613764565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137fa6020836132d9565b9150613805826137c4565b602082019050919050565b60006020820190508181036000830152613829816137ed565b9050919050565b7f456e61626c652074726164696e67206669727374210000000000000000000000600082015250565b60006138666015836132d9565b915061387182613830565b602082019050919050565b6000602082019050818103600083015261389581613859565b9050919050565b7f416c726561647920656d706c6f79656421000000000000000000000000000000600082015250565b60006138d26011836132d9565b91506138dd8261389c565b602082019050919050565b60006020820190508181036000830152613901816138c5565b9050919050565b6000819050919050565b600061392d61392861392384613908565b6136ea565b6133e3565b9050919050565b61393d81613912565b82525050565b60006060820190506139586000830186613934565b6139656020830185613934565b6139726040830184613934565b949350505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b60006139b06018836132d9565b91506139bb8261397a565b602082019050919050565b600060208201905081810360008301526139df816139a3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a426028836132d9565b9150613a4d826139e6565b604082019050919050565b60006020820190508181036000830152613a7181613a35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ab2826133e3565b9150613abd836133e3565b9250828203905081811115613ad557613ad4613a78565b5b92915050565b6000613ae6826133e3565b9150613af1836133e3565b9250828201905080821115613b0957613b08613a78565b5b92915050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060008201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e73602082015250565b6000613b6b6040836132d9565b9150613b7682613b0f565b604082019050919050565b60006020820190508181036000830152613b9a81613b5e565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613bf857808604811115613bd457613bd3613a78565b5b6001851615613be35780820291505b8081029050613bf185613ba1565b9450613bb8565b94509492505050565b600082613c115760019050613ccd565b81613c1f5760009050613ccd565b8160018114613c355760028114613c3f57613c6e565b6001915050613ccd565b60ff841115613c5157613c50613a78565b5b8360020a915084821115613c6857613c67613a78565b5b50613ccd565b5060208310610133831016604e8410600b8410161715613ca35782820a905083811115613c9e57613c9d613a78565b5b613ccd565b613cb08484846001613bae565b92509050818404811115613cc757613cc6613a78565b5b81810290505b9392505050565b6000613cdf826133e3565b9150613cea83613565565b9250613d177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c01565b905092915050565b6000613d2a826133e3565b9150613d35836133e3565b9250828202613d43816133e3565b91508282048414831517613d5a57613d59613a78565b5b5092915050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b6000613d97600f836132d9565b9150613da282613d61565b602082019050919050565b60006020820190508181036000830152613dc681613d8a565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e296022836132d9565b9150613e3482613dcd565b604082019050919050565b60006020820190508181036000830152613e5881613e1c565b9050919050565b6000604082019050613e74600083018561366d565b613e8160208301846134e8565b9392505050565b600081519050613e978161348f565b92915050565b600060208284031215613eb357613eb2613380565b5b6000613ec184828501613e88565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f266025836132d9565b9150613f3182613eca565b604082019050919050565b60006020820190508181036000830152613f5581613f19565b9050919050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000613fb86029836132d9565b9150613fc382613f5c565b604082019050919050565b60006020820190508181036000830152613fe781613fab565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b600061404a602a836132d9565b915061405582613fee565b604082019050919050565b600060208201905081810360008301526140798161403d565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e35250000000000000000000000000000000000000000602082015250565b60006140dc602c836132d9565b91506140e782614080565b604082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061416e6026836132d9565b915061417982614112565b604082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142006024836132d9565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142926022836132d9565b915061429d82614236565b604082019050919050565b600060208201905081810360008301526142c181614285565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006143246029836132d9565b915061432f826142c8565b604082019050919050565b6000602082019050818103600083015261435381614317565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006143906013836132d9565b915061439b8261435a565b602082019050919050565b600060208201905081810360008301526143bf81614383565b9050919050565b7f596f752061726520657863656564696e67206d61784275794c696d6974000000600082015250565b60006143fc601d836132d9565b9150614407826143c6565b602082019050919050565b6000602082019050818103600083015261442b816143ef565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b60006144686020836132d9565b915061447382614432565b602082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c4c696d69740000600082015250565b60006144d4601e836132d9565b91506144df8261449e565b602082019050919050565b60006020820190508181036000830152614503816144c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614544826133e3565b915061454f836133e3565b92508261455f5761455e61450a565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006145c66021836132d9565b91506145d18261456a565b604082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006146586022836132d9565b9150614663826145fc565b604082019050919050565b600060208201905081810360008301526146878161464b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006146c4601d836132d9565b91506146cf8261468e565b602082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147566025836132d9565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147e86023836132d9565b91506147f38261478c565b604082019050919050565b60006020820190508181036000830152614817816147db565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061487a6026836132d9565b91506148858261481e565b604082019050919050565b600060208201905081810360008301526148a98161486d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061491d816133b7565b92915050565b60006020828403121561493957614938613380565b5b60006149478482850161490e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614985816133a5565b82525050565b6000614997838361497c565b60208301905092915050565b6000602082019050919050565b60006149bb82614950565b6149c5818561495b565b93506149d08361496c565b8060005b83811015614a015781516149e8888261498b565b97506149f3836149a3565b9250506001810190506149d4565b5085935050505092915050565b600060a082019050614a2360008301886134e8565b614a306020830187613934565b8181036040830152614a4281866149b0565b9050614a51606083018561366d565b614a5e60808301846134e8565b9695505050505050565b600060c082019050614a7d600083018961366d565b614a8a60208301886134e8565b614a976040830187613934565b614aa46060830186613934565b614ab1608083018561366d565b614abe60a08301846134e8565b979650505050505050565b600081519050614ad8816133ed565b92915050565b600080600060608486031215614af757614af6613380565b5b6000614b0586828701614ac9565b9350506020614b1686828701614ac9565b9250506040614b2786828701614ac9565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614b67601d836132d9565b9150614b7282614b31565b602082019050919050565b60006020820190508181036000830152614b9681614b5a565b9050919050565b600081905092915050565b50565b6000614bb8600083614b9d565b9150614bc382614ba8565b600082019050919050565b6000614bd982614bab565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614c3f603a836132d9565b9150614c4a82614be3565b604082019050919050565b60006020820190508181036000830152614c6e81614c32565b905091905056fea2646970667358221220be047649870338551c98f0f34ee7f525ae16320725655edb8465b4b4e12a831664736f6c63430008130033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c8063715018a6116101395780639e252f00116100b6578063dd62ed3e1161007a578063dd62ed3e1461086d578063e1b450ad146108aa578063f2fde38b146108d3578063f66895a3146108fc578063f887ea4014610929578063fbe6324e1461095457610251565b80639e252f0014610762578063a457c2d71461078b578063a8aa1b31146107c8578063a9059cbb146107f3578063c5d32bb21461083057610251565b806385141a77116100fd57806385141a771461068d5780638cd4426d146106b85780638da5cb5b146106e15780638de890bd1461070c57806395d89b411461073757610251565b8063715018a6146105cc578063728f8eea146105e357806375f0a8741461061057806379cc67901461063b578063848b86e31461066457610251565b806340b28c2f116101c75780635331803c1161018b5780635331803c146104e1578063652e2f041461050e57806366a88d96146105395780636aa5b37f1461056457806370a082311461058f57610251565b806340b28c2f1461041057806342966c681461043957806342b6fa111461046257806348c34a601461048b5780634ada218b146104b657610251565b806318160ddd1161020e57806318160ddd146103295780631c1702f31461035457806323b872dd1461036b578063313ce567146103a857806339509351146103d357610251565b806306fdde0314610256578063095ea7b31461028157806310dfd37d146102be5780631340538f146102d55780631675d802146102fe57610251565b3661025157005b600080fd5b34801561026257600080fd5b5061026b61097f565b604051610278919061335e565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190613419565b610a11565b6040516102b59190613474565b60405180910390f35b3480156102ca57600080fd5b506102d3610a2f565b005b3480156102e157600080fd5b506102fc60048036038101906102f791906134bb565b610c99565b005b34801561030a57600080fd5b50610313610d32565b60405161032091906134f7565b60405180910390f35b34801561033557600080fd5b5061033e610d38565b60405161034b91906134f7565b60405180910390f35b34801561036057600080fd5b50610369610d42565b005b34801561037757600080fd5b50610392600480360381019061038d9190613512565b610ecf565b60405161039f9190613474565b60405180910390f35b3480156103b457600080fd5b506103bd610fd0565b6040516103ca9190613581565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f59190613419565b610fd9565b6040516104079190613474565b60405180910390f35b34801561041c57600080fd5b506104376004803603810190610432919061359c565b611085565b005b34801561044557600080fd5b50610460600480360381019061045b91906135dc565b611187565b005b34801561046e57600080fd5b50610489600480360381019061048491906135dc565b61119b565b005b34801561049757600080fd5b506104a0611291565b6040516104ad9190613474565b60405180910390f35b3480156104c257600080fd5b506104cb6112a4565b6040516104d89190613474565b60405180910390f35b3480156104ed57600080fd5b506104f66112b7565b60405161050593929190613609565b60405180910390f35b34801561051a57600080fd5b506105236112cf565b60405161053091906134f7565b60405180910390f35b34801561054557600080fd5b5061054e6112d5565b60405161055b91906134f7565b60405180910390f35b34801561057057600080fd5b506105796112db565b60405161058691906134f7565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b19190613640565b6112e1565b6040516105c391906134f7565b60405180910390f35b3480156105d857600080fd5b506105e1611329565b005b3480156105ef57600080fd5b506105f86113b1565b60405161060793929190613609565b60405180910390f35b34801561061c57600080fd5b506106256113c9565b604051610632919061367c565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190613419565b6113ef565b005b34801561067057600080fd5b5061068b60048036038101906106869190613640565b61140f565b005b34801561069957600080fd5b506106a2611552565b6040516106af919061367c565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190613419565b611558565b005b3480156106ed57600080fd5b506106f661168d565b604051610703919061367c565b60405180910390f35b34801561071857600080fd5b506107216116b7565b60405161072e91906134f7565b60405180910390f35b34801561074357600080fd5b5061074c6116bd565b604051610759919061335e565b60405180910390f35b34801561076e57600080fd5b50610789600480360381019061078491906135dc565b61174f565b005b34801561079757600080fd5b506107b260048036038101906107ad9190613419565b61184b565b6040516107bf9190613474565b60405180910390f35b3480156107d457600080fd5b506107dd61193f565b6040516107ea919061367c565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190613419565b611965565b6040516108279190613474565b60405180910390f35b34801561083c57600080fd5b5061085760048036038101906108529190613640565b61197c565b6040516108649190613474565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f919061359c565b61199c565b6040516108a191906134f7565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613697565b611a23565b005b3480156108df57600080fd5b506108fa60048036038101906108f59190613640565b611be5565b005b34801561090857600080fd5b50610911611cdc565b60405161092093929190613609565b60405180910390f35b34801561093557600080fd5b5061093e611cf4565b60405161094b9190613749565b60405180910390f35b34801561096057600080fd5b50610969611d1a565b6040516109769190613474565b60405180910390f35b60606003805461098e90613793565b80601f01602080910402602001604051908101604052809291908181526020018280546109ba90613793565b8015610a075780601f106109dc57610100808354040283529160200191610a07565b820191906000526020600020905b8154815290600101906020018083116109ea57829003601f168201915b5050505050905090565b6000610a25610a1e611d2d565b8484611d35565b6001905092915050565b610a37611d2d565b73ffffffffffffffffffffffffffffffffffffffff16610a5561168d565b73ffffffffffffffffffffffffffffffffffffffff1614610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290613810565b60405180910390fd5b600760169054906101000a900460ff16610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061387c565b60405180910390fd5b600760179054906101000a900460ff1615610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b41906138e8565b60405180910390fd5b610b52610d38565b600a81905550610b60610d38565b600b81905550610b6e610d38565b600c81905550604051806060016040528060008152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280600081526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050610bfe611329565b6001600760176101000a81548160ff0219169083151502179055507f71e50fc869ff266df718ea6817d210f1b19d3d84b5d3dcfb72735630d5403d35600a54600b54600c54604051610c5293929190613609565b60405180910390a17f2862e186e6f0269fce86721e7c136c9a03d0672316fb9a878885a07f0a2b09286000806000604051610c8f93929190613943565b60405180910390a1565b610ca1611d2d565b73ffffffffffffffffffffffffffffffffffffffff16610cbf61168d565b73ffffffffffffffffffffffffffffffffffffffff1614610d15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0c90613810565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60095481565b6000600254905090565b610d4a611d2d565b73ffffffffffffffffffffffffffffffffffffffff16610d6861168d565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613810565b60405180910390fd5b600760169054906101000a900460ff1615610e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e05906139c6565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600881905550604051806060016040528060138152602001600081526020016000815250600f6000820151816000015560208201518160010155604082015181600201559050506040518060600160405280603181526020016000815260200160008152506012600082015181600001556020820151816001015560408201518160020155905050565b6000610edc848484611efe565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f27611d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90613a58565b60405180910390fd5b610fc485610fb3611d2d565b8584610fbf9190613aa7565b611d35565b60019150509392505050565b60006012905090565b600061107b610fe6611d2d565b848460016000610ff4611d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110769190613adb565b611d35565b6001905092915050565b61108d611d2d565b73ffffffffffffffffffffffffffffffffffffffff166110ab61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f890613810565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611198611192611d2d565b82612754565b50565b6111a3611d2d565b73ffffffffffffffffffffffffffffffffffffffff166111c161168d565b73ffffffffffffffffffffffffffffffffffffffff1614611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e90613810565b60405180910390fd5b62e4e1c0811115801561122a5750600081115b611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613b81565b60405180910390fd5b611271610fd0565b600a61127d9190613cd4565b816112889190613d1f565b60098190555050565b600760179054906101000a900460ff1681565b600760169054906101000a900460ff1681565b60158060000154908060010154908060020154905083565b600b5481565b600c5481565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611331611d2d565b73ffffffffffffffffffffffffffffffffffffffff1661134f61168d565b73ffffffffffffffffffffffffffffffffffffffff16146113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c90613810565b60405180910390fd5b6113af6000612924565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611401826113fb611d2d565b836129ea565b61140b8282612754565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149690613dad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590613e3f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61dead81565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613dad565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611645929190613e5f565b6020604051808303816000875af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116889190613e9d565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b6060600480546116cc90613793565b80601f01602080910402602001604051908101604052809291908181526020018280546116f890613793565b80156117455780601f1061171a57610100808354040283529160200191611745565b820191906000526020600020905b81548152906001019060200180831161172857829003601f168201915b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690613dad565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611847573d6000803e3d6000fd5b5050565b6000806001600061185a611d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613f3c565b60405180910390fd5b611934611922611d2d565b85858461192f9190613aa7565b611d35565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611972338484611efe565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a2b611d2d565b73ffffffffffffffffffffffffffffffffffffffff16611a4961168d565b73ffffffffffffffffffffffffffffffffffffffff1614611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9690613810565b60405180910390fd5b620f4240831015611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90613fce565b60405180910390fd5b620f4240821015611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290614060565b60405180910390fd5b624c4b40811015611b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b68906140f2565b60405180910390fd5b611b79610fd0565b600a611b859190613cd4565b83611b909190613d1f565b600a81905550611b9e610fd0565b600a611baa9190613cd4565b82611bb59190613d1f565b600b81905550611bc3610fd0565b600a611bcf9190613cd4565b81611bda9190613d1f565b600c81905550505050565b611bed611d2d565b73ffffffffffffffffffffffffffffffffffffffff16611c0b61168d565b73ffffffffffffffffffffffffffffffffffffffff1614611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890613810565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790614184565b60405180910390fd5b611cd981612924565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614216565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a906142a8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ef191906134f7565b60405180910390a3505050565b60008111611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f389061433a565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fe55750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203a57600760169054906101000a900460ff16612039576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612030906143a6565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120e15750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120fa5750600760149054906101000a900460ff16155b1561219d57600a54811115612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614412565b60405180910390fd5b600c5481612151846112e1565b61215b9190613adb565b111561219c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121939061447e565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122455750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561229b5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b45750600760149054906101000a900460ff16155b156123ad57600b548111156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f5906144ea565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146123ac57600c5481612360846112e1565b61236a9190613adb565b11156123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a29061447e565b60405180910390fd5b5b5b60008060008060006123bd6132ad565b600760149054906101000a900460ff16806124215750601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806124755750601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612483576000935061262a565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361252d576012600001546012600101546124ee9190613adb565b95508594506012600201549250601260405180606001604052908160008201548152602001600182015481526020016002820154815250509050612629565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16036125d757600f60000154600f600101546125989190613adb565b9550859450600f600201549250600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509050612628565b6015600001546015600101546125ed9190613adb565b955085945060156002015492506015604051806060016040529081600082015481526020016001820154815260200160028201548152505090505b5b5b606485886126389190613d1f565b6126429190614539565b9350606483886126529190613d1f565b61265c9190614539565b9150600760159054906101000a900460ff1680156126c85750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b156126d8576126d78682612a76565b5b6126f9898984876126e99190613adb565b8a6126f49190613aa7565b612c1a565b600082111561270d5761270c8983612754565b5b60008411156127495760008611156127485760006064878961272f9190613d1f565b6127399190614539565b90506127468a3083612c1a565b505b5b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba906145dc565b60405180910390fd5b6127d08261dead83612e8c565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284d9061466e565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290a91906134f7565b60405180910390a361291f8361dead84612e91565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129f6848461199c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612a705781811015612a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a59906146da565b60405180910390fd5b612a6f8484848403611d35565b5b50505050565b600760149054906101000a900460ff16612c16576001600760146101000a81548160ff0219169083151502179055506000820315612bfa576000612ab9306112e1565b90506009548110612bf85760016009541115612ad55760095490505b6000600284612ae49190613d1f565b9050600081846020015184612af99190613d1f565b612b039190614539565b905060008184612b139190613aa7565b90506000479050612b2382612e96565b60008147612b319190613aa7565b90506000876020015186612b459190613aa7565b82612b509190614539565b90506000886020015182612b649190613d1f565b90506000811115612b7a57612b7986826130d9565b5b60008960000151600284612b8e9190613d1f565b612b989190613d1f565b90506000811115612bef57612bee81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166131b990919063ffffffff16565b5b50505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c809061476c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef906147fe565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590614890565b60405180910390fd5b8181612d8a9190613aa7565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e1a9190613adb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e7e91906134f7565b60405180910390a350505050565b505050565b505050565b6000600267ffffffffffffffff811115612eb357612eb26148b0565b5b604051908082528060200260200182016040528015612ee15781602001602082028036833780820191505090505b5090503081600081518110612ef957612ef86148df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc49190614923565b81600181518110612fd857612fd76148df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061303f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d35565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130a3959493929190614a0e565b600060405180830381600087803b1580156130bd57600080fd5b505af11580156130d1573d6000803e3d6000fd5b505050505050565b61310630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d35565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161316f96959493929190614a68565b60606040518083038185885af115801561318d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131b29190614ade565b5050505050565b804710156131fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f390614b7d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161322290614bce565b60006040518083038185875af1925050503d806000811461325f576040519150601f19603f3d011682016040523d82523d6000602084013e613264565b606091505b50509050806132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f90614c55565b60405180910390fd5b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b838110156133085780820151818401526020810190506132ed565b60008484015250505050565b6000601f19601f8301169050919050565b6000613330826132ce565b61333a81856132d9565b935061334a8185602086016132ea565b61335381613314565b840191505092915050565b600060208201905081810360008301526133788184613325565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b082613385565b9050919050565b6133c0816133a5565b81146133cb57600080fd5b50565b6000813590506133dd816133b7565b92915050565b6000819050919050565b6133f6816133e3565b811461340157600080fd5b50565b600081359050613413816133ed565b92915050565b600080604083850312156134305761342f613380565b5b600061343e858286016133ce565b925050602061344f85828601613404565b9150509250929050565b60008115159050919050565b61346e81613459565b82525050565b60006020820190506134896000830184613465565b92915050565b61349881613459565b81146134a357600080fd5b50565b6000813590506134b58161348f565b92915050565b6000602082840312156134d1576134d0613380565b5b60006134df848285016134a6565b91505092915050565b6134f1816133e3565b82525050565b600060208201905061350c60008301846134e8565b92915050565b60008060006060848603121561352b5761352a613380565b5b6000613539868287016133ce565b935050602061354a868287016133ce565b925050604061355b86828701613404565b9150509250925092565b600060ff82169050919050565b61357b81613565565b82525050565b60006020820190506135966000830184613572565b92915050565b600080604083850312156135b3576135b2613380565b5b60006135c1858286016133ce565b92505060206135d2858286016133ce565b9150509250929050565b6000602082840312156135f2576135f1613380565b5b600061360084828501613404565b91505092915050565b600060608201905061361e60008301866134e8565b61362b60208301856134e8565b61363860408301846134e8565b949350505050565b60006020828403121561365657613655613380565b5b6000613664848285016133ce565b91505092915050565b613676816133a5565b82525050565b6000602082019050613691600083018461366d565b92915050565b6000806000606084860312156136b0576136af613380565b5b60006136be86828701613404565b93505060206136cf86828701613404565b92505060406136e086828701613404565b9150509250925092565b6000819050919050565b600061370f61370a61370584613385565b6136ea565b613385565b9050919050565b6000613721826136f4565b9050919050565b600061373382613716565b9050919050565b61374381613728565b82525050565b600060208201905061375e600083018461373a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137ab57607f821691505b6020821081036137be576137bd613764565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137fa6020836132d9565b9150613805826137c4565b602082019050919050565b60006020820190508181036000830152613829816137ed565b9050919050565b7f456e61626c652074726164696e67206669727374210000000000000000000000600082015250565b60006138666015836132d9565b915061387182613830565b602082019050919050565b6000602082019050818103600083015261389581613859565b9050919050565b7f416c726561647920656d706c6f79656421000000000000000000000000000000600082015250565b60006138d26011836132d9565b91506138dd8261389c565b602082019050919050565b60006020820190508181036000830152613901816138c5565b9050919050565b6000819050919050565b600061392d61392861392384613908565b6136ea565b6133e3565b9050919050565b61393d81613912565b82525050565b60006060820190506139586000830186613934565b6139656020830185613934565b6139726040830184613934565b949350505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b60006139b06018836132d9565b91506139bb8261397a565b602082019050919050565b600060208201905081810360008301526139df816139a3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a426028836132d9565b9150613a4d826139e6565b604082019050919050565b60006020820190508181036000830152613a7181613a35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ab2826133e3565b9150613abd836133e3565b9250828203905081811115613ad557613ad4613a78565b5b92915050565b6000613ae6826133e3565b9150613af1836133e3565b9250828201905080821115613b0957613b08613a78565b5b92915050565b7f53776170207468726573686f6c6420616d6f756e742073686f756c642062652060008201527f6c6f776572206f7220657571616c20746f20312e3525206f6620746f6b656e73602082015250565b6000613b6b6040836132d9565b9150613b7682613b0f565b604082019050919050565b60006020820190508181036000830152613b9a81613b5e565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115613bf857808604811115613bd457613bd3613a78565b5b6001851615613be35780820291505b8081029050613bf185613ba1565b9450613bb8565b94509492505050565b600082613c115760019050613ccd565b81613c1f5760009050613ccd565b8160018114613c355760028114613c3f57613c6e565b6001915050613ccd565b60ff841115613c5157613c50613a78565b5b8360020a915084821115613c6857613c67613a78565b5b50613ccd565b5060208310610133831016604e8410600b8410161715613ca35782820a905083811115613c9e57613c9d613a78565b5b613ccd565b613cb08484846001613bae565b92509050818404811115613cc757613cc6613a78565b5b81810290505b9392505050565b6000613cdf826133e3565b9150613cea83613565565b9250613d177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613c01565b905092915050565b6000613d2a826133e3565b9150613d35836133e3565b9250828202613d43816133e3565b91508282048414831517613d5a57613d59613a78565b5b5092915050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b6000613d97600f836132d9565b9150613da282613d61565b602082019050919050565b60006020820190508181036000830152613dc681613d8a565b9050919050565b7f46656520416464726573732063616e6e6f74206265207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e296022836132d9565b9150613e3482613dcd565b604082019050919050565b60006020820190508181036000830152613e5881613e1c565b9050919050565b6000604082019050613e74600083018561366d565b613e8160208301846134e8565b9392505050565b600081519050613e978161348f565b92915050565b600060208284031215613eb357613eb2613380565b5b6000613ec184828501613e88565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613f266025836132d9565b9150613f3182613eca565b604082019050919050565b60006020820190508181036000830152613f5581613f19565b9050919050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000613fb86029836132d9565b9150613fc382613f5c565b604082019050919050565b60006020820190508181036000830152613fe781613fab565b9050919050565b7f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260008201527f207468616e20302e312500000000000000000000000000000000000000000000602082015250565b600061404a602a836132d9565b915061405582613fee565b604082019050919050565b600060208201905081810360008301526140798161403d565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e35250000000000000000000000000000000000000000602082015250565b60006140dc602c836132d9565b91506140e782614080565b604082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061416e6026836132d9565b915061417982614112565b604082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142006024836132d9565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142926022836132d9565b915061429d82614236565b604082019050919050565b600060208201905081810360008301526142c181614285565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006143246029836132d9565b915061432f826142c8565b604082019050919050565b6000602082019050818103600083015261435381614317565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006143906013836132d9565b915061439b8261435a565b602082019050919050565b600060208201905081810360008301526143bf81614383565b9050919050565b7f596f752061726520657863656564696e67206d61784275794c696d6974000000600082015250565b60006143fc601d836132d9565b9150614407826143c6565b602082019050919050565b6000602082019050818103600083015261442b816143ef565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b60006144686020836132d9565b915061447382614432565b602082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c4c696d69740000600082015250565b60006144d4601e836132d9565b91506144df8261449e565b602082019050919050565b60006020820190508181036000830152614503816144c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614544826133e3565b915061454f836133e3565b92508261455f5761455e61450a565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006145c66021836132d9565b91506145d18261456a565b604082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006146586022836132d9565b9150614663826145fc565b604082019050919050565b600060208201905081810360008301526146878161464b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006146c4601d836132d9565b91506146cf8261468e565b602082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147566025836132d9565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147e86023836132d9565b91506147f38261478c565b604082019050919050565b60006020820190508181036000830152614817816147db565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061487a6026836132d9565b91506148858261481e565b604082019050919050565b600060208201905081810360008301526148a98161486d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061491d816133b7565b92915050565b60006020828403121561493957614938613380565b5b60006149478482850161490e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614985816133a5565b82525050565b6000614997838361497c565b60208301905092915050565b6000602082019050919050565b60006149bb82614950565b6149c5818561495b565b93506149d08361496c565b8060005b83811015614a015781516149e8888261498b565b97506149f3836149a3565b9250506001810190506149d4565b5085935050505092915050565b600060a082019050614a2360008301886134e8565b614a306020830187613934565b8181036040830152614a4281866149b0565b9050614a51606083018561366d565b614a5e60808301846134e8565b9695505050505050565b600060c082019050614a7d600083018961366d565b614a8a60208301886134e8565b614a976040830187613934565b614aa46060830186613934565b614ab1608083018561366d565b614abe60a08301846134e8565b979650505050505050565b600081519050614ad8816133ed565b92915050565b600080600060608486031215614af757614af6613380565b5b6000614b0586828701614ac9565b9350506020614b1686828701614ac9565b9250506040614b2786828701614ac9565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614b67601d836132d9565b9150614b7282614b31565b602082019050919050565b60006020820190508181036000830152614b9681614b5a565b9050919050565b600081905092915050565b50565b6000614bb8600083614b9d565b9150614bc382614ba8565b600082019050919050565b6000614bd982614bab565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614c3f603a836132d9565b9150614c4a82614be3565b604082019050919050565b60006020820190508181036000830152614c6e81614c32565b905091905056fea2646970667358221220be047649870338551c98f0f34ee7f525ae16320725655edb8465b4b4e12a831664736f6c63430008130033

Deployed Bytecode Sourcemap

16043:12000:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2541:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18391:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27097:521;;;;;;;;;;;;;:::i;:::-;;25305:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16397:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3661:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25837:297;;;;;;;;;;;;;:::i;:::-;;18560:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3503:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19016:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26142:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15462:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25465:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16321:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16280:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17104:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16534:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16597:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16471:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3832:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13746:94;;;;;;;;;;;;;:::i;:::-;;17016:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16665:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15872:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26305:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16820:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27798:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13523:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16358:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2760:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27626:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19272:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16169:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19690:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17156:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4451:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26571:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13848:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17058:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16141:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16235:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2541:100;2595:13;2628:5;2621:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2541:100;:::o;18391:161::-;18466:4;18483:39;18492:12;:10;:12::i;:::-;18506:7;18515:6;18483:8;:39::i;:::-;18540:4;18533:11;;18391:161;;;;:::o;27097:521::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27160:14:::1;;;;;;;;;;;27152:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27220:8;;;;;;;;;;;27219:9;27211:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;27275:13;:11;:13::i;:::-;27261:11;:27;;;;27314:13;:11;:13::i;:::-;27299:12;:28;;;;27355:13;:11;:13::i;:::-;27338:14;:30;;;;27389:14;;;;;;;;27395:1;27389:14;;;;27398:1;27389:14;;;;27401:1;27389:14;;::::0;27381:5:::1;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;27426:14;;;;;;;;27432:1;27426:14;;;;27435:1;27426:14;;;;27438:1;27426:14;;::::0;27414:9:::1;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;27453:19;:17;:19::i;:::-;27496:4;27485:8;;:15;;;;;;;;;;;;;;;;;;27518:55;27531:11;;27544:12;;27558:14;;27518:55;;;;;;;;:::i;:::-;;;;;;;;27589:21;27602:1;27605::::0;27608::::1;27589:21;;;;;;;;:::i;:::-;;;;;;;;27097:521::o:0;25305:152::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25444:5:::1;25423:18;;:26;;;;;;;;;;;;;;;;;;25305:152:::0;:::o;16397:67::-;;;;:::o;3661:108::-;3722:7;3749:12;;3742:19;;3661:108;:::o;25837:297::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25900:14:::1;;;;;;;;;;;25899:15;25891:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25971:4;25954:14;;:21;;;;;;;;;;;;;;;;;;26007:4;25986:18;;:25;;;;;;;;;;;;;;;;;;26040:12;26022:15;:30;;;;26073:15;;;;;;;;26079:2;26073:15;;;;26083:1;26073:15;;;;26086:1;26073:15;;::::0;26065:5:::1;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;26111:15;;;;;;;;26117:2;26111:15;;;;26121:1;26111:15;;;;26124:1;26111:15;;::::0;26099:9:::1;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;25837:297::o:0;18560:448::-;18692:4;18709:36;18719:6;18727:9;18738:6;18709:9;:36::i;:::-;18758:24;18785:11;:19;18797:6;18785:19;;;;;;;;;;;;;;;:33;18805:12;:10;:12::i;:::-;18785:33;;;;;;;;;;;;;;;;18758:60;;18857:6;18837:16;:26;;18829:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18919:57;18928:6;18936:12;:10;:12::i;:::-;18969:6;18950:16;:25;;;;:::i;:::-;18919:8;:57::i;:::-;18996:4;18989:11;;;18560:448;;;;;:::o;3503:93::-;3561:5;3586:2;3579:9;;3503:93;:::o;19016:248::-;19132:4;19154:80;19163:12;:10;:12::i;:::-;19177:7;19223:10;19186:11;:25;19198:12;:10;:12::i;:::-;19186:25;;;;;;;;;;;;;;;:34;19212:7;19186:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;19154:8;:80::i;:::-;19252:4;19245:11;;19016:248;;;;:::o;26142:155::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26254:9:::1;26237:6;;:27;;;;;;;;;;;;;;;;;;26282:7;26275:4;;:14;;;;;;;;;;;;;;;;;;26142:155:::0;;:::o;15462:91::-;15518:27;15524:12;:10;:12::i;:::-;15538:6;15518:5;:27::i;:::-;15462:91;:::o;25465:307::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25603:10:::1;25589;:24;;:42;;;;;25630:1;25617:10;:14;25589:42;25581:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;25754:10;:8;:10::i;:::-;25750:2;:14;;;;:::i;:::-;25737:10;:27;;;;:::i;:::-;25711:23;:53;;;;25465:307:::0;:::o;16321:28::-;;;;;;;;;;;;;:::o;16280:34::-;;;;;;;;;;;;;:::o;17104:43::-;;;;;;;;;;;;;;;;;;;:::o;16534:56::-;;;;:::o;16597:59::-;;;;:::o;16471:56::-;;;;:::o;3832:127::-;3906:7;3933:9;:18;3943:7;3933:18;;;;;;;;;;;;;;;;3926:25;;3832:127;;;:::o;13746:94::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13811:21:::1;13829:1;13811:9;:21::i;:::-;13746:94::o:0;17016:35::-;;;;;;;;;;;;;;;;;;;:::o;16665:75::-;;;;;;;;;;;;;:::o;15872:164::-;15949:46;15965:7;15974:12;:10;:12::i;:::-;15988:6;15949:15;:46::i;:::-;16006:22;16012:7;16021:6;16006:5;:22::i;:::-;15872:164;;:::o;26305:258::-;26395:8;;;;;;;;;;;26381:22;;:10;:22;;;26373:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;26470:1;26442:30;;:16;:30;;;26434:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26539:16;26521:15;;:34;;;;;;;;;;;;;;;;;;26305:258;:::o;16820:79::-;16857:42;16820:79;:::o;27798:187::-;27895:8;;;;;;;;;;;27881:22;;:10;:22;;;27873:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;27941:8;27934:25;;;27960:8;;;;;;;;;;;27970:6;27934:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27798:187;;:::o;13523:87::-;13569:7;13596:6;;;;;;;;;;;13589:13;;13523:87;:::o;16358:30::-;;;;:::o;2760:104::-;2816:13;2849:7;2842:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2760:104;:::o;27626:164::-;27706:8;;;;;;;;;;;27692:22;;:10;:22;;;27684:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;27753:8;;;;;;;;;;;27745:26;;:37;27772:9;27745:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27626:164;:::o;19272:410::-;19393:4;19415:24;19442:11;:25;19454:12;:10;:12::i;:::-;19442:25;;;;;;;;;;;;;;;:34;19468:7;19442:34;;;;;;;;;;;;;;;;19415:61;;19515:15;19495:16;:35;;19487:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19583:67;19592:12;:10;:12::i;:::-;19606:7;19634:15;19615:16;:34;;;;:::i;:::-;19583:8;:67::i;:::-;19670:4;19663:11;;;19272:410;;;;:::o;16169:19::-;;;;;;;;;;;;;:::o;19690:165::-;19768:4;19785:40;19795:10;19807:9;19818:6;19785:9;:40::i;:::-;19843:4;19836:11;;19690:165;;;;:::o;17156:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4451:201::-;4585:7;4617:11;:18;4629:5;4617:18;;;;;;;;;;;;;;;:27;4636:7;4617:27;;;;;;;;;;;;;;;;4610:34;;4451:201;;;;:::o;26571:518::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26697:9:::1;26687:6;:19;;26679:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26782:9;26771:7;:20;;26763:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26870:9;26857;:22;;26849:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26966:10;:8;:10::i;:::-;26962:2;:14;;;;:::i;:::-;26953:6;:23;;;;:::i;:::-;26939:11;:37;;;;27016:10;:8;:10::i;:::-;27012:2;:14;;;;:::i;:::-;27002:7;:24;;;;:::i;:::-;26987:12;:39;;;;27070:10;:8;:10::i;:::-;27066:2;:14;;;;:::i;:::-;27054:9;:26;;;;:::i;:::-;27037:14;:43;;;;26571:518:::0;;;:::o;13848:192::-;13669:12;:10;:12::i;:::-;13658:23;;:7;:5;:7::i;:::-;:23;;;13650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13957:1:::1;13937:22;;:8;:22;;::::0;13929:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14013:19;14023:8;14013:9;:19::i;:::-;13848:192:::0;:::o;17058:39::-;;;;;;;;;;;;;;;;;;;:::o;16141:21::-;;;;;;;;;;;;;:::o;16235:38::-;;;;;;;;;;;;;:::o;263:98::-;316:7;343:10;336:17;;263:98;:::o;11171:380::-;11324:1;11307:19;;:5;:19;;;11299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11405:1;11386:21;;:7;:21;;;11378:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11489:6;11459:11;:18;11471:5;11459:18;;;;;;;;;;;;;;;:27;11478:7;11459:27;;;;;;;;;;;;;;;:36;;;;11527:7;11511:32;;11520:5;11511:32;;;11536:6;11511:32;;;;;;:::i;:::-;;;;;;;;11171:380;;;:::o;19863:2939::-;20013:1;20004:6;:10;19996:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20078:9;:17;20088:6;20078:17;;;;;;;;;;;;;;;;;;;;;;;;;20077:18;:43;;;;;20100:9;:20;20110:9;20100:20;;;;;;;;;;;;;;;;;;;;;;;;;20099:21;20077:43;20073:122;;;20145:14;;;;;;;;;;;20137:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;20073:122;20221:4;;;;;;;;;;;20211:14;;:6;:14;;;:39;;;;;20230:9;:20;20240:9;20230:20;;;;;;;;;;;;;;;;;;;;;;;;;20229:21;20211:39;:54;;;;;20255:10;;;;;;;;;;;20254:11;20211:54;20207:306;;;20300:11;;20290:6;:21;;20282:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20419:14;;20409:6;20386:20;20396:9;20386;:20::i;:::-;:29;;;;:::i;:::-;:47;;20360:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20207:306;20553:4;;;;;;;;;;;20543:14;;:6;:14;;;;:39;;;;;20562:9;:20;20572:9;20562:20;;;;;;;;;;;;;;;;;;;;;;;;;20561:21;20543:39;:61;;;;;20587:9;:17;20597:6;20587:17;;;;;;;;;;;;;;;;;;;;;;;;;20586:18;20543:61;:76;;;;;20609:10;;;;;;;;;;;20608:11;20543:76;20525:423;;;20664:12;;20654:6;:22;;20646:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20743:4;;;;;;;;;;;20730:17;;:9;:17;;;20726:211;;20831:14;;20821:6;20798:20;20808:9;20798;:20::i;:::-;:29;;;;:::i;:::-;:47;;20768:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;20726:211;20525:423;20960:15;20986:14;21011:11;21033:15;21059:18;21088:25;;:::i;:::-;21201:10;;;;;;;;;;;:31;;;;21215:9;:17;21225:6;21215:17;;;;;;;;;;;;;;;;;;;;;;;;;21201:31;:55;;;;21236:9;:20;21246:9;21236:20;;;;;;;;;;;;;;;;;;;;;;;;;21201:55;21197:847;;;21277:1;21271:7;;21197:847;;;21342:4;;;;;;;;;;;21329:17;;:9;:17;;;21325:719;;21429:9;:19;;;21390:9;:19;;;:58;;;;:::i;:::-;21363:85;;21472:7;21463:16;;21504:9;:14;;;21494:24;;21548:9;21533:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21325:719;;;21589:4;;;;;;;;;;;21579:14;;:6;:14;;;21575:469;;21672:5;:15;;;21637:5;:15;;;:50;;;;:::i;:::-;21610:77;;21711:7;21702:16;;21743:5;:10;;;21733:20;;21783:5;21768:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21575:469;;;21891:13;:23;;;21848:13;:23;;;:66;;;;:::i;:::-;21821:93;;21939:7;21930:16;;21971:13;:18;;;21961:28;;22019:13;22004:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21575:469;21325:719;21197:847;22082:3;22072:6;22063;:15;;;;:::i;:::-;22062:23;;;;:::i;:::-;22056:29;;22130:3;22119:7;22110:6;:16;;;;:::i;:::-;22109:24;;;;:::i;:::-;22096:37;;22247:18;;;;;;;;;;;:36;;;;;22279:4;;;;;;;;;;;22269:14;;:6;:14;;;;22247:36;22243:72;;;22285:30;22293:7;22302:12;22285:7;:30::i;:::-;22243:72;22357:63;22373:6;22381:9;22408:10;22402:3;:16;;;;:::i;:::-;22392:6;:27;;;;:::i;:::-;22357:15;:63::i;:::-;22475:1;22462:10;:14;22459:77;;;22493:31;22505:6;22513:10;22493:11;:31::i;:::-;22459:77;22556:1;22550:3;:7;22546:249;;;22632:1;22622:7;:11;22618:164;;;22654:17;22695:3;22684:7;22675:6;:16;;;;:::i;:::-;22674:24;;;;:::i;:::-;22654:44;;22717:49;22733:6;22749:4;22756:9;22717:15;:49::i;:::-;22635:147;22618:164;22546:249;19985:2817;;;;;;19863:2939;;;:::o;9989:744::-;10092:1;10073:21;;:7;:21;;;10065:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10145:54;10166:7;10183:6;10192;10145:20;:54::i;:::-;10212:22;10237:9;:18;10247:7;10237:18;;;;;;;;;;;;;;;;10212:43;;10292:6;10274:14;:24;;10266:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10411:6;10394:14;:23;10373:9;:18;10383:7;10373:18;;;;;;;;;;;;;;;:44;;;;10528:6;10512:12;;:22;;;;;;;;;;;10643:6;10617:42;;10626:7;10617:42;;;10652:6;10617:42;;;;;;:::i;:::-;;;;;;;;10672:53;10692:7;10709:6;10718;10672:19;:53::i;:::-;10054:679;9989:744;;:::o;14048:173::-;14104:16;14123:6;;;;;;;;;;;14104:25;;14149:8;14140:6;;:17;;;;;;;;;;;;;;;;;;14204:8;14173:40;;14194:8;14173:40;;;;;;;;;;;;14093:128;14048:173;:::o;5260:419::-;5361:24;5388:25;5398:5;5405:7;5388:9;:25::i;:::-;5361:52;;5448:17;5428:16;:37;5424:248;;5510:6;5490:16;:26;;5482:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5594:51;5603:5;5610:7;5638:6;5619:16;:25;5594:8;:51::i;:::-;5424:248;5350:329;5260:419;;;:::o;22810:1437::-;17647:10;;;;;;;;;;;17642:110;;17687:4;17674:10;;:17;;;;;;;;;;;;;;;;;;22915:1:::1;22904:7;:12:::0;22901:49;22932:7:::1;22901:49;22962:23;22988:24;23006:4;22988:9;:24::i;:::-;22962:50;;23046:23;;23027:15;:42;23023:1217;;23116:1;23090:23;;:27;23086:109;;;23156:23;;23138:41;;23086:109;23266:19;23298:1;23288:7;:11;;;;:::i;:::-;23266:33;;23314:32;23408:11;23368:9;:19;;;23350:15;:37;;;;:::i;:::-;23349:70;;;;:::i;:::-;23314:105;;23434:14;23469:24;23451:15;:42;;;;:::i;:::-;23434:59;;23510:22;23535:21;23510:46;;23573:24;23590:6;23573:16;:24::i;:::-;23614:20;23661:14;23637:21;:38;;;;:::i;:::-;23614:61;;23690:19;23742:9;:19;;;23728:11;:33;;;;:::i;:::-;23712:12;:50;;;;:::i;:::-;23690:72;;23777:29;23823:9;:19;;;23809:11;:33;;;;:::i;:::-;23777:65;;23887:1;23863:21;:25;23859:172;;;23954:61;23967:24;23993:21;23954:12;:61::i;:::-;23859:172;24047:20;24088:9;:19;;;24084:1;24070:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;24047:60;;24141:1;24126:12;:16;24122:105;;;24163:48;24198:12;24171:15;;;;;;;;;;;24163:34;;;;:48;;;;:::i;:::-;24122:105;23071:1169;;;;;;;;23023:1217;22888:1359;17706:1;17735:5:::0;17722:10;;:18;;;;;;;;;;;;;;;;;;17642:110;22810:1437;;:::o;8675:578::-;8833:1;8815:20;;:6;:20;;;8807:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8917:1;8896:23;;:9;:23;;;8888:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8972:21;8996:9;:17;9006:6;8996:17;;;;;;;;;;;;;;;;8972:41;;9049:6;9032:13;:23;;9024:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9145:6;9129:13;:22;;;;:::i;:::-;9109:9;:17;9119:6;9109:17;;;;;;;;;;;;;;;:42;;;;9186:6;9162:9;:20;9172:9;9162:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9227:9;9210:35;;9219:6;9210:35;;;9238:6;9210:35;;;;;;:::i;:::-;;;;;;;;8796:457;8675:578;;;:::o;12151:91::-;;;;:::o;12846:90::-;;;;:::o;24255:534::-;24381:21;24419:1;24405:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24381:40;;24450:4;24432;24437:1;24432:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24476:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24466:4;24471:1;24466:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24502:53;24519:4;24534:6;;;;;;;;;;;24543:11;24502:8;:53::i;:::-;24594:6;;;;;;;;;;;:57;;;24666:11;24692:1;24708:4;24735;24755:15;24594:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24310:479;24255:534;:::o;24797:500::-;24945:53;24962:4;24977:6;;;;;;;;;;;24986:11;24945:8;:53::i;:::-;25041:6;;;;;;;;;;;:22;;;25072:9;25106:4;25126:11;25152:1;25195;16857:42;25263:15;25041:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24797:500;;:::o;12966:319::-;13081:6;13056:21;:31;;13048:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13135:12;13153:9;:14;;13176:6;13153:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13134:54;;;13207:7;13199:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;13037:248;12966:319;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:323::-;3763:6;3812:2;3800:9;3791:7;3787:23;3783:32;3780:119;;;3818:79;;:::i;:::-;3780:119;3938:1;3963:50;4005:7;3996:6;3985:9;3981:22;3963:50;:::i;:::-;3953:60;;3909:114;3707:323;;;;:::o;4036:118::-;4123:24;4141:5;4123:24;:::i;:::-;4118:3;4111:37;4036:118;;:::o;4160:222::-;4253:4;4291:2;4280:9;4276:18;4268:26;;4304:71;4372:1;4361:9;4357:17;4348:6;4304:71;:::i;:::-;4160:222;;;;:::o;4388:619::-;4465:6;4473;4481;4530:2;4518:9;4509:7;4505:23;4501:32;4498:119;;;4536:79;;:::i;:::-;4498:119;4656:1;4681:53;4726:7;4717:6;4706:9;4702:22;4681:53;:::i;:::-;4671:63;;4627:117;4783:2;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4754:118;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;4388:619;;;;;:::o;5013:86::-;5048:7;5088:4;5081:5;5077:16;5066:27;;5013:86;;;:::o;5105:112::-;5188:22;5204:5;5188:22;:::i;:::-;5183:3;5176:35;5105:112;;:::o;5223:214::-;5312:4;5350:2;5339:9;5335:18;5327:26;;5363:67;5427:1;5416:9;5412:17;5403:6;5363:67;:::i;:::-;5223:214;;;;:::o;5443:474::-;5511:6;5519;5568:2;5556:9;5547:7;5543:23;5539:32;5536:119;;;5574:79;;:::i;:::-;5536:119;5694:1;5719:53;5764:7;5755:6;5744:9;5740:22;5719:53;:::i;:::-;5709:63;;5665:117;5821:2;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5792:118;5443:474;;;;;:::o;5923:329::-;5982:6;6031:2;6019:9;6010:7;6006:23;6002:32;5999:119;;;6037:79;;:::i;:::-;5999:119;6157:1;6182:53;6227:7;6218:6;6207:9;6203:22;6182:53;:::i;:::-;6172:63;;6128:117;5923:329;;;;:::o;6258:442::-;6407:4;6445:2;6434:9;6430:18;6422:26;;6458:71;6526:1;6515:9;6511:17;6502:6;6458:71;:::i;:::-;6539:72;6607:2;6596:9;6592:18;6583:6;6539:72;:::i;:::-;6621;6689:2;6678:9;6674:18;6665:6;6621:72;:::i;:::-;6258:442;;;;;;:::o;6706:329::-;6765:6;6814:2;6802:9;6793:7;6789:23;6785:32;6782:119;;;6820:79;;:::i;:::-;6782:119;6940:1;6965:53;7010:7;7001:6;6990:9;6986:22;6965:53;:::i;:::-;6955:63;;6911:117;6706:329;;;;:::o;7041:118::-;7128:24;7146:5;7128:24;:::i;:::-;7123:3;7116:37;7041:118;;:::o;7165:222::-;7258:4;7296:2;7285:9;7281:18;7273:26;;7309:71;7377:1;7366:9;7362:17;7353:6;7309:71;:::i;:::-;7165:222;;;;:::o;7393:619::-;7470:6;7478;7486;7535:2;7523:9;7514:7;7510:23;7506:32;7503:119;;;7541:79;;:::i;:::-;7503:119;7661:1;7686:53;7731:7;7722:6;7711:9;7707:22;7686:53;:::i;:::-;7676:63;;7632:117;7788:2;7814:53;7859:7;7850:6;7839:9;7835:22;7814:53;:::i;:::-;7804:63;;7759:118;7916:2;7942:53;7987:7;7978:6;7967:9;7963:22;7942:53;:::i;:::-;7932:63;;7887:118;7393:619;;;;;:::o;8018:60::-;8046:3;8067:5;8060:12;;8018:60;;;:::o;8084:142::-;8134:9;8167:53;8185:34;8194:24;8212:5;8194:24;:::i;:::-;8185:34;:::i;:::-;8167:53;:::i;:::-;8154:66;;8084:142;;;:::o;8232:126::-;8282:9;8315:37;8346:5;8315:37;:::i;:::-;8302:50;;8232:126;;;:::o;8364:141::-;8429:9;8462:37;8493:5;8462:37;:::i;:::-;8449:50;;8364:141;;;:::o;8511:161::-;8613:52;8659:5;8613:52;:::i;:::-;8608:3;8601:65;8511:161;;:::o;8678:252::-;8786:4;8824:2;8813:9;8809:18;8801:26;;8837:86;8920:1;8909:9;8905:17;8896:6;8837:86;:::i;:::-;8678:252;;;;:::o;8936:180::-;8984:77;8981:1;8974:88;9081:4;9078:1;9071:15;9105:4;9102:1;9095:15;9122:320;9166:6;9203:1;9197:4;9193:12;9183:22;;9250:1;9244:4;9240:12;9271:18;9261:81;;9327:4;9319:6;9315:17;9305:27;;9261:81;9389:2;9381:6;9378:14;9358:18;9355:38;9352:84;;9408:18;;:::i;:::-;9352:84;9173:269;9122:320;;;:::o;9448:182::-;9588:34;9584:1;9576:6;9572:14;9565:58;9448:182;:::o;9636:366::-;9778:3;9799:67;9863:2;9858:3;9799:67;:::i;:::-;9792:74;;9875:93;9964:3;9875:93;:::i;:::-;9993:2;9988:3;9984:12;9977:19;;9636:366;;;:::o;10008:419::-;10174:4;10212:2;10201:9;10197:18;10189:26;;10261:9;10255:4;10251:20;10247:1;10236:9;10232:17;10225:47;10289:131;10415:4;10289:131;:::i;:::-;10281:139;;10008:419;;;:::o;10433:171::-;10573:23;10569:1;10561:6;10557:14;10550:47;10433:171;:::o;10610:366::-;10752:3;10773:67;10837:2;10832:3;10773:67;:::i;:::-;10766:74;;10849:93;10938:3;10849:93;:::i;:::-;10967:2;10962:3;10958:12;10951:19;;10610:366;;;:::o;10982:419::-;11148:4;11186:2;11175:9;11171:18;11163:26;;11235:9;11229:4;11225:20;11221:1;11210:9;11206:17;11199:47;11263:131;11389:4;11263:131;:::i;:::-;11255:139;;10982:419;;;:::o;11407:167::-;11547:19;11543:1;11535:6;11531:14;11524:43;11407:167;:::o;11580:366::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:419::-;12118:4;12156:2;12145:9;12141:18;12133:26;;12205:9;12199:4;12195:20;12191:1;12180:9;12176:17;12169:47;12233:131;12359:4;12233:131;:::i;:::-;12225:139;;11952:419;;;:::o;12377:85::-;12422:7;12451:5;12440:16;;12377:85;;;:::o;12468:158::-;12526:9;12559:61;12577:42;12586:32;12612:5;12586:32;:::i;:::-;12577:42;:::i;:::-;12559:61;:::i;:::-;12546:74;;12468:158;;;:::o;12632:147::-;12727:45;12766:5;12727:45;:::i;:::-;12722:3;12715:58;12632:147;;:::o;12785:490::-;12958:4;12996:2;12985:9;12981:18;12973:26;;13009:79;13085:1;13074:9;13070:17;13061:6;13009:79;:::i;:::-;13098:80;13174:2;13163:9;13159:18;13150:6;13098:80;:::i;:::-;13188;13264:2;13253:9;13249:18;13240:6;13188:80;:::i;:::-;12785:490;;;;;;:::o;13281:174::-;13421:26;13417:1;13409:6;13405:14;13398:50;13281:174;:::o;13461:366::-;13603:3;13624:67;13688:2;13683:3;13624:67;:::i;:::-;13617:74;;13700:93;13789:3;13700:93;:::i;:::-;13818:2;13813:3;13809:12;13802:19;;13461:366;;;:::o;13833:419::-;13999:4;14037:2;14026:9;14022:18;14014:26;;14086:9;14080:4;14076:20;14072:1;14061:9;14057:17;14050:47;14114:131;14240:4;14114:131;:::i;:::-;14106:139;;13833:419;;;:::o;14258:227::-;14398:34;14394:1;14386:6;14382:14;14375:58;14467:10;14462:2;14454:6;14450:15;14443:35;14258:227;:::o;14491:366::-;14633:3;14654:67;14718:2;14713:3;14654:67;:::i;:::-;14647:74;;14730:93;14819:3;14730:93;:::i;:::-;14848:2;14843:3;14839:12;14832:19;;14491:366;;;:::o;14863:419::-;15029:4;15067:2;15056:9;15052:18;15044:26;;15116:9;15110:4;15106:20;15102:1;15091:9;15087:17;15080:47;15144:131;15270:4;15144:131;:::i;:::-;15136:139;;14863:419;;;:::o;15288:180::-;15336:77;15333:1;15326:88;15433:4;15430:1;15423:15;15457:4;15454:1;15447:15;15474:194;15514:4;15534:20;15552:1;15534:20;:::i;:::-;15529:25;;15568:20;15586:1;15568:20;:::i;:::-;15563:25;;15612:1;15609;15605:9;15597:17;;15636:1;15630:4;15627:11;15624:37;;;15641:18;;:::i;:::-;15624:37;15474:194;;;;:::o;15674:191::-;15714:3;15733:20;15751:1;15733:20;:::i;:::-;15728:25;;15767:20;15785:1;15767:20;:::i;:::-;15762:25;;15810:1;15807;15803:9;15796:16;;15831:3;15828:1;15825:10;15822:36;;;15838:18;;:::i;:::-;15822:36;15674:191;;;;:::o;15871:251::-;16011:34;16007:1;15999:6;15995:14;15988:58;16080:34;16075:2;16067:6;16063:15;16056:59;15871:251;:::o;16128:366::-;16270:3;16291:67;16355:2;16350:3;16291:67;:::i;:::-;16284:74;;16367:93;16456:3;16367:93;:::i;:::-;16485:2;16480:3;16476:12;16469:19;;16128:366;;;:::o;16500:419::-;16666:4;16704:2;16693:9;16689:18;16681:26;;16753:9;16747:4;16743:20;16739:1;16728:9;16724:17;16717:47;16781:131;16907:4;16781:131;:::i;:::-;16773:139;;16500:419;;;:::o;16925:102::-;16967:8;17014:5;17011:1;17007:13;16986:34;;16925:102;;;:::o;17033:848::-;17094:5;17101:4;17125:6;17116:15;;17149:5;17140:14;;17163:712;17184:1;17174:8;17171:15;17163:712;;;17279:4;17274:3;17270:14;17264:4;17261:24;17258:50;;;17288:18;;:::i;:::-;17258:50;17338:1;17328:8;17324:16;17321:451;;;17753:4;17746:5;17742:16;17733:25;;17321:451;17803:4;17797;17793:15;17785:23;;17833:32;17856:8;17833:32;:::i;:::-;17821:44;;17163:712;;;17033:848;;;;;;;:::o;17887:1073::-;17941:5;18132:8;18122:40;;18153:1;18144:10;;18155:5;;18122:40;18181:4;18171:36;;18198:1;18189:10;;18200:5;;18171:36;18267:4;18315:1;18310:27;;;;18351:1;18346:191;;;;18260:277;;18310:27;18328:1;18319:10;;18330:5;;;18346:191;18391:3;18381:8;18378:17;18375:43;;;18398:18;;:::i;:::-;18375:43;18447:8;18444:1;18440:16;18431:25;;18482:3;18475:5;18472:14;18469:40;;;18489:18;;:::i;:::-;18469:40;18522:5;;;18260:277;;18646:2;18636:8;18633:16;18627:3;18621:4;18618:13;18614:36;18596:2;18586:8;18583:16;18578:2;18572:4;18569:12;18565:35;18549:111;18546:246;;;18702:8;18696:4;18692:19;18683:28;;18737:3;18730:5;18727:14;18724:40;;;18744:18;;:::i;:::-;18724:40;18777:5;;18546:246;18817:42;18855:3;18845:8;18839:4;18836:1;18817:42;:::i;:::-;18802:57;;;;18891:4;18886:3;18882:14;18875:5;18872:25;18869:51;;;18900:18;;:::i;:::-;18869:51;18949:4;18942:5;18938:16;18929:25;;17887:1073;;;;;;:::o;18966:281::-;19024:5;19048:23;19066:4;19048:23;:::i;:::-;19040:31;;19092:25;19108:8;19092:25;:::i;:::-;19080:37;;19136:104;19173:66;19163:8;19157:4;19136:104;:::i;:::-;19127:113;;18966:281;;;;:::o;19253:410::-;19293:7;19316:20;19334:1;19316:20;:::i;:::-;19311:25;;19350:20;19368:1;19350:20;:::i;:::-;19345:25;;19405:1;19402;19398:9;19427:30;19445:11;19427:30;:::i;:::-;19416:41;;19606:1;19597:7;19593:15;19590:1;19587:22;19567:1;19560:9;19540:83;19517:139;;19636:18;;:::i;:::-;19517:139;19301:362;19253:410;;;;:::o;19669:165::-;19809:17;19805:1;19797:6;19793:14;19786:41;19669:165;:::o;19840:366::-;19982:3;20003:67;20067:2;20062:3;20003:67;:::i;:::-;19996:74;;20079:93;20168:3;20079:93;:::i;:::-;20197:2;20192:3;20188:12;20181:19;;19840:366;;;:::o;20212:419::-;20378:4;20416:2;20405:9;20401:18;20393:26;;20465:9;20459:4;20455:20;20451:1;20440:9;20436:17;20429:47;20493:131;20619:4;20493:131;:::i;:::-;20485:139;;20212:419;;;:::o;20637:221::-;20777:34;20773:1;20765:6;20761:14;20754:58;20846:4;20841:2;20833:6;20829:15;20822:29;20637:221;:::o;20864:366::-;21006:3;21027:67;21091:2;21086:3;21027:67;:::i;:::-;21020:74;;21103:93;21192:3;21103:93;:::i;:::-;21221:2;21216:3;21212:12;21205:19;;20864:366;;;:::o;21236:419::-;21402:4;21440:2;21429:9;21425:18;21417:26;;21489:9;21483:4;21479:20;21475:1;21464:9;21460:17;21453:47;21517:131;21643:4;21517:131;:::i;:::-;21509:139;;21236:419;;;:::o;21661:332::-;21782:4;21820:2;21809:9;21805:18;21797:26;;21833:71;21901:1;21890:9;21886:17;21877:6;21833:71;:::i;:::-;21914:72;21982:2;21971:9;21967:18;21958:6;21914:72;:::i;:::-;21661:332;;;;;:::o;21999:137::-;22053:5;22084:6;22078:13;22069:22;;22100:30;22124:5;22100:30;:::i;:::-;21999:137;;;;:::o;22142:345::-;22209:6;22258:2;22246:9;22237:7;22233:23;22229:32;22226:119;;;22264:79;;:::i;:::-;22226:119;22384:1;22409:61;22462:7;22453:6;22442:9;22438:22;22409:61;:::i;:::-;22399:71;;22355:125;22142:345;;;;:::o;22493:224::-;22633:34;22629:1;22621:6;22617:14;22610:58;22702:7;22697:2;22689:6;22685:15;22678:32;22493:224;:::o;22723:366::-;22865:3;22886:67;22950:2;22945:3;22886:67;:::i;:::-;22879:74;;22962:93;23051:3;22962:93;:::i;:::-;23080:2;23075:3;23071:12;23064:19;;22723:366;;;:::o;23095:419::-;23261:4;23299:2;23288:9;23284:18;23276:26;;23348:9;23342:4;23338:20;23334:1;23323:9;23319:17;23312:47;23376:131;23502:4;23376:131;:::i;:::-;23368:139;;23095:419;;;:::o;23520:228::-;23660:34;23656:1;23648:6;23644:14;23637:58;23729:11;23724:2;23716:6;23712:15;23705:36;23520:228;:::o;23754:366::-;23896:3;23917:67;23981:2;23976:3;23917:67;:::i;:::-;23910:74;;23993:93;24082:3;23993:93;:::i;:::-;24111:2;24106:3;24102:12;24095:19;;23754:366;;;:::o;24126:419::-;24292:4;24330:2;24319:9;24315:18;24307:26;;24379:9;24373:4;24369:20;24365:1;24354:9;24350:17;24343:47;24407:131;24533:4;24407:131;:::i;:::-;24399:139;;24126:419;;;:::o;24551:229::-;24691:34;24687:1;24679:6;24675:14;24668:58;24760:12;24755:2;24747:6;24743:15;24736:37;24551:229;:::o;24786:366::-;24928:3;24949:67;25013:2;25008:3;24949:67;:::i;:::-;24942:74;;25025:93;25114:3;25025:93;:::i;:::-;25143:2;25138:3;25134:12;25127:19;;24786:366;;;:::o;25158:419::-;25324:4;25362:2;25351:9;25347:18;25339:26;;25411:9;25405:4;25401:20;25397:1;25386:9;25382:17;25375:47;25439:131;25565:4;25439:131;:::i;:::-;25431:139;;25158:419;;;:::o;25583:231::-;25723:34;25719:1;25711:6;25707:14;25700:58;25792:14;25787:2;25779:6;25775:15;25768:39;25583:231;:::o;25820:366::-;25962:3;25983:67;26047:2;26042:3;25983:67;:::i;:::-;25976:74;;26059:93;26148:3;26059:93;:::i;:::-;26177:2;26172:3;26168:12;26161:19;;25820:366;;;:::o;26192:419::-;26358:4;26396:2;26385:9;26381:18;26373:26;;26445:9;26439:4;26435:20;26431:1;26420:9;26416:17;26409:47;26473:131;26599:4;26473:131;:::i;:::-;26465:139;;26192:419;;;:::o;26617:225::-;26757:34;26753:1;26745:6;26741:14;26734:58;26826:8;26821:2;26813:6;26809:15;26802:33;26617:225;:::o;26848:366::-;26990:3;27011:67;27075:2;27070:3;27011:67;:::i;:::-;27004:74;;27087:93;27176:3;27087:93;:::i;:::-;27205:2;27200:3;27196:12;27189:19;;26848:366;;;:::o;27220:419::-;27386:4;27424:2;27413:9;27409:18;27401:26;;27473:9;27467:4;27463:20;27459:1;27448:9;27444:17;27437:47;27501:131;27627:4;27501:131;:::i;:::-;27493:139;;27220:419;;;:::o;27645:223::-;27785:34;27781:1;27773:6;27769:14;27762:58;27854:6;27849:2;27841:6;27837:15;27830:31;27645:223;:::o;27874:366::-;28016:3;28037:67;28101:2;28096:3;28037:67;:::i;:::-;28030:74;;28113:93;28202:3;28113:93;:::i;:::-;28231:2;28226:3;28222:12;28215:19;;27874:366;;;:::o;28246:419::-;28412:4;28450:2;28439:9;28435:18;28427:26;;28499:9;28493:4;28489:20;28485:1;28474:9;28470:17;28463:47;28527:131;28653:4;28527:131;:::i;:::-;28519:139;;28246:419;;;:::o;28671:221::-;28811:34;28807:1;28799:6;28795:14;28788:58;28880:4;28875:2;28867:6;28863:15;28856:29;28671:221;:::o;28898:366::-;29040:3;29061:67;29125:2;29120:3;29061:67;:::i;:::-;29054:74;;29137:93;29226:3;29137:93;:::i;:::-;29255:2;29250:3;29246:12;29239:19;;28898:366;;;:::o;29270:419::-;29436:4;29474:2;29463:9;29459:18;29451:26;;29523:9;29517:4;29513:20;29509:1;29498:9;29494:17;29487:47;29551:131;29677:4;29551:131;:::i;:::-;29543:139;;29270:419;;;:::o;29695:228::-;29835:34;29831:1;29823:6;29819:14;29812:58;29904:11;29899:2;29891:6;29887:15;29880:36;29695:228;:::o;29929:366::-;30071:3;30092:67;30156:2;30151:3;30092:67;:::i;:::-;30085:74;;30168:93;30257:3;30168:93;:::i;:::-;30286:2;30281:3;30277:12;30270:19;;29929:366;;;:::o;30301:419::-;30467:4;30505:2;30494:9;30490:18;30482:26;;30554:9;30548:4;30544:20;30540:1;30529:9;30525:17;30518:47;30582:131;30708:4;30582:131;:::i;:::-;30574:139;;30301:419;;;:::o;30726:169::-;30866:21;30862:1;30854:6;30850:14;30843:45;30726:169;:::o;30901:366::-;31043:3;31064:67;31128:2;31123:3;31064:67;:::i;:::-;31057:74;;31140:93;31229:3;31140:93;:::i;:::-;31258:2;31253:3;31249:12;31242:19;;30901:366;;;:::o;31273:419::-;31439:4;31477:2;31466:9;31462:18;31454:26;;31526:9;31520:4;31516:20;31512:1;31501:9;31497:17;31490:47;31554:131;31680:4;31554:131;:::i;:::-;31546:139;;31273:419;;;:::o;31698:179::-;31838:31;31834:1;31826:6;31822:14;31815:55;31698:179;:::o;31883:366::-;32025:3;32046:67;32110:2;32105:3;32046:67;:::i;:::-;32039:74;;32122:93;32211:3;32122:93;:::i;:::-;32240:2;32235:3;32231:12;32224:19;;31883:366;;;:::o;32255:419::-;32421:4;32459:2;32448:9;32444:18;32436:26;;32508:9;32502:4;32498:20;32494:1;32483:9;32479:17;32472:47;32536:131;32662:4;32536:131;:::i;:::-;32528:139;;32255:419;;;:::o;32680:182::-;32820:34;32816:1;32808:6;32804:14;32797:58;32680:182;:::o;32868:366::-;33010:3;33031:67;33095:2;33090:3;33031:67;:::i;:::-;33024:74;;33107:93;33196:3;33107:93;:::i;:::-;33225:2;33220:3;33216:12;33209:19;;32868:366;;;:::o;33240:419::-;33406:4;33444:2;33433:9;33429:18;33421:26;;33493:9;33487:4;33483:20;33479:1;33468:9;33464:17;33457:47;33521:131;33647:4;33521:131;:::i;:::-;33513:139;;33240:419;;;:::o;33665:180::-;33805:32;33801:1;33793:6;33789:14;33782:56;33665:180;:::o;33851:366::-;33993:3;34014:67;34078:2;34073:3;34014:67;:::i;:::-;34007:74;;34090:93;34179:3;34090:93;:::i;:::-;34208:2;34203:3;34199:12;34192:19;;33851:366;;;:::o;34223:419::-;34389:4;34427:2;34416:9;34412:18;34404:26;;34476:9;34470:4;34466:20;34462:1;34451:9;34447:17;34440:47;34504:131;34630:4;34504:131;:::i;:::-;34496:139;;34223:419;;;:::o;34648:180::-;34696:77;34693:1;34686:88;34793:4;34790:1;34783:15;34817:4;34814:1;34807:15;34834:185;34874:1;34891:20;34909:1;34891:20;:::i;:::-;34886:25;;34925:20;34943:1;34925:20;:::i;:::-;34920:25;;34964:1;34954:35;;34969:18;;:::i;:::-;34954:35;35011:1;35008;35004:9;34999:14;;34834:185;;;;:::o;35025:220::-;35165:34;35161:1;35153:6;35149:14;35142:58;35234:3;35229:2;35221:6;35217:15;35210:28;35025:220;:::o;35251:366::-;35393:3;35414:67;35478:2;35473:3;35414:67;:::i;:::-;35407:74;;35490:93;35579:3;35490:93;:::i;:::-;35608:2;35603:3;35599:12;35592:19;;35251:366;;;:::o;35623:419::-;35789:4;35827:2;35816:9;35812:18;35804:26;;35876:9;35870:4;35866:20;35862:1;35851:9;35847:17;35840:47;35904:131;36030:4;35904:131;:::i;:::-;35896:139;;35623:419;;;:::o;36048:221::-;36188:34;36184:1;36176:6;36172:14;36165:58;36257:4;36252:2;36244:6;36240:15;36233:29;36048:221;:::o;36275:366::-;36417:3;36438:67;36502:2;36497:3;36438:67;:::i;:::-;36431:74;;36514:93;36603:3;36514:93;:::i;:::-;36632:2;36627:3;36623:12;36616:19;;36275:366;;;:::o;36647:419::-;36813:4;36851:2;36840:9;36836:18;36828:26;;36900:9;36894:4;36890:20;36886:1;36875:9;36871:17;36864:47;36928:131;37054:4;36928:131;:::i;:::-;36920:139;;36647:419;;;:::o;37072:179::-;37212:31;37208:1;37200:6;37196:14;37189:55;37072:179;:::o;37257:366::-;37399:3;37420:67;37484:2;37479:3;37420:67;:::i;:::-;37413:74;;37496:93;37585:3;37496:93;:::i;:::-;37614:2;37609:3;37605:12;37598:19;;37257:366;;;:::o;37629:419::-;37795:4;37833:2;37822:9;37818:18;37810:26;;37882:9;37876:4;37872:20;37868:1;37857:9;37853:17;37846:47;37910:131;38036:4;37910:131;:::i;:::-;37902:139;;37629:419;;;:::o;38054:224::-;38194:34;38190:1;38182:6;38178:14;38171:58;38263:7;38258:2;38250:6;38246:15;38239:32;38054:224;:::o;38284:366::-;38426:3;38447:67;38511:2;38506:3;38447:67;:::i;:::-;38440:74;;38523:93;38612:3;38523:93;:::i;:::-;38641:2;38636:3;38632:12;38625:19;;38284:366;;;:::o;38656:419::-;38822:4;38860:2;38849:9;38845:18;38837:26;;38909:9;38903:4;38899:20;38895:1;38884:9;38880:17;38873:47;38937:131;39063:4;38937:131;:::i;:::-;38929:139;;38656:419;;;:::o;39081:222::-;39221:34;39217:1;39209:6;39205:14;39198:58;39290:5;39285:2;39277:6;39273:15;39266:30;39081:222;:::o;39309:366::-;39451:3;39472:67;39536:2;39531:3;39472:67;:::i;:::-;39465:74;;39548:93;39637:3;39548:93;:::i;:::-;39666:2;39661:3;39657:12;39650:19;;39309:366;;;:::o;39681:419::-;39847:4;39885:2;39874:9;39870:18;39862:26;;39934:9;39928:4;39924:20;39920:1;39909:9;39905:17;39898:47;39962:131;40088:4;39962:131;:::i;:::-;39954:139;;39681:419;;;:::o;40106:225::-;40246:34;40242:1;40234:6;40230:14;40223:58;40315:8;40310:2;40302:6;40298:15;40291:33;40106:225;:::o;40337:366::-;40479:3;40500:67;40564:2;40559:3;40500:67;:::i;:::-;40493:74;;40576:93;40665:3;40576:93;:::i;:::-;40694:2;40689:3;40685:12;40678:19;;40337:366;;;:::o;40709:419::-;40875:4;40913:2;40902:9;40898:18;40890:26;;40962:9;40956:4;40952:20;40948:1;40937:9;40933:17;40926:47;40990:131;41116:4;40990:131;:::i;:::-;40982:139;;40709:419;;;:::o;41134:180::-;41182:77;41179:1;41172:88;41279:4;41276:1;41269:15;41303:4;41300:1;41293:15;41320:180;41368:77;41365:1;41358:88;41465:4;41462:1;41455:15;41489:4;41486:1;41479:15;41506:143;41563:5;41594:6;41588:13;41579:22;;41610:33;41637:5;41610:33;:::i;:::-;41506:143;;;;:::o;41655:351::-;41725:6;41774:2;41762:9;41753:7;41749:23;41745:32;41742:119;;;41780:79;;:::i;:::-;41742:119;41900:1;41925:64;41981:7;41972:6;41961:9;41957:22;41925:64;:::i;:::-;41915:74;;41871:128;41655:351;;;;:::o;42012:114::-;42079:6;42113:5;42107:12;42097:22;;42012:114;;;:::o;42132:184::-;42231:11;42265:6;42260:3;42253:19;42305:4;42300:3;42296:14;42281:29;;42132:184;;;;:::o;42322:132::-;42389:4;42412:3;42404:11;;42442:4;42437:3;42433:14;42425:22;;42322:132;;;:::o;42460:108::-;42537:24;42555:5;42537:24;:::i;:::-;42532:3;42525:37;42460:108;;:::o;42574:179::-;42643:10;42664:46;42706:3;42698:6;42664:46;:::i;:::-;42742:4;42737:3;42733:14;42719:28;;42574:179;;;;:::o;42759:113::-;42829:4;42861;42856:3;42852:14;42844:22;;42759:113;;;:::o;42908:732::-;43027:3;43056:54;43104:5;43056:54;:::i;:::-;43126:86;43205:6;43200:3;43126:86;:::i;:::-;43119:93;;43236:56;43286:5;43236:56;:::i;:::-;43315:7;43346:1;43331:284;43356:6;43353:1;43350:13;43331:284;;;43432:6;43426:13;43459:63;43518:3;43503:13;43459:63;:::i;:::-;43452:70;;43545:60;43598:6;43545:60;:::i;:::-;43535:70;;43391:224;43378:1;43375;43371:9;43366:14;;43331:284;;;43335:14;43631:3;43624:10;;43032:608;;;42908:732;;;;:::o;43646:831::-;43909:4;43947:3;43936:9;43932:19;43924:27;;43961:71;44029:1;44018:9;44014:17;44005:6;43961:71;:::i;:::-;44042:80;44118:2;44107:9;44103:18;44094:6;44042:80;:::i;:::-;44169:9;44163:4;44159:20;44154:2;44143:9;44139:18;44132:48;44197:108;44300:4;44291:6;44197:108;:::i;:::-;44189:116;;44315:72;44383:2;44372:9;44368:18;44359:6;44315:72;:::i;:::-;44397:73;44465:3;44454:9;44450:19;44441:6;44397:73;:::i;:::-;43646:831;;;;;;;;:::o;44483:807::-;44732:4;44770:3;44759:9;44755:19;44747:27;;44784:71;44852:1;44841:9;44837:17;44828:6;44784:71;:::i;:::-;44865:72;44933:2;44922:9;44918:18;44909:6;44865:72;:::i;:::-;44947:80;45023:2;45012:9;45008:18;44999:6;44947:80;:::i;:::-;45037;45113:2;45102:9;45098:18;45089:6;45037:80;:::i;:::-;45127:73;45195:3;45184:9;45180:19;45171:6;45127:73;:::i;:::-;45210;45278:3;45267:9;45263:19;45254:6;45210:73;:::i;:::-;44483:807;;;;;;;;;:::o;45296:143::-;45353:5;45384:6;45378:13;45369:22;;45400:33;45427:5;45400:33;:::i;:::-;45296:143;;;;:::o;45445:663::-;45533:6;45541;45549;45598:2;45586:9;45577:7;45573:23;45569:32;45566:119;;;45604:79;;:::i;:::-;45566:119;45724:1;45749:64;45805:7;45796:6;45785:9;45781:22;45749:64;:::i;:::-;45739:74;;45695:128;45862:2;45888:64;45944:7;45935:6;45924:9;45920:22;45888:64;:::i;:::-;45878:74;;45833:129;46001:2;46027:64;46083:7;46074:6;46063:9;46059:22;46027:64;:::i;:::-;46017:74;;45972:129;45445:663;;;;;:::o;46114:179::-;46254:31;46250:1;46242:6;46238:14;46231:55;46114:179;:::o;46299:366::-;46441:3;46462:67;46526:2;46521:3;46462:67;:::i;:::-;46455:74;;46538:93;46627:3;46538:93;:::i;:::-;46656:2;46651:3;46647:12;46640:19;;46299:366;;;:::o;46671:419::-;46837:4;46875:2;46864:9;46860:18;46852:26;;46924:9;46918:4;46914:20;46910:1;46899:9;46895:17;46888:47;46952:131;47078:4;46952:131;:::i;:::-;46944:139;;46671:419;;;:::o;47096:147::-;47197:11;47234:3;47219:18;;47096:147;;;;:::o;47249:114::-;;:::o;47369:398::-;47528:3;47549:83;47630:1;47625:3;47549:83;:::i;:::-;47542:90;;47641:93;47730:3;47641:93;:::i;:::-;47759:1;47754:3;47750:11;47743:18;;47369:398;;;:::o;47773:379::-;47957:3;47979:147;48122:3;47979:147;:::i;:::-;47972:154;;48143:3;48136:10;;47773:379;;;:::o;48158:245::-;48298:34;48294:1;48286:6;48282:14;48275:58;48367:28;48362:2;48354:6;48350:15;48343:53;48158:245;:::o;48409:366::-;48551:3;48572:67;48636:2;48631:3;48572:67;:::i;:::-;48565:74;;48648:93;48737:3;48648:93;:::i;:::-;48766:2;48761:3;48757:12;48750:19;;48409:366;;;:::o;48781:419::-;48947:4;48985:2;48974:9;48970:18;48962:26;;49034:9;49028:4;49024:20;49020:1;49009:9;49005:17;48998:47;49062:131;49188:4;49062:131;:::i;:::-;49054:139;;48781:419;;;:::o

Swarm Source

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