ETH Price: $3,714.07 (+3.35%)

Token

ERC-20: Marosca Inu (MAROSCA)
 

Overview

Max Total Supply

1,000,000,000,000,000 MAROSCA

Holders

342

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
MaroscaInu

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 9 of 11: Marosca.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";

import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";

/*
    <> Cristiano Inu: Cristiano Ronaldo has an inu named Marosca. <>
    Website - https://Maroscainu.net/
    Telegram - https://t.me/Maroscainu
*/

contract MaroscaInu is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping (address => bool) private _isBlacklisted;
    bool private _swapping;
    uint256 private _launchTime;

    address private feeWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public earlySellActive = true;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;

    // To watch for early sells
    mapping (address => uint256) private _holderFirstBuyTimestamp;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    constructor() ERC20("Marosca Inu", "MAROSCA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 marketingFee = 15;
        uint256 liquidityFee = 0;
        
        uint256 totalSupply = 1e15 * 1e18;
        
        maxTransactionAmount = totalSupply * 9 / 1000;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 15 / 10000;

        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        totalFees = _marketingFee + _liquidityFee;
        
        feeWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable early selling tax
    function disableEarlySells() external onlyOwner returns (bool) {
        earlySellActive = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e18;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateFees(uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        totalFees = _marketingFee + _liquidityFee;
        require(totalFees <= 15, "Must keep fees at 15% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setBlacklisted(address[] memory blacklisted_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (blacklisted_[i] != uniswapV2Pair && blacklisted_[i] != address(uniswapV2Router)) {
                _isBlacklisted[blacklisted_[i]] = false;
            }
        }
    }
    
    function delBlacklisted(address[] memory blacklisted_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            _isBlacklisted[blacklisted_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (block.timestamp <= _launchTime) _isBlacklisted[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // set first time buy timestamp
                if (balanceOf(to) == 0 && _holderFirstBuyTimestamp[to] == 0) {
                    _holderFirstBuyTimestamp[to] = block.timestamp;
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

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

        uint256 fees = 0;
        if (takeFee) {
            if (
                automatedMarketMakerPairs[to] 
                && earlySellActive
                && _holderFirstBuyTimestamp[from] != 0 
                && (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp)
            ) {
                uint256 earlyLiquidityFee = 0;
                uint256 earlyMarketingFee = 15;
                uint256 earlyTotalFees = earlyMarketingFee.add(earlyLiquidityFee);

                fees = amount.mul(earlyTotalFees).div(100);
                _tokensForLiquidity += fees * earlyLiquidityFee / earlyTotalFees;
                _tokensForMarketing += fees * earlyMarketingFee / earlyTotalFees;
            } else {
                fees = amount.mul(totalFees).div(100);
                _tokensForLiquidity += fees * _liquidityFee / totalFees;
                _tokensForMarketing += fees * _marketingFee / totalFees;
            }
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount) {
          contractBalance = swapTokensAtAmount;
        }
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;

        (bool success, ) = address(feeWallet).call{value: ethForMarketing}("");
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

 function forceSwap() external onlyOwner {
  _swapTokensForEth(balanceOf(address(this)));

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

function forceSend() external onlyOwner {
  (bool success, ) = address(feeWallet).call{value: address(this).balance}("");
}

    receive() external payable {}
}

File 1 of 11: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 2 of 11: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

        _afterTokenTransfer(account, address(0), 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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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 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 {}
}

File 3 of 11: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

File 4 of 11: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

File 5 of 11: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 6 of 11: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 7 of 11: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 8 of 11: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 11 of 11: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"delBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableEarlySells","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f4d61726f73636120496e750000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4d41524f5343410000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000ad5565b5080600490805190602001906200011b92919062000ad5565b5050506200013e620001326200059560201b60201c565b6200059d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a8160016200066360201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f257600080fd5b505afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d919062000b9c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029057600080fd5b505afa158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb919062000b9c565b6040518363ffffffff1660e01b8152600401620002ea92919062000c7f565b602060405180830381600087803b1580156200030557600080fd5b505af11580156200031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000340919062000b9c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003b5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066360201b60201c565b620003ea600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074d60201b60201c565b6000600f90506000806d314dc6448d9338c15b0a0000000090506103e860098262000416919062000dd0565b62000422919062000d98565b600c81905550606460028262000439919062000dd0565b62000445919062000d98565b600e81905550612710600f826200045d919062000dd0565b62000469919062000d98565b600d8190555082601381905550816014819055506014546013546200048f919062000d3b565b601281905550620004a5620007ee60201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000507620004f9620007ee60201b60201c565b60016200081860201b60201c565b6200051a3060016200081860201b60201c565b6200052f61dead60016200081860201b60201c565b6200055162000543620007ee60201b60201c565b60016200066360201b60201c565b620005643060016200066360201b60201c565b6200057961dead60016200066360201b60201c565b6200058b33826200095260201b60201c565b5050505062000f58565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006736200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000699620007ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006f2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e99062000cc9565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008286200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200084e620007ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089e9062000cc9565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000946919062000cac565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bc9062000ceb565b60405180910390fd5b620009d96000838362000acb60201b60201c565b8060026000828254620009ed919062000d3b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a44919062000d3b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aab919062000d0d565b60405180910390a362000ac76000838362000ad060201b60201c565b5050565b505050565b505050565b82805462000ae39062000e7b565b90600052602060002090601f01602090048101928262000b07576000855562000b53565b82601f1062000b2257805160ff191683800117855562000b53565b8280016001018555821562000b53579182015b8281111562000b5257825182559160200191906001019062000b35565b5b50905062000b62919062000b66565b5090565b5b8082111562000b8157600081600090555060010162000b67565b5090565b60008151905062000b968162000f3e565b92915050565b60006020828403121562000baf57600080fd5b600062000bbf8482850162000b85565b91505092915050565b62000bd38162000e31565b82525050565b62000be48162000e45565b82525050565b600062000bf960208362000d2a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600062000c3b601f8362000d2a565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000c798162000e71565b82525050565b600060408201905062000c96600083018562000bc8565b62000ca5602083018462000bc8565b9392505050565b600060208201905062000cc3600083018462000bd9565b92915050565b6000602082019050818103600083015262000ce48162000bea565b9050919050565b6000602082019050818103600083015262000d068162000c2c565b9050919050565b600060208201905062000d24600083018462000c6e565b92915050565b600082825260208201905092915050565b600062000d488262000e71565b915062000d558362000e71565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d8d5762000d8c62000eb1565b5b828201905092915050565b600062000da58262000e71565b915062000db28362000e71565b92508262000dc55762000dc462000ee0565b5b828204905092915050565b600062000ddd8262000e71565b915062000dea8362000e71565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e265762000e2562000eb1565b5b828202905092915050565b600062000e3e8262000e51565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e9457607f821691505b6020821081141562000eab5762000eaa62000f0f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b62000f498162000e31565b811462000f5557600080fd5b50565b61503c8062000f686000396000f3fe60806040526004361061023f5760003560e01c806375c5df911161012e578063c8125e45116100ab578063df778d261161006f578063df778d2614610892578063e2f45605146108a9578063e884f260146108d4578063f2fde38b146108ff578063f8b45b051461092857610246565b8063c8125e4514610799578063c876d0b9146107c2578063c8c8ebe4146107ed578063d257b34f14610818578063dd62ed3e1461085557610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a9059cbb146106df578063bbc0c7421461071c578063c024666814610747578063c18bc1951461077057610246565b806375c5df91146105e15780638a8c523c1461060c5780638da5cb5b1461062357806395d89b411461064e5780639a7a23d61461067957610246565b8063313ce567116101bc5780636db79437116101805780636db794371461051057806370a0823114610539578063715018a614610576578063751039fc1461058d5780637571336a146105b857610246565b8063313ce5671461041757806339509351146104425780634a62bb651461047f5780634fbee193146104aa57806366718524146104e757610246565b806312b77e8a1161020357806312b77e8a1461034457806313114a9d1461035b57806318160ddd14610386578063203e727e146103b157806323b872dd146103da57610246565b8063056415ca1461024b57806306fdde0314610276578063095ea7b3146102a15780630b559c6f146102de5780630f3a325f1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610953565b60405161026d9190614869565b60405180910390f35b34801561028257600080fd5b5061028b6109f3565b6040516102989190614884565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613d98565b610a85565b6040516102d59190614869565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613dd4565b610aa8565b005b34801561031357600080fd5b5061032e60048036038101906103299190613c7f565b610d11565b60405161033b9190614869565b60405180910390f35b34801561035057600080fd5b50610359610d67565b005b34801561036757600080fd5b50610370610e74565b60405161037d9190614b46565b60405180910390f35b34801561039257600080fd5b5061039b610e7a565b6040516103a89190614b46565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613e15565b610e84565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613d0d565b610f93565b60405161040e9190614869565b60405180910390f35b34801561042357600080fd5b5061042c610fc2565b6040516104399190614bf2565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613d98565b610fcb565b6040516104769190614869565b60405180910390f35b34801561048b57600080fd5b50610494611075565b6040516104a19190614869565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613c7f565b611088565b6040516104de9190614869565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613c7f565b6110de565b005b34801561051c57600080fd5b5061053760048036038101906105329190613e3e565b61121a565b005b34801561054557600080fd5b50610560600480360381019061055b9190613c7f565b611304565b60405161056d9190614b46565b60405180910390f35b34801561058257600080fd5b5061058b61134c565b005b34801561059957600080fd5b506105a26113d4565b6040516105af9190614869565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613d5c565b611474565b005b3480156105ed57600080fd5b506105f661154b565b6040516106039190614869565b60405180910390f35b34801561061857600080fd5b5061062161155e565b005b34801561062f57600080fd5b506106386115fe565b60405161064591906147ed565b60405180910390f35b34801561065a57600080fd5b50610663611628565b6040516106709190614884565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613d5c565b6116ba565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613d98565b6117d5565b6040516106d69190614869565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613d98565b6118bf565b6040516107139190614869565b60405180910390f35b34801561072857600080fd5b506107316118e2565b60405161073e9190614869565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613d5c565b6118f5565b005b34801561077c57600080fd5b5061079760048036038101906107929190613e15565b611a1a565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613dd4565b611b29565b005b3480156107ce57600080fd5b506107d7611c60565b6040516107e49190614869565b60405180910390f35b3480156107f957600080fd5b50610802611c73565b60405161080f9190614b46565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613e15565b611c79565b60405161084c9190614869565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613cd1565b611dce565b6040516108899190614b46565b60405180910390f35b34801561089e57600080fd5b506108a7611e55565b005b3480156108b557600080fd5b506108be611f73565b6040516108cb9190614b46565b60405180910390f35b3480156108e057600080fd5b506108e9611f79565b6040516108f69190614869565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613c7f565b612019565b005b34801561093457600080fd5b5061093d612111565b60405161094a9190614b46565b60405180910390f35b600061095d612117565b73ffffffffffffffffffffffffffffffffffffffff1661097b6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890614a66565b60405180910390fd5b6000600f60026101000a81548160ff0219169083151502179055506001905090565b606060038054610a0290614e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e90614e79565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b600080610a90612117565b9050610a9d81858561211f565b600191505092915050565b610ab0612117565b73ffffffffffffffffffffffffffffffffffffffff16610ace6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90614a66565b60405180910390fd5b60005b8151811015610d0d57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c5c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cfa57600060086000848481518110610ca0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610d0590614eab565b915050610b27565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6f612117565b73ffffffffffffffffffffffffffffffffffffffff16610d8d6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90614a66565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610e2b906147d8565b60006040518083038185875af1925050503d8060008114610e68576040519150601f19603f3d011682016040523d82523d6000602084013e610e6d565b606091505b5050905050565b60125481565b6000600254905090565b610e8c612117565b73ffffffffffffffffffffffffffffffffffffffff16610eaa6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614a66565b60405180910390fd5b670de0b6b3a76400006103e86001610f16610e7a565b610f209190614d51565b610f2a9190614d20565b610f349190614d20565b811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614b26565b60405180910390fd5b670de0b6b3a764000081610f8a9190614d51565b600c8190555050565b600080610f9e612117565b9050610fab8582856122ea565b610fb6858585612376565b60019150509392505050565b60006012905090565b600080610fd6612117565b905061106a818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110659190614cca565b61211f565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110e6612117565b73ffffffffffffffffffffffffffffffffffffffff166111046115fe565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190614a66565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611222612117565b73ffffffffffffffffffffffffffffffffffffffff166112406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614a66565b60405180910390fd5b81601381905550806014819055506014546013546112b49190614cca565b601281905550600f6012541115611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906148c6565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611354612117565b73ffffffffffffffffffffffffffffffffffffffff166113726115fe565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614a66565b60405180910390fd5b6113d2600061318b565b565b60006113de612117565b73ffffffffffffffffffffffffffffffffffffffff166113fc6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614a66565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61147c612117565b73ffffffffffffffffffffffffffffffffffffffff1661149a6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614a66565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60029054906101000a900460ff1681565b611566612117565b73ffffffffffffffffffffffffffffffffffffffff166115846115fe565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614a66565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555042600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461163790614e79565b80601f016020809104026020016040519081016040528092919081815260200182805461166390614e79565b80156116b05780601f10611685576101008083540402835291602001916116b0565b820191906000526020600020905b81548152906001019060200180831161169357829003601f168201915b5050505050905090565b6116c2612117565b73ffffffffffffffffffffffffffffffffffffffff166116e06115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614a66565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be90614966565b60405180910390fd5b6117d18282613251565b5050565b6000806117e0612117565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614b06565b60405180910390fd5b6118b3828686840361211f565b60019250505092915050565b6000806118ca612117565b90506118d7818585612376565b600191505092915050565b600f60019054906101000a900460ff1681565b6118fd612117565b73ffffffffffffffffffffffffffffffffffffffff1661191b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614a66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0e9190614869565b60405180910390a25050565b611a22612117565b73ffffffffffffffffffffffffffffffffffffffff16611a406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90614a66565b60405180910390fd5b670de0b6b3a76400006103e86005611aac610e7a565b611ab69190614d51565b611ac09190614d20565b611aca9190614d20565b811015611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614946565b60405180910390fd5b670de0b6b3a764000081611b209190614d51565b600e8190555050565b611b31612117565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614a66565b60405180910390fd5b60005b8151811015611c5c57600060086000848481518110611bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5490614eab565b915050611ba8565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611c83612117565b73ffffffffffffffffffffffffffffffffffffffff16611ca16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614a66565b60405180910390fd5b620186a06001611d05610e7a565b611d0f9190614d51565b611d199190614d20565b821015611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906149e6565b60405180910390fd5b6103e86005611d68610e7a565b611d729190614d51565b611d7c9190614d20565b821115611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614a06565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5d612117565b73ffffffffffffffffffffffffffffffffffffffff16611e7b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890614a66565b60405180910390fd5b611ee2611edd30611304565b6132f2565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611f2a906147d8565b60006040518083038185875af1925050503d8060008114611f67576040519150601f19603f3d011682016040523d82523d6000602084013e611f6c565b606091505b5050905050565b600d5481565b6000611f83612117565b73ffffffffffffffffffffffffffffffffffffffff16611fa16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90614a66565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b612021612117565b73ffffffffffffffffffffffffffffffffffffffff1661203f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90614906565b60405180910390fd5b61210e8161318b565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614926565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122dd9190614b46565b60405180910390a3505050565b60006122f68484611dce565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123705781811015612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614986565b60405180910390fd5b61236f848484840361211f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906148a6565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614aa6565b60405180910390fd5b60008114156124fd576124f8838360006135b6565b613186565b600a54421161255f576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612cc75761257c6115fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125ea57506125ba6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126235750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126765750600960009054906101000a900460ff16155b15612cc657600f60019054906101000a900460ff1661277057601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127305750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906148e6565b60405180910390fd5b5b600061277b83611304565b1480156127c757506000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156128115742601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160009054906101000a900460ff16156129dd5761282e6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128b75750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129115750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129dc5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90614a46565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a805750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2757600c54811115612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614a26565b60405180910390fd5b600e54612ad683611304565b82612ae19190614cca565b1115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614ae6565b60405180910390fd5b612cc5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1957600c54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906149c6565b60405180910390fd5b612cc4565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cc357600e54612c7683611304565b82612c819190614cca565b1115612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614ae6565b60405180910390fd5b5b5b5b5b5b6000612cd230611304565b90506000600d548210159050808015612cf85750600960009054906101000a900460ff16155b8015612d4e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612da45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dfa5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3e576001600960006101000a81548160ff021916908315150217905550612e22613837565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ef45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612efe57600090505b6000811561317657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6b5750600f60029054906101000a900460ff165b8015612fb757506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b801561301057504262015180601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300d9190614cca565b10155b156130c157600080600f905060006130318383613a2a90919063ffffffff16565b9050613059606461304b838b613a4090919063ffffffff16565b613a5690919063ffffffff16565b93508083856130689190614d51565b6130729190614d20565b601660008282546130839190614cca565b925050819055508082856130979190614d51565b6130a19190614d20565b601560008282546130b29190614cca565b92505081905550505050613152565b6130e960646130db60125488613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050601254601454826130fc9190614d51565b6131069190614d20565b601660008282546131179190614cca565b925050819055506012546013548261312f9190614d51565b6131399190614d20565b6015600082825461314a9190614cca565b925050819055505b6000811115613167576131668730836135b6565b5b80856131739190614dab565b94505b6131818787876135b6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613335577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133635781602001602082028036833780820191505090505b50905030816000815181106133a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561344357600080fd5b505afa158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347b9190613ca8565b816001815181106134b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061351c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613580959493929190614b61565b600060405180830381600087803b15801561359a57600080fd5b505af11580156135ae573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d906148a6565b60405180910390fd5b6136a1838383613a6c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371e906149a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137ba9190614cca565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161381e9190614b46565b60405180910390a3613831848484613a71565b50505050565b600061384230611304565b905060006015546016546138569190614cca565b905060008214806138675750600081145b15613873575050613a28565b600d5482111561388357600d5491505b6000600282601654856138969190614d51565b6138a09190614d20565b6138aa9190614d20565b905060006138c18285613a7690919063ffffffff16565b905060004790506138d1826132f2565b60006138e68247613a7690919063ffffffff16565b905060006139118661390360155485613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050600081836139219190614dab565b9050600060168190555060006015819055506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161397b906147d8565b60006040518083038185875af1925050503d80600081146139b8576040519150601f19603f3d011682016040523d82523d6000602084013e6139bd565b606091505b505090506000871180156139d15750600082115b15613a1e576139e08783613a8c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618683601654604051613a1593929190614bbb565b60405180910390a15b5050505050505050505b565b60008183613a389190614cca565b905092915050565b60008183613a4e9190614d51565b905092915050565b60008183613a649190614d20565b905092915050565b505050565b505050565b60008183613a849190614dab565b905092915050565b613ab930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b056115fe565b426040518863ffffffff1660e01b8152600401613b2796959493929190614808565b6060604051808303818588803b158015613b4057600080fd5b505af1158015613b54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b799190613e7a565b5050505050565b6000613b93613b8e84614c3e565b614c0d565b90508083825260208201905082856020860282011115613bb257600080fd5b60005b85811015613be25781613bc88882613bec565b845260208401935060208301925050600181019050613bb5565b5050509392505050565b600081359050613bfb81614fc1565b92915050565b600081519050613c1081614fc1565b92915050565b600082601f830112613c2757600080fd5b8135613c37848260208601613b80565b91505092915050565b600081359050613c4f81614fd8565b92915050565b600081359050613c6481614fef565b92915050565b600081519050613c7981614fef565b92915050565b600060208284031215613c9157600080fd5b6000613c9f84828501613bec565b91505092915050565b600060208284031215613cba57600080fd5b6000613cc884828501613c01565b91505092915050565b60008060408385031215613ce457600080fd5b6000613cf285828601613bec565b9250506020613d0385828601613bec565b9150509250929050565b600080600060608486031215613d2257600080fd5b6000613d3086828701613bec565b9350506020613d4186828701613bec565b9250506040613d5286828701613c55565b9150509250925092565b60008060408385031215613d6f57600080fd5b6000613d7d85828601613bec565b9250506020613d8e85828601613c40565b9150509250929050565b60008060408385031215613dab57600080fd5b6000613db985828601613bec565b9250506020613dca85828601613c55565b9150509250929050565b600060208284031215613de657600080fd5b600082013567ffffffffffffffff811115613e0057600080fd5b613e0c84828501613c16565b91505092915050565b600060208284031215613e2757600080fd5b6000613e3584828501613c55565b91505092915050565b60008060408385031215613e5157600080fd5b6000613e5f85828601613c55565b9250506020613e7085828601613c55565b9150509250929050565b600080600060608486031215613e8f57600080fd5b6000613e9d86828701613c6a565b9350506020613eae86828701613c6a565b9250506040613ebf86828701613c6a565b9150509250925092565b6000613ed58383613ee1565b60208301905092915050565b613eea81614ddf565b82525050565b613ef981614ddf565b82525050565b6000613f0a82614c7a565b613f148185614c9d565b9350613f1f83614c6a565b8060005b83811015613f50578151613f378882613ec9565b9750613f4283614c90565b925050600181019050613f23565b5085935050505092915050565b613f6681614df1565b82525050565b613f7581614e34565b82525050565b6000613f8682614c85565b613f908185614cb9565b9350613fa0818560208601614e46565b613fa981614fb0565b840191505092915050565b6000613fc1602383614cb9565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614027601d83614cb9565b91507f4d757374206b656570206665657320617420313525206f72206c6573730000006000830152602082019050919050565b6000614067601683614cb9565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b60006140a7602683614cb9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061410d602283614cb9565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614173602483614cb9565b91507f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008301527f302e3525000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141d9603983614cb9565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061423f601d83614cb9565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061427f602683614cb9565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142e5603683614cb9565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b600061434b603583614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b60006143b1603483614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614417603583614cb9565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b600061447d604983614cb9565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b6000614509602083614cb9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614549602583614cb9565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145af600083614cae565b9150600082019050919050565b60006145c9604d83614cb9565b91507f596f7572206164647265737320686173206265656e206d61726b65642061732060008301527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208301527f73666572206f7220737761702e000000000000000000000000000000000000006040830152606082019050919050565b6000614655602483614cb9565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146bb601383614cb9565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006146fb602583614cb9565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614761602f83614cb9565b91507f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008301527f6c6f776572207468616e20302e312500000000000000000000000000000000006020830152604082019050919050565b6147c381614e1d565b82525050565b6147d281614e27565b82525050565b60006147e3826145a2565b9150819050919050565b60006020820190506148026000830184613ef0565b92915050565b600060c08201905061481d6000830189613ef0565b61482a60208301886147ba565b6148376040830187613f6c565b6148446060830186613f6c565b6148516080830185613ef0565b61485e60a08301846147ba565b979650505050505050565b600060208201905061487e6000830184613f5d565b92915050565b6000602082019050818103600083015261489e8184613f7b565b905092915050565b600060208201905081810360008301526148bf81613fb4565b9050919050565b600060208201905081810360008301526148df8161401a565b9050919050565b600060208201905081810360008301526148ff8161405a565b9050919050565b6000602082019050818103600083015261491f8161409a565b9050919050565b6000602082019050818103600083015261493f81614100565b9050919050565b6000602082019050818103600083015261495f81614166565b9050919050565b6000602082019050818103600083015261497f816141cc565b9050919050565b6000602082019050818103600083015261499f81614232565b9050919050565b600060208201905081810360008301526149bf81614272565b9050919050565b600060208201905081810360008301526149df816142d8565b9050919050565b600060208201905081810360008301526149ff8161433e565b9050919050565b60006020820190508181036000830152614a1f816143a4565b9050919050565b60006020820190508181036000830152614a3f8161440a565b9050919050565b60006020820190508181036000830152614a5f81614470565b9050919050565b60006020820190508181036000830152614a7f816144fc565b9050919050565b60006020820190508181036000830152614a9f8161453c565b9050919050565b60006020820190508181036000830152614abf816145bc565b9050919050565b60006020820190508181036000830152614adf81614648565b9050919050565b60006020820190508181036000830152614aff816146ae565b9050919050565b60006020820190508181036000830152614b1f816146ee565b9050919050565b60006020820190508181036000830152614b3f81614754565b9050919050565b6000602082019050614b5b60008301846147ba565b92915050565b600060a082019050614b7660008301886147ba565b614b836020830187613f6c565b8181036040830152614b958186613eff565b9050614ba46060830185613ef0565b614bb160808301846147ba565b9695505050505050565b6000606082019050614bd060008301866147ba565b614bdd60208301856147ba565b614bea60408301846147ba565b949350505050565b6000602082019050614c0760008301846147c9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614c3457614c33614f81565b5b8060405250919050565b600067ffffffffffffffff821115614c5957614c58614f81565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614cd582614e1d565b9150614ce083614e1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1557614d14614ef4565b5b828201905092915050565b6000614d2b82614e1d565b9150614d3683614e1d565b925082614d4657614d45614f23565b5b828204905092915050565b6000614d5c82614e1d565b9150614d6783614e1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da057614d9f614ef4565b5b828202905092915050565b6000614db682614e1d565b9150614dc183614e1d565b925082821015614dd457614dd3614ef4565b5b828203905092915050565b6000614dea82614dfd565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e3f82614e1d565b9050919050565b60005b83811015614e64578082015181840152602081019050614e49565b83811115614e73576000848401525b50505050565b60006002820490506001821680614e9157607f821691505b60208210811415614ea557614ea4614f52565b5b50919050565b6000614eb682614e1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ee957614ee8614ef4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614fca81614ddf565b8114614fd557600080fd5b50565b614fe181614df1565b8114614fec57600080fd5b50565b614ff881614e1d565b811461500357600080fd5b5056fea26469706673582212205073ffa2cfaa2dbf1b96cdb2788712cdc6991d0c980830f1d33ee11ccf5807bd64736f6c63430008000033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806375c5df911161012e578063c8125e45116100ab578063df778d261161006f578063df778d2614610892578063e2f45605146108a9578063e884f260146108d4578063f2fde38b146108ff578063f8b45b051461092857610246565b8063c8125e4514610799578063c876d0b9146107c2578063c8c8ebe4146107ed578063d257b34f14610818578063dd62ed3e1461085557610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a9059cbb146106df578063bbc0c7421461071c578063c024666814610747578063c18bc1951461077057610246565b806375c5df91146105e15780638a8c523c1461060c5780638da5cb5b1461062357806395d89b411461064e5780639a7a23d61461067957610246565b8063313ce567116101bc5780636db79437116101805780636db794371461051057806370a0823114610539578063715018a614610576578063751039fc1461058d5780637571336a146105b857610246565b8063313ce5671461041757806339509351146104425780634a62bb651461047f5780634fbee193146104aa57806366718524146104e757610246565b806312b77e8a1161020357806312b77e8a1461034457806313114a9d1461035b57806318160ddd14610386578063203e727e146103b157806323b872dd146103da57610246565b8063056415ca1461024b57806306fdde0314610276578063095ea7b3146102a15780630b559c6f146102de5780630f3a325f1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610953565b60405161026d9190614869565b60405180910390f35b34801561028257600080fd5b5061028b6109f3565b6040516102989190614884565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613d98565b610a85565b6040516102d59190614869565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613dd4565b610aa8565b005b34801561031357600080fd5b5061032e60048036038101906103299190613c7f565b610d11565b60405161033b9190614869565b60405180910390f35b34801561035057600080fd5b50610359610d67565b005b34801561036757600080fd5b50610370610e74565b60405161037d9190614b46565b60405180910390f35b34801561039257600080fd5b5061039b610e7a565b6040516103a89190614b46565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613e15565b610e84565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613d0d565b610f93565b60405161040e9190614869565b60405180910390f35b34801561042357600080fd5b5061042c610fc2565b6040516104399190614bf2565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613d98565b610fcb565b6040516104769190614869565b60405180910390f35b34801561048b57600080fd5b50610494611075565b6040516104a19190614869565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613c7f565b611088565b6040516104de9190614869565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613c7f565b6110de565b005b34801561051c57600080fd5b5061053760048036038101906105329190613e3e565b61121a565b005b34801561054557600080fd5b50610560600480360381019061055b9190613c7f565b611304565b60405161056d9190614b46565b60405180910390f35b34801561058257600080fd5b5061058b61134c565b005b34801561059957600080fd5b506105a26113d4565b6040516105af9190614869565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613d5c565b611474565b005b3480156105ed57600080fd5b506105f661154b565b6040516106039190614869565b60405180910390f35b34801561061857600080fd5b5061062161155e565b005b34801561062f57600080fd5b506106386115fe565b60405161064591906147ed565b60405180910390f35b34801561065a57600080fd5b50610663611628565b6040516106709190614884565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613d5c565b6116ba565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613d98565b6117d5565b6040516106d69190614869565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613d98565b6118bf565b6040516107139190614869565b60405180910390f35b34801561072857600080fd5b506107316118e2565b60405161073e9190614869565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613d5c565b6118f5565b005b34801561077c57600080fd5b5061079760048036038101906107929190613e15565b611a1a565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613dd4565b611b29565b005b3480156107ce57600080fd5b506107d7611c60565b6040516107e49190614869565b60405180910390f35b3480156107f957600080fd5b50610802611c73565b60405161080f9190614b46565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613e15565b611c79565b60405161084c9190614869565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613cd1565b611dce565b6040516108899190614b46565b60405180910390f35b34801561089e57600080fd5b506108a7611e55565b005b3480156108b557600080fd5b506108be611f73565b6040516108cb9190614b46565b60405180910390f35b3480156108e057600080fd5b506108e9611f79565b6040516108f69190614869565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613c7f565b612019565b005b34801561093457600080fd5b5061093d612111565b60405161094a9190614b46565b60405180910390f35b600061095d612117565b73ffffffffffffffffffffffffffffffffffffffff1661097b6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890614a66565b60405180910390fd5b6000600f60026101000a81548160ff0219169083151502179055506001905090565b606060038054610a0290614e79565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e90614e79565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b600080610a90612117565b9050610a9d81858561211f565b600191505092915050565b610ab0612117565b73ffffffffffffffffffffffffffffffffffffffff16610ace6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90614a66565b60405180910390fd5b60005b8151811015610d0d57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c5c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cfa57600060086000848481518110610ca0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610d0590614eab565b915050610b27565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d6f612117565b73ffffffffffffffffffffffffffffffffffffffff16610d8d6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90614a66565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610e2b906147d8565b60006040518083038185875af1925050503d8060008114610e68576040519150601f19603f3d011682016040523d82523d6000602084013e610e6d565b606091505b5050905050565b60125481565b6000600254905090565b610e8c612117565b73ffffffffffffffffffffffffffffffffffffffff16610eaa6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790614a66565b60405180910390fd5b670de0b6b3a76400006103e86001610f16610e7a565b610f209190614d51565b610f2a9190614d20565b610f349190614d20565b811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90614b26565b60405180910390fd5b670de0b6b3a764000081610f8a9190614d51565b600c8190555050565b600080610f9e612117565b9050610fab8582856122ea565b610fb6858585612376565b60019150509392505050565b60006012905090565b600080610fd6612117565b905061106a818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110659190614cca565b61211f565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110e6612117565b73ffffffffffffffffffffffffffffffffffffffff166111046115fe565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190614a66565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611222612117565b73ffffffffffffffffffffffffffffffffffffffff166112406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614a66565b60405180910390fd5b81601381905550806014819055506014546013546112b49190614cca565b601281905550600f6012541115611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f7906148c6565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611354612117565b73ffffffffffffffffffffffffffffffffffffffff166113726115fe565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614a66565b60405180910390fd5b6113d2600061318b565b565b60006113de612117565b73ffffffffffffffffffffffffffffffffffffffff166113fc6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611452576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144990614a66565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61147c612117565b73ffffffffffffffffffffffffffffffffffffffff1661149a6115fe565b73ffffffffffffffffffffffffffffffffffffffff16146114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614a66565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60029054906101000a900460ff1681565b611566612117565b73ffffffffffffffffffffffffffffffffffffffff166115846115fe565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614a66565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555042600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461163790614e79565b80601f016020809104026020016040519081016040528092919081815260200182805461166390614e79565b80156116b05780601f10611685576101008083540402835291602001916116b0565b820191906000526020600020905b81548152906001019060200180831161169357829003601f168201915b5050505050905090565b6116c2612117565b73ffffffffffffffffffffffffffffffffffffffff166116e06115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d90614a66565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117be90614966565b60405180910390fd5b6117d18282613251565b5050565b6000806117e0612117565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90614b06565b60405180910390fd5b6118b3828686840361211f565b60019250505092915050565b6000806118ca612117565b90506118d7818585612376565b600191505092915050565b600f60019054906101000a900460ff1681565b6118fd612117565b73ffffffffffffffffffffffffffffffffffffffff1661191b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614a66565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a0e9190614869565b60405180910390a25050565b611a22612117565b73ffffffffffffffffffffffffffffffffffffffff16611a406115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90614a66565b60405180910390fd5b670de0b6b3a76400006103e86005611aac610e7a565b611ab69190614d51565b611ac09190614d20565b611aca9190614d20565b811015611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390614946565b60405180910390fd5b670de0b6b3a764000081611b209190614d51565b600e8190555050565b611b31612117565b73ffffffffffffffffffffffffffffffffffffffff16611b4f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614a66565b60405180910390fd5b60005b8151811015611c5c57600060086000848481518110611bf0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c5490614eab565b915050611ba8565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611c83612117565b73ffffffffffffffffffffffffffffffffffffffff16611ca16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee90614a66565b60405180910390fd5b620186a06001611d05610e7a565b611d0f9190614d51565b611d199190614d20565b821015611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906149e6565b60405180910390fd5b6103e86005611d68610e7a565b611d729190614d51565b611d7c9190614d20565b821115611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db590614a06565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e5d612117565b73ffffffffffffffffffffffffffffffffffffffff16611e7b6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec890614a66565b60405180910390fd5b611ee2611edd30611304565b6132f2565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611f2a906147d8565b60006040518083038185875af1925050503d8060008114611f67576040519150601f19603f3d011682016040523d82523d6000602084013e611f6c565b606091505b5050905050565b600d5481565b6000611f83612117565b73ffffffffffffffffffffffffffffffffffffffff16611fa16115fe565b73ffffffffffffffffffffffffffffffffffffffff1614611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90614a66565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b612021612117565b73ffffffffffffffffffffffffffffffffffffffff1661203f6115fe565b73ffffffffffffffffffffffffffffffffffffffff1614612095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208c90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fc90614906565b60405180910390fd5b61210e8161318b565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614ac6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690614926565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122dd9190614b46565b60405180910390a3505050565b60006122f68484611dce565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123705781811015612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614986565b60405180910390fd5b61236f848484840361211f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244d906148a6565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614aa6565b60405180910390fd5b60008114156124fd576124f8838360006135b6565b613186565b600a54421161255f576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612cc75761257c6115fe565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125ea57506125ba6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126235750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561265d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126765750600960009054906101000a900460ff16155b15612cc657600f60019054906101000a900460ff1661277057601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127305750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61276f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612766906148e6565b60405180910390fd5b5b600061277b83611304565b1480156127c757506000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156128115742601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160009054906101000a900460ff16156129dd5761282e6115fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156128b75750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129115750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129dc5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90614a46565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a805750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2757600c54811115612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190614a26565b60405180910390fd5b600e54612ad683611304565b82612ae19190614cca565b1115612b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1990614ae6565b60405180910390fd5b612cc5565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bca5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c1957600c54811115612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b906149c6565b60405180910390fd5b612cc4565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cc357600e54612c7683611304565b82612c819190614cca565b1115612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990614ae6565b60405180910390fd5b5b5b5b5b5b6000612cd230611304565b90506000600d548210159050808015612cf85750600960009054906101000a900460ff16155b8015612d4e5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612da45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dfa5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3e576001600960006101000a81548160ff021916908315150217905550612e22613837565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ef45750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612efe57600090505b6000811561317657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f6b5750600f60029054906101000a900460ff165b8015612fb757506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b801561301057504262015180601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461300d9190614cca565b10155b156130c157600080600f905060006130318383613a2a90919063ffffffff16565b9050613059606461304b838b613a4090919063ffffffff16565b613a5690919063ffffffff16565b93508083856130689190614d51565b6130729190614d20565b601660008282546130839190614cca565b925050819055508082856130979190614d51565b6130a19190614d20565b601560008282546130b29190614cca565b92505081905550505050613152565b6130e960646130db60125488613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050601254601454826130fc9190614d51565b6131069190614d20565b601660008282546131179190614cca565b925050819055506012546013548261312f9190614d51565b6131399190614d20565b6015600082825461314a9190614cca565b925050819055505b6000811115613167576131668730836135b6565b5b80856131739190614dab565b94505b6131818787876135b6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115613335577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133635781602001602082028036833780820191505090505b50905030816000815181106133a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561344357600080fd5b505afa158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347b9190613ca8565b816001815181106134b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061351c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613580959493929190614b61565b600060405180830381600087803b15801561359a57600080fd5b505af11580156135ae573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614a86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d906148a6565b60405180910390fd5b6136a1838383613a6c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371e906149a6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137ba9190614cca565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161381e9190614b46565b60405180910390a3613831848484613a71565b50505050565b600061384230611304565b905060006015546016546138569190614cca565b905060008214806138675750600081145b15613873575050613a28565b600d5482111561388357600d5491505b6000600282601654856138969190614d51565b6138a09190614d20565b6138aa9190614d20565b905060006138c18285613a7690919063ffffffff16565b905060004790506138d1826132f2565b60006138e68247613a7690919063ffffffff16565b905060006139118661390360155485613a4090919063ffffffff16565b613a5690919063ffffffff16565b9050600081836139219190614dab565b9050600060168190555060006015819055506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161397b906147d8565b60006040518083038185875af1925050503d80600081146139b8576040519150601f19603f3d011682016040523d82523d6000602084013e6139bd565b606091505b505090506000871180156139d15750600082115b15613a1e576139e08783613a8c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618683601654604051613a1593929190614bbb565b60405180910390a15b5050505050505050505b565b60008183613a389190614cca565b905092915050565b60008183613a4e9190614d51565b905092915050565b60008183613a649190614d20565b905092915050565b505050565b505050565b60008183613a849190614dab565b905092915050565b613ab930600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461211f565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613b056115fe565b426040518863ffffffff1660e01b8152600401613b2796959493929190614808565b6060604051808303818588803b158015613b4057600080fd5b505af1158015613b54573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b799190613e7a565b5050505050565b6000613b93613b8e84614c3e565b614c0d565b90508083825260208201905082856020860282011115613bb257600080fd5b60005b85811015613be25781613bc88882613bec565b845260208401935060208301925050600181019050613bb5565b5050509392505050565b600081359050613bfb81614fc1565b92915050565b600081519050613c1081614fc1565b92915050565b600082601f830112613c2757600080fd5b8135613c37848260208601613b80565b91505092915050565b600081359050613c4f81614fd8565b92915050565b600081359050613c6481614fef565b92915050565b600081519050613c7981614fef565b92915050565b600060208284031215613c9157600080fd5b6000613c9f84828501613bec565b91505092915050565b600060208284031215613cba57600080fd5b6000613cc884828501613c01565b91505092915050565b60008060408385031215613ce457600080fd5b6000613cf285828601613bec565b9250506020613d0385828601613bec565b9150509250929050565b600080600060608486031215613d2257600080fd5b6000613d3086828701613bec565b9350506020613d4186828701613bec565b9250506040613d5286828701613c55565b9150509250925092565b60008060408385031215613d6f57600080fd5b6000613d7d85828601613bec565b9250506020613d8e85828601613c40565b9150509250929050565b60008060408385031215613dab57600080fd5b6000613db985828601613bec565b9250506020613dca85828601613c55565b9150509250929050565b600060208284031215613de657600080fd5b600082013567ffffffffffffffff811115613e0057600080fd5b613e0c84828501613c16565b91505092915050565b600060208284031215613e2757600080fd5b6000613e3584828501613c55565b91505092915050565b60008060408385031215613e5157600080fd5b6000613e5f85828601613c55565b9250506020613e7085828601613c55565b9150509250929050565b600080600060608486031215613e8f57600080fd5b6000613e9d86828701613c6a565b9350506020613eae86828701613c6a565b9250506040613ebf86828701613c6a565b9150509250925092565b6000613ed58383613ee1565b60208301905092915050565b613eea81614ddf565b82525050565b613ef981614ddf565b82525050565b6000613f0a82614c7a565b613f148185614c9d565b9350613f1f83614c6a565b8060005b83811015613f50578151613f378882613ec9565b9750613f4283614c90565b925050600181019050613f23565b5085935050505092915050565b613f6681614df1565b82525050565b613f7581614e34565b82525050565b6000613f8682614c85565b613f908185614cb9565b9350613fa0818560208601614e46565b613fa981614fb0565b840191505092915050565b6000613fc1602383614cb9565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614027601d83614cb9565b91507f4d757374206b656570206665657320617420313525206f72206c6573730000006000830152602082019050919050565b6000614067601683614cb9565b91507f54726164696e67206973206e6f74206163746976652e000000000000000000006000830152602082019050919050565b60006140a7602683614cb9565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061410d602283614cb9565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614173602483614cb9565b91507f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008301527f302e3525000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006141d9603983614cb9565b91507f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008301527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006020830152604082019050919050565b600061423f601d83614cb9565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b600061427f602683614cb9565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006142e5603683614cb9565b91507f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008301527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006020830152604082019050919050565b600061434b603583614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008301527f20302e3030312520746f74616c20737570706c792e00000000000000000000006020830152604082019050919050565b60006143b1603483614cb9565b91507f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008301527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006020830152604082019050919050565b6000614417603583614cb9565b91507f427579207472616e7366657220616d6f756e742065786365656473207468652060008301527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006020830152604082019050919050565b600061447d604983614cb9565b91507f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008301527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208301527f20616c6c6f7765642e00000000000000000000000000000000000000000000006040830152606082019050919050565b6000614509602083614cb9565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614549602583614cb9565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145af600083614cae565b9150600082019050919050565b60006145c9604d83614cb9565b91507f596f7572206164647265737320686173206265656e206d61726b65642061732060008301527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208301527f73666572206f7220737761702e000000000000000000000000000000000000006040830152606082019050919050565b6000614655602483614cb9565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146bb601383614cb9565b91507f4d61782077616c6c6574206578636565646564000000000000000000000000006000830152602082019050919050565b60006146fb602583614cb9565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614761602f83614cb9565b91507f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008301527f6c6f776572207468616e20302e312500000000000000000000000000000000006020830152604082019050919050565b6147c381614e1d565b82525050565b6147d281614e27565b82525050565b60006147e3826145a2565b9150819050919050565b60006020820190506148026000830184613ef0565b92915050565b600060c08201905061481d6000830189613ef0565b61482a60208301886147ba565b6148376040830187613f6c565b6148446060830186613f6c565b6148516080830185613ef0565b61485e60a08301846147ba565b979650505050505050565b600060208201905061487e6000830184613f5d565b92915050565b6000602082019050818103600083015261489e8184613f7b565b905092915050565b600060208201905081810360008301526148bf81613fb4565b9050919050565b600060208201905081810360008301526148df8161401a565b9050919050565b600060208201905081810360008301526148ff8161405a565b9050919050565b6000602082019050818103600083015261491f8161409a565b9050919050565b6000602082019050818103600083015261493f81614100565b9050919050565b6000602082019050818103600083015261495f81614166565b9050919050565b6000602082019050818103600083015261497f816141cc565b9050919050565b6000602082019050818103600083015261499f81614232565b9050919050565b600060208201905081810360008301526149bf81614272565b9050919050565b600060208201905081810360008301526149df816142d8565b9050919050565b600060208201905081810360008301526149ff8161433e565b9050919050565b60006020820190508181036000830152614a1f816143a4565b9050919050565b60006020820190508181036000830152614a3f8161440a565b9050919050565b60006020820190508181036000830152614a5f81614470565b9050919050565b60006020820190508181036000830152614a7f816144fc565b9050919050565b60006020820190508181036000830152614a9f8161453c565b9050919050565b60006020820190508181036000830152614abf816145bc565b9050919050565b60006020820190508181036000830152614adf81614648565b9050919050565b60006020820190508181036000830152614aff816146ae565b9050919050565b60006020820190508181036000830152614b1f816146ee565b9050919050565b60006020820190508181036000830152614b3f81614754565b9050919050565b6000602082019050614b5b60008301846147ba565b92915050565b600060a082019050614b7660008301886147ba565b614b836020830187613f6c565b8181036040830152614b958186613eff565b9050614ba46060830185613ef0565b614bb160808301846147ba565b9695505050505050565b6000606082019050614bd060008301866147ba565b614bdd60208301856147ba565b614bea60408301846147ba565b949350505050565b6000602082019050614c0760008301846147c9565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614c3457614c33614f81565b5b8060405250919050565b600067ffffffffffffffff821115614c5957614c58614f81565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614cd582614e1d565b9150614ce083614e1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d1557614d14614ef4565b5b828201905092915050565b6000614d2b82614e1d565b9150614d3683614e1d565b925082614d4657614d45614f23565b5b828204905092915050565b6000614d5c82614e1d565b9150614d6783614e1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614da057614d9f614ef4565b5b828202905092915050565b6000614db682614e1d565b9150614dc183614e1d565b925082821015614dd457614dd3614ef4565b5b828203905092915050565b6000614dea82614dfd565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614e3f82614e1d565b9050919050565b60005b83811015614e64578082015181840152602081019050614e49565b83811115614e73576000848401525b50505050565b60006002820490506001821680614e9157607f821691505b60208210811415614ea557614ea4614f52565b5b50919050565b6000614eb682614e1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ee957614ee8614ef4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614fca81614ddf565b8114614fd557600080fd5b50565b614fe181614df1565b8114614fec57600080fd5b50565b614ff881614e1d565b811461500357600080fd5b5056fea26469706673582212205073ffa2cfaa2dbf1b96cdb2788712cdc6991d0c980830f1d33ee11ccf5807bd64736f6c63430008000033

Deployed Bytecode Sourcemap

402:14569:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4290:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2196:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4547:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6946:322:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7495:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14806:125;;;;;;;;;;;;;:::i;:::-;;1203:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3316:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5086:232:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5328:295:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3158:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6032:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;850:33:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6809:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6644:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5705:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3487:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:9;;;;;;;;;;;;;:::i;:::-;;4127:121:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5549:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;930:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3948:123;;;;;;;;;;;;;:::i;:::-;;1063:87:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2415:104:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6192:244:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6775:438:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3820:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;890:33:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6002:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5326:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7280:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1155:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;727:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4692:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4076:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14627:175:8;;;;;;;;;;;;;:::i;:::-;;769:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4482:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;809:24:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4290:127;4347:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4382:5:8::1;4364:15;;:23;;;;;;;;;;;;;;;;;;4405:4;4398:11;;4290:127:::0;:::o;2196:100:1:-;2250:13;2283:5;2276:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2196:100;:::o;4547:201::-;4630:4;4647:13;4663:12;:10;:12::i;:::-;4647:28;;4686:32;4695:5;4702:7;4711:6;4686:8;:32::i;:::-;4736:4;4729:11;;;4547:201;;;;:::o;6946:322:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7034:6:8::1;7029:232;7050:12;:19;7046:1;:23;7029:232;;;7114:13;;;;;;;;;;;7095:32;;:12;7108:1;7095:15;;;;;;;;;;;;;;;;;;;;;;:32;;;;:79;;;;;7158:15;;;;;;;;;;;7131:43;;:12;7144:1;7131:15;;;;;;;;;;;;;;;;;;;;;;:43;;;;7095:79;7091:159;;;7229:5;7195:14;:31;7210:12;7223:1;7210:15;;;;;;;;;;;;;;;;;;;;;;7195:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7091:159;7071:3;;;;;:::i;:::-;;;;7029:232;;;;6946:322:::0;:::o;7495:105::-;7548:4;7572:14;:20;7587:4;7572:20;;;;;;;;;;;;;;;;;;;;;;;;;7565:27;;7495:105;;;:::o;14806:125::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14852:12:8::1;14878:9;;;;;;;;;;;14870:23;;14901:21;14870:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14851:76;;;1354:1:9;14806:125:8:o:0;1203:24::-;;;;:::o;3316:108:1:-;3377:7;3404:12;;3397:19;;3316:108;:::o;5086:232:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5207:4:8::1;5199;5195:1;5179:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5178:33;;;;:::i;:::-;5168:6;:43;;5160:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5306:4;5297:6;:13;;;;:::i;:::-;5274:20;:36;;;;5086:232:::0;:::o;5328:295:1:-;5459:4;5476:15;5494:12;:10;:12::i;:::-;5476:30;;5517:38;5533:4;5539:7;5548:6;5517:15;:38::i;:::-;5566:27;5576:4;5582:2;5586:6;5566:9;:27::i;:::-;5611:4;5604:11;;;5328:295;;;;;:::o;3158:93::-;3216:5;3241:2;3234:9;;3158:93;:::o;6032:240::-;6120:4;6137:13;6153:12;:10;:12::i;:::-;6137:28;;6176:66;6185:5;6192:7;6231:10;6201:11;:18;6213:5;6201:18;;;;;;;;;;;;;;;:27;6220:7;6201:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6176:8;:66::i;:::-;6260:4;6253:11;;;6032:240;;;;:::o;850:33:8:-;;;;;;;;;;;;;:::o;6809:125::-;6874:4;6898:19;:28;6918:7;6898:28;;;;;;;;;;;;;;;;;;;;;;;;;6891:35;;6809:125;;;:::o;6644:157::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6751:9:8::1;;;;;;;;;;;6723:38;;6740:9;6723:38;;;;;;;;;;;;6784:9;6772;;:21;;;;;;;;;;;;;;;;;;6644:157:::0;:::o;5705:289::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5815:12:8::1;5799:13;:28;;;;5854:12;5838:13;:28;;;;5905:13;;5889;;:29;;;;:::i;:::-;5877:9;:41;;;;5950:2;5937:9;;:15;;5929:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;5705:289:::0;;:::o;3487:127:1:-;3561:7;3588:9;:18;3598:7;3588:18;;;;;;;;;;;;;;;;3581:25;;3487:127;;;:::o;1714:103:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;4127:121:8:-;4179:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4213:5:8::1;4196:14;;:22;;;;;;;;;;;;;;;;;;4236:4;4229:11;;4127:121:::0;:::o;5549:144::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5681:4:8::1;5639:31;:39;5671:6;5639:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;5549:144:::0;;:::o;930:34::-;;;;;;;;;;;;;:::o;3948:123::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4019:4:8::1;4003:13;;:20;;;;;;;;;;;;;;;;;;4048:15;4034:11;:29;;;;3948:123::o:0;1063:87:9:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;2415:104:1:-;2471:13;2504:7;2497:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2415:104;:::o;6192:244:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6299:13:8::1;;;;;;;;;;;6291:21;;:4;:21;;;;6283:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;6387:41;6416:4;6422:5;6387:28;:41::i;:::-;6192:244:::0;;:::o;6775:438:1:-;6868:4;6885:13;6901:12;:10;:12::i;:::-;6885:28;;6924:24;6951:11;:18;6963:5;6951:18;;;;;;;;;;;;;;;:27;6970:7;6951:27;;;;;;;;;;;;;;;;6924:54;;7017:15;6997:16;:35;;6989:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7110:60;7119:5;7126:7;7154:15;7135:16;:34;7110:8;:60::i;:::-;7201:4;7194:11;;;;6775:438;;;;:::o;3820:193::-;3899:4;3916:13;3932:12;:10;:12::i;:::-;3916:28;;3955;3965:5;3972:2;3976:6;3955:9;:28::i;:::-;4001:4;3994:11;;;3820:193;;;;:::o;890:33:8:-;;;;;;;;;;;;;:::o;6002:182::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6118:8:8::1;6087:19;:28;6107:7;6087:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6158:7;6142:34;;;6167:8;6142:34;;;;;;:::i;:::-;;;;;;;;6002:182:::0;;:::o;5326:211::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5448:4:8::1;5442;5438:1;5422:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5421:31;;;;:::i;:::-;5411:6;:41;;5403:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;5525:4;5516:6;:13;;;;:::i;:::-;5504:9;:25;;;;5326:211:::0;:::o;7280:203::-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7368:6:8::1;7363:113;7384:12;:19;7380:1;:23;7363:113;;;7459:5;7425:14;:31;7440:12;7453:1;7440:15;;;;;;;;;;;;;;;;;;;;;;7425:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7405:3;;;;;:::i;:::-;;;;7363:113;;;;7280:203:::0;:::o;1155:39::-;;;;;;;;;;;;;:::o;727:35::-;;;;:::o;4692:382::-;4773:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4830:6:8::1;4826:1;4810:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;4797:9;:39;;4789:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;4945:4;4941:1;4925:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;4912:9;:37;;4904:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5037:9;5016:18;:30;;;;5063:4;5056:11;;4692:382:::0;;;:::o;4076:151:1:-;4165:7;4192:11;:18;4204:5;4192:18;;;;;;;;;;;;;;;:27;4211:7;4192:27;;;;;;;;;;;;;;;;4185:34;;4076:151;;;;:::o;14627:175:8:-;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14672:43:8::1;14690:24;14708:4;14690:9;:24::i;:::-;14672:17;:43::i;:::-;14723:12;14749:9;;;;;;;;;;;14741:23;;14772:21;14741:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14722:76;;;1354:1:9;14627:175:8:o:0;769:33::-;;;;:::o;4482:135::-;4542:4;1294:12:9;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4582:5:8::1;4559:20;;:28;;;;;;;;;;;;;;;;;;4605:4;4598:11;;4482:135:::0;:::o;1972:201:9:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;809:24:8:-;;;;:::o;656:98:0:-;709:7;736:10;729:17;;656:98;:::o;10411:380:1:-;10564:1;10547:19;;:5;:19;;;;10539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10645:1;10626:21;;:7;:21;;;;10618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10729:6;10699:11;:18;10711:5;10699:18;;;;;;;;;;;;;;;:27;10718:7;10699:27;;;;;;;;;;;;;;;:36;;;;10767:7;10751:32;;10760:5;10751:32;;;10776:6;10751:32;;;;;;:::i;:::-;;;;;;;;10411:380;;;:::o;11078:453::-;11213:24;11240:25;11250:5;11257:7;11240:9;:25::i;:::-;11213:52;;11300:17;11280:16;:37;11276:248;;11362:6;11342:16;:26;;11334:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11446:51;11455:5;11462:7;11490:6;11471:16;:25;11446:8;:51::i;:::-;11276:248;11078:453;;;;:::o;7608:4520:8:-;7756:1;7740:18;;:4;:18;;;;7732:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7833:1;7819:16;;:2;:16;;;;7811:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7895:14;:20;7910:4;7895:20;;;;;;;;;;;;;;;;;;;;;;;;;7894:21;7886:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8033:1;8023:6;:11;8019:93;;;8051:28;8067:4;8073:2;8077:1;8051:15;:28::i;:::-;8094:7;;8019:93;8147:11;;8128:15;:30;8124:61;;8181:4;8160:14;:18;8175:2;8160:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;8124:61;8210:14;;;;;;;;;;;8206:2057;;;8271:7;:5;:7::i;:::-;8263:15;;:4;:15;;;;:49;;;;;8305:7;:5;:7::i;:::-;8299:13;;:2;:13;;;;8263:49;:86;;;;;8347:1;8333:16;;:2;:16;;;;8263:86;:128;;;;;8384:6;8370:21;;:2;:21;;;;8263:128;:159;;;;;8413:9;;;;;;;;;;;8412:10;8263:159;8241:2011;;;8462:13;;;;;;;;;;;8457:150;;8508:19;:25;8528:4;8508:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;8537:19;:23;8557:2;8537:23;;;;;;;;;;;;;;;;;;;;;;;;;8508:52;8500:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;8457:150;8697:1;8680:13;8690:2;8680:9;:13::i;:::-;:18;:55;;;;;8734:1;8702:24;:28;8727:2;8702:28;;;;;;;;;;;;;;;;:33;8680:55;8676:150;;;8791:15;8760:24;:28;8785:2;8760:28;;;;;;;;;;;;;;;:46;;;;8676:150;8984:20;;;;;;;;;;;8980:423;;;9038:7;:5;:7::i;:::-;9032:13;;:2;:13;;;;:47;;;;;9063:15;;;;;;;;;;;9049:30;;:2;:30;;;;9032:47;:79;;;;;9097:13;;;;;;;;;;;9083:28;;:2;:28;;;;9032:79;9028:356;;;9189:12;9147:28;:39;9176:9;9147:39;;;;;;;;;;;;;;;;:54;9139:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;9348:12;9306:28;:39;9335:9;9306:39;;;;;;;;;;;;;;;:54;;;;9028:356;8980:423;9473:25;:31;9499:4;9473:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;9509:31;:35;9541:2;9509:35;;;;;;;;;;;;;;;;;;;;;;;;;9508:36;9473:71;9469:768;;;9587:20;;9577:6;:30;;9569:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;9722:9;;9705:13;9715:2;9705:9;:13::i;:::-;9696:6;:22;;;;:::i;:::-;:35;;9688:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9469:768;;;9850:25;:29;9876:2;9850:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;9884:31;:37;9916:4;9884:37;;;;;;;;;;;;;;;;;;;;;;;;;9883:38;9850:71;9846:391;;;9964:20;;9954:6;:30;;9946:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;9846:391;;;10091:31;:35;10123:2;10091:35;;;;;;;;;;;;;;;;;;;;;;;;;10086:151;;10184:9;;10167:13;10177:2;10167:9;:13::i;:::-;10158:6;:22;;;;:::i;:::-;:35;;10150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10086:151;9846:391;9469:768;8241:2011;8206:2057;10277:28;10308:24;10326:4;10308:9;:24::i;:::-;10277:55;;10343:12;10382:18;;10358:20;:42;;10343:57;;10429:7;:34;;;;;10454:9;;;;;;;;;;;10453:10;10429:34;:83;;;;;10481:25;:31;10507:4;10481:31;;;;;;;;;;;;;;;;;;;;;;;;;10480:32;10429:83;:126;;;;;10530:19;:25;10550:4;10530:25;;;;;;;;;;;;;;;;;;;;;;;;;10529:26;10429:126;:167;;;;;10573:19;:23;10593:2;10573:23;;;;;;;;;;;;;;;;;;;;;;;;;10572:24;10429:167;10411:297;;;10635:4;10623:9;;:16;;;;;;;;;;;;;;;;;;10654:10;:8;:10::i;:::-;10691:5;10679:9;;:17;;;;;;;;;;;;;;;;;;10411:297;10720:12;10736:9;;;;;;;;;;;10735:10;10720:25;;10847:19;:25;10867:4;10847:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;10876:19;:23;10896:2;10876:23;;;;;;;;;;;;;;;;;;;;;;;;;10847:52;10843:100;;;10926:5;10916:15;;10843:100;10955:12;10986:7;10982:1093;;;11032:25;:29;11058:2;11032:29;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;11083:15;;;;;;;;;;;11032:66;:122;;;;;11153:1;11119:24;:30;11144:4;11119:30;;;;;;;;;;;;;;;;:35;;11032:122;:208;;;;;11224:15;11211:8;11177:24;:30;11202:4;11177:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;11032:208;11010:898;;;11275:25;11323;11351:2;11323:30;;11372:22;11397:40;11419:17;11397;:21;;:40;;;;:::i;:::-;11372:65;;11465:35;11496:3;11465:26;11476:14;11465:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;11458:42;;11569:14;11549:17;11542:4;:24;;;;:::i;:::-;:41;;;;:::i;:::-;11519:19;;:64;;;;;;;:::i;:::-;;;;;;;;11652:14;11632:17;11625:4;:24;;;;:::i;:::-;:41;;;;:::i;:::-;11602:19;;:64;;;;;;;:::i;:::-;;;;;;;;11010:898;;;;;;11714:30;11740:3;11714:21;11725:9;;11714:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;11707:37;;11809:9;;11793:13;;11786:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;11763:19;;:55;;;;;;;:::i;:::-;;;;;;;;11883:9;;11867:13;;11860:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;11837:19;;:55;;;;;;;:::i;:::-;;;;;;;;11010:898;11947:1;11940:4;:8;11936:91;;;11969:42;11985:4;11999;12006;11969:15;:42::i;:::-;11936:91;12059:4;12049:14;;;;;:::i;:::-;;;10982:1093;12087:33;12103:4;12109:2;12113:6;12087:15;:33::i;:::-;7608:4520;;;;;;;;:::o;2333:191:9:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2333:191;;:::o;6444:188:8:-;6561:5;6527:25;:31;6553:4;6527:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6618:5;6584:40;;6612:4;6584:40;;;;;;;;;;;;6444:188;;:::o;12136:590::-;12263:21;12301:1;12287:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12263:40;;12332:4;12314;12319:1;12314:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12358:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12348:4;12353:1;12348:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;12393:62;12410:4;12425:15;;;;;;;;;;;12443:11;12393:8;:62::i;:::-;12494:15;;;;;;;;;;;:66;;;12575:11;12601:1;12645:4;12672;12692:15;12494:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12136:590;;:::o;7692:671:1:-;7839:1;7823:18;;:4;:18;;;;7815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7916:1;7902:16;;:2;:16;;;;7894:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7971:38;7992:4;7998:2;8002:6;7971:20;:38::i;:::-;8022:19;8044:9;:15;8054:4;8044:15;;;;;;;;;;;;;;;;8022:37;;8093:6;8078:11;:21;;8070:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8210:6;8196:11;:20;8178:9;:15;8188:4;8178:15;;;;;;;;;;;;;;;:38;;;;8255:6;8238:9;:13;8248:2;8238:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8294:2;8279:26;;8288:4;8279:26;;;8298:6;8279:26;;;;;;:::i;:::-;;;;;;;;8318:37;8338:4;8344:2;8348:6;8318:19;:37::i;:::-;7692:671;;;;:::o;13260:1362:8:-;13299:23;13325:24;13343:4;13325:9;:24::i;:::-;13299:50;;13360:25;13410:19;;13388;;:41;;;;:::i;:::-;13360:69;;13473:1;13454:15;:20;:46;;;;13499:1;13478:17;:22;13454:46;13450:59;;;13502:7;;;;13450:59;13541:18;;13523:15;:36;13519:103;;;13592:18;;13574:36;;13519:103;13681:23;13767:1;13747:17;13725:19;;13707:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;13681:87;;13779:26;13808:36;13828:15;13808;:19;;:36;;;;:::i;:::-;13779:65;;13865:25;13893:21;13865:49;;13927:37;13945:18;13927:17;:37::i;:::-;13986:18;14007:44;14033:17;14007:21;:25;;:44;;;;:::i;:::-;13986:65;;14062:23;14088:58;14128:17;14088:35;14103:19;;14088:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;14062:84;;14157:23;14196:15;14183:10;:28;;;;:::i;:::-;14157:54;;14254:1;14232:19;:23;;;;14288:1;14266:19;:23;;;;14303:12;14329:9;;;;;;;;;;;14321:23;;14352:15;14321:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14302:70;;;14423:1;14405:15;:19;:42;;;;;14446:1;14428:15;:19;14405:42;14401:214;;;14464:47;14478:15;14495;14464:13;:47::i;:::-;14531:72;14546:18;14566:15;14583:19;;14531:72;;;;;;;;:::i;:::-;;;;;;;;14401:214;13260:1362;;;;;;;;;;:::o;2833:98:10:-;2891:7;2922:1;2918;:5;;;;:::i;:::-;2911:12;;2833:98;;;;:::o;3571:::-;3629:7;3660:1;3656;:5;;;;:::i;:::-;3649:12;;3571:98;;;;:::o;3970:::-;4028:7;4059:1;4055;:5;;;;:::i;:::-;4048:12;;3970:98;;;;:::o;12131:125:1:-;;;;:::o;12860:124::-;;;;:::o;3214:98:10:-;3272:7;3303:1;3299;:5;;;;:::i;:::-;3292:12;;3214:98;;;;:::o;12738:514:8:-;12887:62;12904:4;12919:15;;;;;;;;;;;12937:11;12887:8;:62::i;:::-;12992:15;;;;;;;;;;;:31;;;13031:9;13064:4;13084:11;13110:1;13153;13196:7;:5;:7::i;:::-;13218:15;12992:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12738:514;;:::o;24:622:11:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:143::-;;885:6;879:13;870:22;;901:33;928:5;901:33;:::i;:::-;860:80;;;;:::o;963:303::-;;1083:3;1076:4;1068:6;1064:17;1060:27;1050:2;;1101:1;1098;1091:12;1050:2;1141:6;1128:20;1166:94;1256:3;1248:6;1241:4;1233:6;1229:17;1166:94;:::i;:::-;1157:103;;1040:226;;;;;:::o;1272:133::-;;1353:6;1340:20;1331:29;;1369:30;1393:5;1369:30;:::i;:::-;1321:84;;;;:::o;1411:139::-;;1495:6;1482:20;1473:29;;1511:33;1538:5;1511:33;:::i;:::-;1463:87;;;;:::o;1556:143::-;;1644:6;1638:13;1629:22;;1660:33;1687:5;1660:33;:::i;:::-;1619:80;;;;:::o;1705:262::-;;1813:2;1801:9;1792:7;1788:23;1784:32;1781:2;;;1829:1;1826;1819:12;1781:2;1872:1;1897:53;1942:7;1933:6;1922:9;1918:22;1897:53;:::i;:::-;1887:63;;1843:117;1771:196;;;;:::o;1973:284::-;;2092:2;2080:9;2071:7;2067:23;2063:32;2060:2;;;2108:1;2105;2098:12;2060:2;2151:1;2176:64;2232:7;2223:6;2212:9;2208:22;2176:64;:::i;:::-;2166:74;;2122:128;2050:207;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:552::-;;;;2818:2;2806:9;2797:7;2793:23;2789:32;2786:2;;;2834:1;2831;2824:12;2786:2;2877:1;2902:53;2947:7;2938:6;2927:9;2923:22;2902:53;:::i;:::-;2892:63;;2848:117;3004:2;3030:53;3075:7;3066:6;3055:9;3051:22;3030:53;:::i;:::-;3020:63;;2975:118;3132:2;3158:53;3203:7;3194:6;3183:9;3179:22;3158:53;:::i;:::-;3148:63;;3103:118;2776:452;;;;;:::o;3234:401::-;;;3356:2;3344:9;3335:7;3331:23;3327:32;3324:2;;;3372:1;3369;3362:12;3324:2;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:50;3610:7;3601:6;3590:9;3586:22;3568:50;:::i;:::-;3558:60;;3513:115;3314:321;;;;;:::o;3641:407::-;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3796:117;3952:2;3978:53;4023:7;4014:6;4003:9;3999:22;3978:53;:::i;:::-;3968:63;;3923:118;3724:324;;;;;:::o;4054:405::-;;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4274:1;4263:9;4259:17;4246:31;4304:18;4296:6;4293:30;4290:2;;;4336:1;4333;4326:12;4290:2;4364:78;4434:7;4425:6;4414:9;4410:22;4364:78;:::i;:::-;4354:88;;4217:235;4145:314;;;;:::o;4465:262::-;;4573:2;4561:9;4552:7;4548:23;4544:32;4541:2;;;4589:1;4586;4579:12;4541:2;4632:1;4657:53;4702:7;4693:6;4682:9;4678:22;4657:53;:::i;:::-;4647:63;;4603:117;4531:196;;;;:::o;4733:407::-;;;4858:2;4846:9;4837:7;4833:23;4829:32;4826:2;;;4874:1;4871;4864:12;4826:2;4917:1;4942:53;4987:7;4978:6;4967:9;4963:22;4942:53;:::i;:::-;4932:63;;4888:117;5044:2;5070:53;5115:7;5106:6;5095:9;5091:22;5070:53;:::i;:::-;5060:63;;5015:118;4816:324;;;;;:::o;5146:596::-;;;;5299:2;5287:9;5278:7;5274:23;5270:32;5267:2;;;5315:1;5312;5305:12;5267:2;5358:1;5383:64;5439:7;5430:6;5419:9;5415:22;5383:64;:::i;:::-;5373:74;;5329:128;5496:2;5522:64;5578:7;5569:6;5558:9;5554:22;5522:64;:::i;:::-;5512:74;;5467:129;5635:2;5661:64;5717:7;5708:6;5697:9;5693:22;5661:64;:::i;:::-;5651:74;;5606:129;5257:485;;;;;:::o;5748:179::-;;5838:46;5880:3;5872:6;5838:46;:::i;:::-;5916:4;5911:3;5907:14;5893:28;;5828:99;;;;:::o;5933:108::-;6010:24;6028:5;6010:24;:::i;:::-;6005:3;5998:37;5988:53;;:::o;6047:118::-;6134:24;6152:5;6134:24;:::i;:::-;6129:3;6122:37;6112:53;;:::o;6201:732::-;;6349:54;6397:5;6349:54;:::i;:::-;6419:86;6498:6;6493:3;6419:86;:::i;:::-;6412:93;;6529:56;6579:5;6529:56;:::i;:::-;6608:7;6639:1;6624:284;6649:6;6646:1;6643:13;6624:284;;;6725:6;6719:13;6752:63;6811:3;6796:13;6752:63;:::i;:::-;6745:70;;6838:60;6891:6;6838:60;:::i;:::-;6828:70;;6684:224;6671:1;6668;6664:9;6659:14;;6624:284;;;6628:14;6924:3;6917:10;;6325:608;;;;;;;:::o;6939:109::-;7020:21;7035:5;7020:21;:::i;:::-;7015:3;7008:34;6998:50;;:::o;7054:147::-;7149:45;7188:5;7149:45;:::i;:::-;7144:3;7137:58;7127:74;;:::o;7207:364::-;;7323:39;7356:5;7323:39;:::i;:::-;7378:71;7442:6;7437:3;7378:71;:::i;:::-;7371:78;;7458:52;7503:6;7498:3;7491:4;7484:5;7480:16;7458:52;:::i;:::-;7535:29;7557:6;7535:29;:::i;:::-;7530:3;7526:39;7519:46;;7299:272;;;;;:::o;7577:367::-;;7740:67;7804:2;7799:3;7740:67;:::i;:::-;7733:74;;7837:34;7833:1;7828:3;7824:11;7817:55;7903:5;7898:2;7893:3;7889:12;7882:27;7935:2;7930:3;7926:12;7919:19;;7723:221;;;:::o;7950:327::-;;8113:67;8177:2;8172:3;8113:67;:::i;:::-;8106:74;;8210:31;8206:1;8201:3;8197:11;8190:52;8268:2;8263:3;8259:12;8252:19;;8096:181;;;:::o;8283:320::-;;8446:67;8510:2;8505:3;8446:67;:::i;:::-;8439:74;;8543:24;8539:1;8534:3;8530:11;8523:45;8594:2;8589:3;8585:12;8578:19;;8429:174;;;:::o;8609:370::-;;8772:67;8836:2;8831:3;8772:67;:::i;:::-;8765:74;;8869:34;8865:1;8860:3;8856:11;8849:55;8935:8;8930:2;8925:3;8921:12;8914:30;8970:2;8965:3;8961:12;8954:19;;8755:224;;;:::o;8985:366::-;;9148:67;9212:2;9207:3;9148:67;:::i;:::-;9141:74;;9245:34;9241:1;9236:3;9232:11;9225:55;9311:4;9306:2;9301:3;9297:12;9290:26;9342:2;9337:3;9333:12;9326:19;;9131:220;;;:::o;9357:368::-;;9520:67;9584:2;9579:3;9520:67;:::i;:::-;9513:74;;9617:34;9613:1;9608:3;9604:11;9597:55;9683:6;9678:2;9673:3;9669:12;9662:28;9716:2;9711:3;9707:12;9700:19;;9503:222;;;:::o;9731:389::-;;9894:67;9958:2;9953:3;9894:67;:::i;:::-;9887:74;;9991:34;9987:1;9982:3;9978:11;9971:55;10057:27;10052:2;10047:3;10043:12;10036:49;10111:2;10106:3;10102:12;10095:19;;9877:243;;;:::o;10126:327::-;;10289:67;10353:2;10348:3;10289:67;:::i;:::-;10282:74;;10386:31;10382:1;10377:3;10373:11;10366:52;10444:2;10439:3;10435:12;10428:19;;10272:181;;;:::o;10459:370::-;;10622:67;10686:2;10681:3;10622:67;:::i;:::-;10615:74;;10719:34;10715:1;10710:3;10706:11;10699:55;10785:8;10780:2;10775:3;10771:12;10764:30;10820:2;10815:3;10811:12;10804:19;;10605:224;;;:::o;10835:386::-;;10998:67;11062:2;11057:3;10998:67;:::i;:::-;10991:74;;11095:34;11091:1;11086:3;11082:11;11075:55;11161:24;11156:2;11151:3;11147:12;11140:46;11212:2;11207:3;11203:12;11196:19;;10981:240;;;:::o;11227:385::-;;11390:67;11454:2;11449:3;11390:67;:::i;:::-;11383:74;;11487:34;11483:1;11478:3;11474:11;11467:55;11553:23;11548:2;11543:3;11539:12;11532:45;11603:2;11598:3;11594:12;11587:19;;11373:239;;;:::o;11618:384::-;;11781:67;11845:2;11840:3;11781:67;:::i;:::-;11774:74;;11878:34;11874:1;11869:3;11865:11;11858:55;11944:22;11939:2;11934:3;11930:12;11923:44;11993:2;11988:3;11984:12;11977:19;;11764:238;;;:::o;12008:385::-;;12171:67;12235:2;12230:3;12171:67;:::i;:::-;12164:74;;12268:34;12264:1;12259:3;12255:11;12248:55;12334:23;12329:2;12324:3;12320:12;12313:45;12384:2;12379:3;12375:12;12368:19;;12154:239;;;:::o;12399:439::-;;12562:67;12626:2;12621:3;12562:67;:::i;:::-;12555:74;;12659:34;12655:1;12650:3;12646:11;12639:55;12725:34;12720:2;12715:3;12711:12;12704:56;12791:11;12786:2;12781:3;12777:12;12770:33;12829:2;12824:3;12820:12;12813:19;;12545:293;;;:::o;12844:330::-;;13007:67;13071:2;13066:3;13007:67;:::i;:::-;13000:74;;13104:34;13100:1;13095:3;13091:11;13084:55;13165:2;13160:3;13156:12;13149:19;;12990:184;;;:::o;13180:369::-;;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13440:34;13436:1;13431:3;13427:11;13420:55;13506:7;13501:2;13496:3;13492:12;13485:29;13540:2;13535:3;13531:12;13524:19;;13326:223;;;:::o;13555:297::-;;13735:83;13816:1;13811:3;13735:83;:::i;:::-;13728:90;;13844:1;13839:3;13835:11;13828:18;;13718:134;;;:::o;13858:443::-;;14021:67;14085:2;14080:3;14021:67;:::i;:::-;14014:74;;14118:34;14114:1;14109:3;14105:11;14098:55;14184:34;14179:2;14174:3;14170:12;14163:56;14250:15;14245:2;14240:3;14236:12;14229:37;14292:2;14287:3;14283:12;14276:19;;14004:297;;;:::o;14307:368::-;;14470:67;14534:2;14529:3;14470:67;:::i;:::-;14463:74;;14567:34;14563:1;14558:3;14554:11;14547:55;14633:6;14628:2;14623:3;14619:12;14612:28;14666:2;14661:3;14657:12;14650:19;;14453:222;;;:::o;14681:317::-;;14844:67;14908:2;14903:3;14844:67;:::i;:::-;14837:74;;14941:21;14937:1;14932:3;14928:11;14921:42;14989:2;14984:3;14980:12;14973:19;;14827:171;;;:::o;15004:369::-;;15167:67;15231:2;15226:3;15167:67;:::i;:::-;15160:74;;15264:34;15260:1;15255:3;15251:11;15244:55;15330:7;15325:2;15320:3;15316:12;15309:29;15364:2;15359:3;15355:12;15348:19;;15150:223;;;:::o;15379:379::-;;15542:67;15606:2;15601:3;15542:67;:::i;:::-;15535:74;;15639:34;15635:1;15630:3;15626:11;15619:55;15705:17;15700:2;15695:3;15691:12;15684:39;15749:2;15744:3;15740:12;15733:19;;15525:233;;;:::o;15764:118::-;15851:24;15869:5;15851:24;:::i;:::-;15846:3;15839:37;15829:53;;:::o;15888:112::-;15971:22;15987:5;15971:22;:::i;:::-;15966:3;15959:35;15949:51;;:::o;16006:379::-;;16212:147;16355:3;16212:147;:::i;:::-;16205:154;;16376:3;16369:10;;16194:191;;;:::o;16391:222::-;;16522:2;16511:9;16507:18;16499:26;;16535:71;16603:1;16592:9;16588:17;16579:6;16535:71;:::i;:::-;16489:124;;;;:::o;16619:807::-;;16906:3;16895:9;16891:19;16883:27;;16920:71;16988:1;16977:9;16973:17;16964:6;16920:71;:::i;:::-;17001:72;17069:2;17058:9;17054:18;17045:6;17001:72;:::i;:::-;17083:80;17159:2;17148:9;17144:18;17135:6;17083:80;:::i;:::-;17173;17249:2;17238:9;17234:18;17225:6;17173:80;:::i;:::-;17263:73;17331:3;17320:9;17316:19;17307:6;17263:73;:::i;:::-;17346;17414:3;17403:9;17399:19;17390:6;17346:73;:::i;:::-;16873:553;;;;;;;;;:::o;17432:210::-;;17557:2;17546:9;17542:18;17534:26;;17570:65;17632:1;17621:9;17617:17;17608:6;17570:65;:::i;:::-;17524:118;;;;:::o;17648:313::-;;17799:2;17788:9;17784:18;17776:26;;17848:9;17842:4;17838:20;17834:1;17823:9;17819:17;17812:47;17876:78;17949:4;17940:6;17876:78;:::i;:::-;17868:86;;17766:195;;;;:::o;17967:419::-;;18171:2;18160:9;18156:18;18148:26;;18220:9;18214:4;18210:20;18206:1;18195:9;18191:17;18184:47;18248:131;18374:4;18248:131;:::i;:::-;18240:139;;18138:248;;;:::o;18392:419::-;;18596:2;18585:9;18581:18;18573:26;;18645:9;18639:4;18635:20;18631:1;18620:9;18616:17;18609:47;18673:131;18799:4;18673:131;:::i;:::-;18665:139;;18563:248;;;:::o;18817:419::-;;19021:2;19010:9;19006:18;18998:26;;19070:9;19064:4;19060:20;19056:1;19045:9;19041:17;19034:47;19098:131;19224:4;19098:131;:::i;:::-;19090:139;;18988:248;;;:::o;19242:419::-;;19446:2;19435:9;19431:18;19423:26;;19495:9;19489:4;19485:20;19481:1;19470:9;19466:17;19459:47;19523:131;19649:4;19523:131;:::i;:::-;19515:139;;19413:248;;;:::o;19667:419::-;;19871:2;19860:9;19856:18;19848:26;;19920:9;19914:4;19910:20;19906:1;19895:9;19891:17;19884:47;19948:131;20074:4;19948:131;:::i;:::-;19940:139;;19838:248;;;:::o;20092:419::-;;20296:2;20285:9;20281:18;20273:26;;20345:9;20339:4;20335:20;20331:1;20320:9;20316:17;20309:47;20373:131;20499:4;20373:131;:::i;:::-;20365:139;;20263:248;;;:::o;20517:419::-;;20721:2;20710:9;20706:18;20698:26;;20770:9;20764:4;20760:20;20756:1;20745:9;20741:17;20734:47;20798:131;20924:4;20798:131;:::i;:::-;20790:139;;20688:248;;;:::o;20942:419::-;;21146:2;21135:9;21131:18;21123:26;;21195:9;21189:4;21185:20;21181:1;21170:9;21166:17;21159:47;21223:131;21349:4;21223:131;:::i;:::-;21215:139;;21113:248;;;:::o;21367:419::-;;21571:2;21560:9;21556:18;21548:26;;21620:9;21614:4;21610:20;21606:1;21595:9;21591:17;21584:47;21648:131;21774:4;21648:131;:::i;:::-;21640:139;;21538:248;;;:::o;21792:419::-;;21996:2;21985:9;21981:18;21973:26;;22045:9;22039:4;22035:20;22031:1;22020:9;22016:17;22009:47;22073:131;22199:4;22073:131;:::i;:::-;22065:139;;21963:248;;;:::o;22217:419::-;;22421:2;22410:9;22406:18;22398:26;;22470:9;22464:4;22460:20;22456:1;22445:9;22441:17;22434:47;22498:131;22624:4;22498:131;:::i;:::-;22490:139;;22388:248;;;:::o;22642:419::-;;22846:2;22835:9;22831:18;22823:26;;22895:9;22889:4;22885:20;22881:1;22870:9;22866:17;22859:47;22923:131;23049:4;22923:131;:::i;:::-;22915:139;;22813:248;;;:::o;23067:419::-;;23271:2;23260:9;23256:18;23248:26;;23320:9;23314:4;23310:20;23306:1;23295:9;23291:17;23284:47;23348:131;23474:4;23348:131;:::i;:::-;23340:139;;23238:248;;;:::o;23492:419::-;;23696:2;23685:9;23681:18;23673:26;;23745:9;23739:4;23735:20;23731:1;23720:9;23716:17;23709:47;23773:131;23899:4;23773:131;:::i;:::-;23765:139;;23663:248;;;:::o;23917:419::-;;24121:2;24110:9;24106:18;24098:26;;24170:9;24164:4;24160:20;24156:1;24145:9;24141:17;24134:47;24198:131;24324:4;24198:131;:::i;:::-;24190:139;;24088:248;;;:::o;24342:419::-;;24546:2;24535:9;24531:18;24523:26;;24595:9;24589:4;24585:20;24581:1;24570:9;24566:17;24559:47;24623:131;24749:4;24623:131;:::i;:::-;24615:139;;24513:248;;;:::o;24767:419::-;;24971:2;24960:9;24956:18;24948:26;;25020:9;25014:4;25010:20;25006:1;24995:9;24991:17;24984:47;25048:131;25174:4;25048:131;:::i;:::-;25040:139;;24938:248;;;:::o;25192:419::-;;25396:2;25385:9;25381:18;25373:26;;25445:9;25439:4;25435:20;25431:1;25420:9;25416:17;25409:47;25473:131;25599:4;25473:131;:::i;:::-;25465:139;;25363:248;;;:::o;25617:419::-;;25821:2;25810:9;25806:18;25798:26;;25870:9;25864:4;25860:20;25856:1;25845:9;25841:17;25834:47;25898:131;26024:4;25898:131;:::i;:::-;25890:139;;25788:248;;;:::o;26042:419::-;;26246:2;26235:9;26231:18;26223:26;;26295:9;26289:4;26285:20;26281:1;26270:9;26266:17;26259:47;26323:131;26449:4;26323:131;:::i;:::-;26315:139;;26213:248;;;:::o;26467:419::-;;26671:2;26660:9;26656:18;26648:26;;26720:9;26714:4;26710:20;26706:1;26695:9;26691:17;26684:47;26748:131;26874:4;26748:131;:::i;:::-;26740:139;;26638:248;;;:::o;26892:222::-;;27023:2;27012:9;27008:18;27000:26;;27036:71;27104:1;27093:9;27089:17;27080:6;27036:71;:::i;:::-;26990:124;;;;:::o;27120:831::-;;27421:3;27410:9;27406:19;27398:27;;27435:71;27503:1;27492:9;27488:17;27479:6;27435:71;:::i;:::-;27516:80;27592:2;27581:9;27577:18;27568:6;27516:80;:::i;:::-;27643:9;27637:4;27633:20;27628:2;27617:9;27613:18;27606:48;27671:108;27774:4;27765:6;27671:108;:::i;:::-;27663:116;;27789:72;27857:2;27846:9;27842:18;27833:6;27789:72;:::i;:::-;27871:73;27939:3;27928:9;27924:19;27915:6;27871:73;:::i;:::-;27388:563;;;;;;;;:::o;27957:442::-;;28144:2;28133:9;28129:18;28121:26;;28157:71;28225:1;28214:9;28210:17;28201:6;28157:71;:::i;:::-;28238:72;28306:2;28295:9;28291:18;28282:6;28238:72;:::i;:::-;28320;28388:2;28377:9;28373:18;28364:6;28320:72;:::i;:::-;28111:288;;;;;;:::o;28405:214::-;;28532:2;28521:9;28517:18;28509:26;;28545:67;28609:1;28598:9;28594:17;28585:6;28545:67;:::i;:::-;28499:120;;;;:::o;28625:283::-;;28691:2;28685:9;28675:19;;28733:4;28725:6;28721:17;28840:6;28828:10;28825:22;28804:18;28792:10;28789:34;28786:62;28783:2;;;28851:18;;:::i;:::-;28783:2;28891:10;28887:2;28880:22;28665:243;;;;:::o;28914:311::-;;29081:18;29073:6;29070:30;29067:2;;;29103:18;;:::i;:::-;29067:2;29153:4;29145:6;29141:17;29133:25;;29213:4;29207;29203:15;29195:23;;28996:229;;;:::o;29231:132::-;;29321:3;29313:11;;29351:4;29346:3;29342:14;29334:22;;29303:60;;;:::o;29369:114::-;;29470:5;29464:12;29454:22;;29443:40;;;:::o;29489:99::-;;29575:5;29569:12;29559:22;;29548:40;;;:::o;29594:113::-;;29696:4;29691:3;29687:14;29679:22;;29669:38;;;:::o;29713:184::-;;29846:6;29841:3;29834:19;29886:4;29881:3;29877:14;29862:29;;29824:73;;;;:::o;29903:147::-;;30041:3;30026:18;;30016:34;;;;:::o;30056:169::-;;30174:6;30169:3;30162:19;30214:4;30209:3;30205:14;30190:29;;30152:73;;;;:::o;30231:305::-;;30290:20;30308:1;30290:20;:::i;:::-;30285:25;;30324:20;30342:1;30324:20;:::i;:::-;30319:25;;30478:1;30410:66;30406:74;30403:1;30400:81;30397:2;;;30484:18;;:::i;:::-;30397:2;30528:1;30525;30521:9;30514:16;;30275:261;;;;:::o;30542:185::-;;30599:20;30617:1;30599:20;:::i;:::-;30594:25;;30633:20;30651:1;30633:20;:::i;:::-;30628:25;;30672:1;30662:2;;30677:18;;:::i;:::-;30662:2;30719:1;30716;30712:9;30707:14;;30584:143;;;;:::o;30733:348::-;;30796:20;30814:1;30796:20;:::i;:::-;30791:25;;30830:20;30848:1;30830:20;:::i;:::-;30825:25;;31018:1;30950:66;30946:74;30943:1;30940:81;30935:1;30928:9;30921:17;30917:105;30914:2;;;31025:18;;:::i;:::-;30914:2;31073:1;31070;31066:9;31055:20;;30781:300;;;;:::o;31087:191::-;;31147:20;31165:1;31147:20;:::i;:::-;31142:25;;31181:20;31199:1;31181:20;:::i;:::-;31176:25;;31220:1;31217;31214:8;31211:2;;;31225:18;;:::i;:::-;31211:2;31270:1;31267;31263:9;31255:17;;31132:146;;;;:::o;31284:96::-;;31350:24;31368:5;31350:24;:::i;:::-;31339:35;;31329:51;;;:::o;31386:90::-;;31463:5;31456:13;31449:21;31438:32;;31428:48;;;:::o;31482:126::-;;31559:42;31552:5;31548:54;31537:65;;31527:81;;;:::o;31614:77::-;;31680:5;31669:16;;31659:32;;;:::o;31697:86::-;;31772:4;31765:5;31761:16;31750:27;;31740:43;;;:::o;31789:121::-;;31880:24;31898:5;31880:24;:::i;:::-;31867:37;;31857:53;;;:::o;31916:307::-;31984:1;31994:113;32008:6;32005:1;32002:13;31994:113;;;32093:1;32088:3;32084:11;32078:18;32074:1;32069:3;32065:11;32058:39;32030:2;32027:1;32023:10;32018:15;;31994:113;;;32125:6;32122:1;32119:13;32116:2;;;32205:1;32196:6;32191:3;32187:16;32180:27;32116:2;31965:258;;;;:::o;32229:320::-;;32310:1;32304:4;32300:12;32290:22;;32357:1;32351:4;32347:12;32378:18;32368:2;;32434:4;32426:6;32422:17;32412:27;;32368:2;32496;32488:6;32485:14;32465:18;32462:38;32459:2;;;32515:18;;:::i;:::-;32459:2;32280:269;;;;:::o;32555:233::-;;32617:24;32635:5;32617:24;:::i;:::-;32608:33;;32663:66;32656:5;32653:77;32650:2;;;32733:18;;:::i;:::-;32650:2;32780:1;32773:5;32769:13;32762:20;;32598:190;;;:::o;32794:180::-;32842:77;32839:1;32832:88;32939:4;32936:1;32929:15;32963:4;32960:1;32953:15;32980:180;33028:77;33025:1;33018:88;33125:4;33122:1;33115:15;33149:4;33146:1;33139:15;33166:180;33214:77;33211:1;33204:88;33311:4;33308:1;33301:15;33335:4;33332:1;33325:15;33352:180;33400:77;33397:1;33390:88;33497:4;33494:1;33487:15;33521:4;33518:1;33511:15;33538:102;;33630:2;33626:7;33621:2;33614:5;33610:14;33606:28;33596:38;;33586:54;;;:::o;33646:122::-;33719:24;33737:5;33719:24;:::i;:::-;33712:5;33709:35;33699:2;;33758:1;33755;33748:12;33699:2;33689:79;:::o;33774:116::-;33844:21;33859:5;33844:21;:::i;:::-;33837:5;33834:32;33824:2;;33880:1;33877;33870:12;33824:2;33814:76;:::o;33896:122::-;33969:24;33987:5;33969:24;:::i;:::-;33962:5;33959:35;33949:2;;34008:1;34005;33998:12;33949:2;33939:79;:::o

Swarm Source

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