ETH Price: $3,445.01 (+3.46%)

Token

Riddler Inu (RIDDLER)
 

Overview

Max Total Supply

1,000,000,000,000,000 RIDDLER

Holders

404 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
mortysnodes.eth
Balance
331,908,721,297.905374824756609379 RIDDLER

Value
$0.00
0x4066643f04859fa538ba8eaa906c197c57e4e3e0
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Riddler-Inu is a fully decentralized, community driven, liquidity locked, reward giving, play to earn platform, that is designed specifically for owners so they may earn benefits while the world is at a standstill between good and evil.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RiddlerInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 11: Contract.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";

/*
    <?> Riddler Inu <?>
    Website - https://riddlerinu.com/
    Telegram - https://t.me/RiddlerInu
*/

contract RiddlerInu 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("Riddler Inu", "RIDDLER") {
        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 = 5;
        uint256 liquidityFee = 3;
        
        uint256 totalSupply = 1e15 * 1e18;
        
        maxTransactionAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply * 1 / 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.add(2);
    }
    
    // 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 <= 10, "Must keep fees at 10% 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]] = true;
            }
        }
    }
    
    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 = 8;
                uint256 earlyMarketingFee = 5;
                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;

        payable(feeWallet).transfer(ethForMarketing);
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function forceSwap() external onlyOwner {
        _swapTokensForEth(address(this).balance);
        payable(feeWallet).transfer(address(this).balance);
    }

    function forceSend() external onlyOwner {
        payable(feeWallet).transfer(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 3 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 4 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 5 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 6 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 7 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 8 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 9 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"}]

60806040526001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f526964646c657220496e750000000000000000000000000000000000000000008152506040518060400160405280600781526020017f524944444c45520000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000ada565b5080600490805190602001906200011b92919062000ada565b5050506200013e620001326200059a60201b60201c565b620005a260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016a8160016200066860201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f257600080fd5b505afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d919062000ba1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029057600080fd5b505afa158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb919062000ba1565b6040518363ffffffff1660e01b8152600401620002ea92919062000c54565b602060405180830381600087803b1580156200030557600080fd5b505af11580156200031a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000340919062000ba1565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003b5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066860201b60201c565b620003ea600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200075260201b60201c565b60006005905060006003905060006d314dc6448d9338c15b0a0000000090506103e86005826200041b919062000da5565b62000427919062000d6d565b600c8190555060646001826200043e919062000da5565b6200044a919062000d6d565b600e81905550612710600f8262000462919062000da5565b6200046e919062000d6d565b600d81905550826013819055508160148190555060145460135462000494919062000d10565b601281905550620004aa620007f360201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200050c620004fe620007f360201b60201c565b60016200081d60201b60201c565b6200051f3060016200081d60201b60201c565b6200053461dead60016200081d60201b60201c565b6200055662000548620007f360201b60201c565b60016200066860201b60201c565b620005693060016200066860201b60201c565b6200057e61dead60016200066860201b60201c565b6200059033826200095760201b60201c565b5050505062000f84565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006786200059a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200069e620007f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ee9062000c9e565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200082d6200059a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000853620007f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a39062000c9e565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094b919062000c81565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c19062000cc0565b60405180910390fd5b620009de6000838362000ad060201b60201c565b8060026000828254620009f2919062000d10565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a49919062000d10565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab0919062000ce2565b60405180910390a362000acc6000838362000ad560201b60201c565b5050565b505050565b505050565b82805462000ae89062000e50565b90600052602060002090601f01602090048101928262000b0c576000855562000b58565b82601f1062000b2757805160ff191683800117855562000b58565b8280016001018555821562000b58579182015b8281111562000b5757825182559160200191906001019062000b3a565b5b50905062000b67919062000b6b565b5090565b5b8082111562000b8657600081600090555060010162000b6c565b5090565b60008151905062000b9b8162000f6a565b92915050565b60006020828403121562000bba5762000bb962000f13565b5b600062000bca8482850162000b8a565b91505092915050565b62000bde8162000e06565b82525050565b62000bef8162000e1a565b82525050565b600062000c0460208362000cff565b915062000c118262000f18565b602082019050919050565b600062000c2b601f8362000cff565b915062000c388262000f41565b602082019050919050565b62000c4e8162000e46565b82525050565b600060408201905062000c6b600083018562000bd3565b62000c7a602083018462000bd3565b9392505050565b600060208201905062000c98600083018462000be4565b92915050565b6000602082019050818103600083015262000cb98162000bf5565b9050919050565b6000602082019050818103600083015262000cdb8162000c1c565b9050919050565b600060208201905062000cf9600083018462000c43565b92915050565b600082825260208201905092915050565b600062000d1d8262000e46565b915062000d2a8362000e46565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d625762000d6162000e86565b5b828201905092915050565b600062000d7a8262000e46565b915062000d878362000e46565b92508262000d9a5762000d9962000eb5565b5b828204905092915050565b600062000db28262000e46565b915062000dbf8362000e46565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dfb5762000dfa62000e86565b5b828202905092915050565b600062000e138262000e26565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e6957607f821691505b6020821081141562000e805762000e7f62000ee4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000f758162000e06565b811462000f8157600080fd5b50565b61502e8062000f946000396000f3fe60806040526004361061023f5760003560e01c806375c5df911161012e578063c8125e45116100ab578063df778d261161006f578063df778d2614610892578063e2f45605146108a9578063e884f260146108d4578063f2fde38b146108ff578063f8b45b051461092857610246565b8063c8125e4514610799578063c876d0b9146107c2578063c8c8ebe4146107ed578063d257b34f14610818578063dd62ed3e1461085557610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a9059cbb146106df578063bbc0c7421461071c578063c024666814610747578063c18bc1951461077057610246565b806375c5df91146105e15780638a8c523c1461060c5780638da5cb5b1461062357806395d89b411461064e5780639a7a23d61461067957610246565b8063313ce567116101bc5780636db79437116101805780636db794371461051057806370a0823114610539578063715018a614610576578063751039fc1461058d5780637571336a146105b857610246565b8063313ce5671461041757806339509351146104425780634a62bb651461047f5780634fbee193146104aa57806366718524146104e757610246565b806312b77e8a1161020357806312b77e8a1461034457806313114a9d1461035b57806318160ddd14610386578063203e727e146103b157806323b872dd146103da57610246565b8063056415ca1461024b57806306fdde0314610276578063095ea7b3146102a15780630b559c6f146102de5780630f3a325f1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610953565b60405161026d91906141f5565b60405180910390f35b34801561028257600080fd5b5061028b6109f3565b6040516102989190614210565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613c48565b610a85565b6040516102d591906141f5565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613c88565b610aa8565b005b34801561031357600080fd5b5061032e60048036038101906103299190613b1b565b610c9f565b60405161033b91906141f5565b60405180910390f35b34801561035057600080fd5b50610359610cf5565b005b34801561036757600080fd5b50610370610ddc565b60405161037d91906144d2565b60405180910390f35b34801561039257600080fd5b5061039b610de2565b6040516103a891906144d2565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613cd1565b610dec565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613bb5565b610efb565b60405161040e91906141f5565b60405180910390f35b34801561042357600080fd5b5061042c610f2a565b604051610439919061457e565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613c48565b610f33565b60405161047691906141f5565b60405180910390f35b34801561048b57600080fd5b50610494610fdd565b6040516104a191906141f5565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613b1b565b610ff0565b6040516104de91906141f5565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613b1b565b611046565b005b34801561051c57600080fd5b5061053760048036038101906105329190613cfe565b611182565b005b34801561054557600080fd5b50610560600480360381019061055b9190613b1b565b61126c565b60405161056d91906144d2565b60405180910390f35b34801561058257600080fd5b5061058b6112b4565b005b34801561059957600080fd5b506105a261133c565b6040516105af91906141f5565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613c08565b6113dc565b005b3480156105ed57600080fd5b506105f66114b3565b60405161060391906141f5565b60405180910390f35b34801561061857600080fd5b506106216114c6565b005b34801561062f57600080fd5b50610638611579565b6040516106459190614179565b60405180910390f35b34801561065a57600080fd5b506106636115a3565b6040516106709190614210565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613c08565b611635565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613c48565b611750565b6040516106d691906141f5565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613c48565b61183a565b60405161071391906141f5565b60405180910390f35b34801561072857600080fd5b5061073161185d565b60405161073e91906141f5565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613c08565b611870565b005b34801561077c57600080fd5b5061079760048036038101906107929190613cd1565b611995565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613c88565b611aa4565b005b3480156107ce57600080fd5b506107d7611bb5565b6040516107e491906141f5565b60405180910390f35b3480156107f957600080fd5b50610802611bc8565b60405161080f91906144d2565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613cd1565b611bce565b60405161084c91906141f5565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613b75565b611d23565b60405161088991906144d2565b60405180910390f35b34801561089e57600080fd5b506108a7611daa565b005b3480156108b557600080fd5b506108be611e9a565b6040516108cb91906144d2565b60405180910390f35b3480156108e057600080fd5b506108e9611ea0565b6040516108f691906141f5565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613b1b565b611f40565b005b34801561093457600080fd5b5061093d612038565b60405161094a91906144d2565b60405180910390f35b600061095d61203e565b73ffffffffffffffffffffffffffffffffffffffff1661097b611579565b73ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c8906143f2565b60405180910390fd5b6000600f60026101000a81548160ff0219169083151502179055506001905090565b606060038054610a02906147ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e906147ee565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b600080610a9061203e565b9050610a9d818585612046565b600191505092915050565b610ab061203e565b73ffffffffffffffffffffffffffffffffffffffff16610ace611579565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b906143f2565b60405180910390fd5b60005b8151811015610c9b57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610b7c57610b7b614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c105750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bef57610bee614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610c8857600160086000848481518110610c2e57610c2d614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610c9390614851565b915050610b27565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610cfd61203e565b73ffffffffffffffffffffffffffffffffffffffff16610d1b611579565b73ffffffffffffffffffffffffffffffffffffffff1614610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d68906143f2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dd9573d6000803e3d6000fd5b50565b60125481565b6000600254905090565b610df461203e565b73ffffffffffffffffffffffffffffffffffffffff16610e12611579565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f906143f2565b60405180910390fd5b670de0b6b3a76400006103e86001610e7e610de2565b610e8891906146c6565b610e929190614695565b610e9c9190614695565b811015610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906144b2565b60405180910390fd5b670de0b6b3a764000081610ef291906146c6565b600c8190555050565b600080610f0661203e565b9050610f13858285612211565b610f1e85858561229d565b60019150509392505050565b60006012905090565b600080610f3e61203e565b9050610fd2818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcd919061463f565b612046565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61104e61203e565b73ffffffffffffffffffffffffffffffffffffffff1661106c611579565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906143f2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61118a61203e565b73ffffffffffffffffffffffffffffffffffffffff166111a8611579565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f5906143f2565b60405180910390fd5b816013819055508060148190555060145460135461121c919061463f565b601281905550600a6012541115611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90614252565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bc61203e565b73ffffffffffffffffffffffffffffffffffffffff166112da611579565b73ffffffffffffffffffffffffffffffffffffffff1614611330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611327906143f2565b60405180910390fd5b61133a60006130b7565b565b600061134661203e565b73ffffffffffffffffffffffffffffffffffffffff16611364611579565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906143f2565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b6113e461203e565b73ffffffffffffffffffffffffffffffffffffffff16611402611579565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906143f2565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60029054906101000a900460ff1681565b6114ce61203e565b73ffffffffffffffffffffffffffffffffffffffff166114ec611579565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611539906143f2565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555061157160024261317d90919063ffffffff16565b600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115b2906147ee565b80601f01602080910402602001604051908101604052809291908181526020018280546115de906147ee565b801561162b5780601f106116005761010080835404028352916020019161162b565b820191906000526020600020905b81548152906001019060200180831161160e57829003601f168201915b5050505050905090565b61163d61203e565b73ffffffffffffffffffffffffffffffffffffffff1661165b611579565b73ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906143f2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611739906142f2565b60405180910390fd5b61174c8282613193565b5050565b60008061175b61203e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890614492565b60405180910390fd5b61182e8286868403612046565b60019250505092915050565b60008061184561203e565b905061185281858561229d565b600191505092915050565b600f60019054906101000a900460ff1681565b61187861203e565b73ffffffffffffffffffffffffffffffffffffffff16611896611579565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906143f2565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161198991906141f5565b60405180910390a25050565b61199d61203e565b73ffffffffffffffffffffffffffffffffffffffff166119bb611579565b73ffffffffffffffffffffffffffffffffffffffff1614611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a08906143f2565b60405180910390fd5b670de0b6b3a76400006103e86005611a27610de2565b611a3191906146c6565b611a3b9190614695565b611a459190614695565b811015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e906142d2565b60405180910390fd5b670de0b6b3a764000081611a9b91906146c6565b600e8190555050565b611aac61203e565b73ffffffffffffffffffffffffffffffffffffffff16611aca611579565b73ffffffffffffffffffffffffffffffffffffffff1614611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b17906143f2565b60405180910390fd5b60005b8151811015611bb157600060086000848481518110611b4557611b44614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ba990614851565b915050611b23565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611bd861203e565b73ffffffffffffffffffffffffffffffffffffffff16611bf6611579565b73ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906143f2565b60405180910390fd5b620186a06001611c5a610de2565b611c6491906146c6565b611c6e9190614695565b821015611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca790614372565b60405180910390fd5b6103e86005611cbd610de2565b611cc791906146c6565b611cd19190614695565b821115611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614392565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611db261203e565b73ffffffffffffffffffffffffffffffffffffffff16611dd0611579565b73ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d906143f2565b60405180910390fd5b611e2f47613234565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e97573d6000803e3d6000fd5b50565b600d5481565b6000611eaa61203e565b73ffffffffffffffffffffffffffffffffffffffff16611ec8611579565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f15906143f2565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611f4861203e565b73ffffffffffffffffffffffffffffffffffffffff16611f66611579565b73ffffffffffffffffffffffffffffffffffffffff1614611fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb3906143f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561202c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202390614292565b60405180910390fd5b612035816130b7565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90614452565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d906142b2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161220491906144d2565b60405180910390a3505050565b600061221d8484611d23565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122975781811015612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614312565b60405180910390fd5b6122968484848403612046565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614232565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614432565b60405180910390fd5b60008114156124245761241f83836000613486565b6130b2565b600a544211612486576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612bee576124a3611579565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561251157506124e1611579565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561254a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612584575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561259d5750600960009054906101000a900460ff16155b15612bed57600f60019054906101000a900460ff1661269757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126575750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614272565b60405180910390fd5b5b60006126a28361126c565b1480156126ee57506000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156127385742601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160009054906101000a900460ff161561290457612755611579565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127de5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128385750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129035743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b5906143d2565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a4e57600c548111156129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e8906143b2565b60405180910390fd5b600e546129fd8361126c565b82612a08919061463f565b1115612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614472565b60405180910390fd5b612bec565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af15750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b4057600c54811115612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614352565b60405180910390fd5b612beb565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bea57600e54612b9d8361126c565b82612ba8919061463f565b1115612be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be090614472565b60405180910390fd5b5b5b5b5b5b6000612bf93061126c565b90506000600d548210159050808015612c1f5750600960009054906101000a900460ff16155b8015612c755750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ccb5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d215750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d65576001600960006101000a81548160ff021916908315150217905550612d49613707565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e1b5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e2557600090505b600081156130a257601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e925750600f60029054906101000a900460ff165b8015612ede57506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b8015612f3757504262015180601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f34919061463f565b10155b15612fed576000600890506000600590506000612f5d838361317d90919063ffffffff16565b9050612f856064612f77838b6138d490919063ffffffff16565b6138ea90919063ffffffff16565b9350808385612f9491906146c6565b612f9e9190614695565b60166000828254612faf919061463f565b92505081905550808285612fc391906146c6565b612fcd9190614695565b60156000828254612fde919061463f565b9250508190555050505061307e565b6130156064613007601254886138d490919063ffffffff16565b6138ea90919063ffffffff16565b90506012546014548261302891906146c6565b6130329190614695565b60166000828254613043919061463f565b925050819055506012546013548261305b91906146c6565b6130659190614695565b60156000828254613076919061463f565b925050819055505b600081111561309357613092873083613486565b5b808561309f9190614720565b94505b6130ad878787613486565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361318b919061463f565b905092915050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff81111561325157613250614956565b5b60405190808252806020026020018201604052801561327f5781602001602082028036833780820191505090505b509050308160008151811061329757613296614927565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133719190613b48565b8160018151811061338557613384614927565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133ec30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612046565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134509594939291906144ed565b600060405180830381600087803b15801561346a57600080fd5b505af115801561347e573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ed90614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90614232565b60405180910390fd5b613571838383613900565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ee90614332565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461368a919061463f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136ee91906144d2565b60405180910390a3613701848484613905565b50505050565b60006137123061126c565b90506000601554601654613726919061463f565b905060008214806137375750600081145b156137435750506138d2565b600d5482111561375357600d5491505b60006002826016548561376691906146c6565b6137709190614695565b61377a9190614695565b90506000613791828561390a90919063ffffffff16565b905060004790506137a182613234565b60006137b6824761390a90919063ffffffff16565b905060006137e1866137d3601554856138d490919063ffffffff16565b6138ea90919063ffffffff16565b9050600081836137f19190614720565b905060006016819055506000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561386b573d6000803e3d6000fd5b5060008611801561387c5750600081115b156138c95761388b8682613920565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516138c093929190614547565b60405180910390a15b50505050505050505b565b600081836138e291906146c6565b905092915050565b600081836138f89190614695565b905092915050565b505050565b505050565b600081836139189190614720565b905092915050565b61394d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612046565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613999611579565b426040518863ffffffff1660e01b81526004016139bb96959493929190614194565b6060604051808303818588803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a0d9190613d3e565b5050505050565b6000613a27613a22846145be565b614599565b90508083825260208201905082856020860282011115613a4a57613a4961498a565b5b60005b85811015613a7a5781613a608882613a84565b845260208401935060208301925050600181019050613a4d565b5050509392505050565b600081359050613a9381614fb3565b92915050565b600081519050613aa881614fb3565b92915050565b600082601f830112613ac357613ac2614985565b5b8135613ad3848260208601613a14565b91505092915050565b600081359050613aeb81614fca565b92915050565b600081359050613b0081614fe1565b92915050565b600081519050613b1581614fe1565b92915050565b600060208284031215613b3157613b30614994565b5b6000613b3f84828501613a84565b91505092915050565b600060208284031215613b5e57613b5d614994565b5b6000613b6c84828501613a99565b91505092915050565b60008060408385031215613b8c57613b8b614994565b5b6000613b9a85828601613a84565b9250506020613bab85828601613a84565b9150509250929050565b600080600060608486031215613bce57613bcd614994565b5b6000613bdc86828701613a84565b9350506020613bed86828701613a84565b9250506040613bfe86828701613af1565b9150509250925092565b60008060408385031215613c1f57613c1e614994565b5b6000613c2d85828601613a84565b9250506020613c3e85828601613adc565b9150509250929050565b60008060408385031215613c5f57613c5e614994565b5b6000613c6d85828601613a84565b9250506020613c7e85828601613af1565b9150509250929050565b600060208284031215613c9e57613c9d614994565b5b600082013567ffffffffffffffff811115613cbc57613cbb61498f565b5b613cc884828501613aae565b91505092915050565b600060208284031215613ce757613ce6614994565b5b6000613cf584828501613af1565b91505092915050565b60008060408385031215613d1557613d14614994565b5b6000613d2385828601613af1565b9250506020613d3485828601613af1565b9150509250929050565b600080600060608486031215613d5757613d56614994565b5b6000613d6586828701613b06565b9350506020613d7686828701613b06565b9250506040613d8786828701613b06565b9150509250925092565b6000613d9d8383613da9565b60208301905092915050565b613db281614754565b82525050565b613dc181614754565b82525050565b6000613dd2826145fa565b613ddc818561461d565b9350613de7836145ea565b8060005b83811015613e18578151613dff8882613d91565b9750613e0a83614610565b925050600181019050613deb565b5085935050505092915050565b613e2e81614766565b82525050565b613e3d816147a9565b82525050565b6000613e4e82614605565b613e58818561462e565b9350613e688185602086016147bb565b613e7181614999565b840191505092915050565b6000613e8960238361462e565b9150613e94826149aa565b604082019050919050565b6000613eac601d8361462e565b9150613eb7826149f9565b602082019050919050565b6000613ecf60168361462e565b9150613eda82614a22565b602082019050919050565b6000613ef260268361462e565b9150613efd82614a4b565b604082019050919050565b6000613f1560228361462e565b9150613f2082614a9a565b604082019050919050565b6000613f3860248361462e565b9150613f4382614ae9565b604082019050919050565b6000613f5b60398361462e565b9150613f6682614b38565b604082019050919050565b6000613f7e601d8361462e565b9150613f8982614b87565b602082019050919050565b6000613fa160268361462e565b9150613fac82614bb0565b604082019050919050565b6000613fc460368361462e565b9150613fcf82614bff565b604082019050919050565b6000613fe760358361462e565b9150613ff282614c4e565b604082019050919050565b600061400a60348361462e565b915061401582614c9d565b604082019050919050565b600061402d60358361462e565b915061403882614cec565b604082019050919050565b600061405060498361462e565b915061405b82614d3b565b606082019050919050565b600061407360208361462e565b915061407e82614db0565b602082019050919050565b600061409660258361462e565b91506140a182614dd9565b604082019050919050565b60006140b9604d8361462e565b91506140c482614e28565b606082019050919050565b60006140dc60248361462e565b91506140e782614e9d565b604082019050919050565b60006140ff60138361462e565b915061410a82614eec565b602082019050919050565b600061412260258361462e565b915061412d82614f15565b604082019050919050565b6000614145602f8361462e565b915061415082614f64565b604082019050919050565b61416481614792565b82525050565b6141738161479c565b82525050565b600060208201905061418e6000830184613db8565b92915050565b600060c0820190506141a96000830189613db8565b6141b6602083018861415b565b6141c36040830187613e34565b6141d06060830186613e34565b6141dd6080830185613db8565b6141ea60a083018461415b565b979650505050505050565b600060208201905061420a6000830184613e25565b92915050565b6000602082019050818103600083015261422a8184613e43565b905092915050565b6000602082019050818103600083015261424b81613e7c565b9050919050565b6000602082019050818103600083015261426b81613e9f565b9050919050565b6000602082019050818103600083015261428b81613ec2565b9050919050565b600060208201905081810360008301526142ab81613ee5565b9050919050565b600060208201905081810360008301526142cb81613f08565b9050919050565b600060208201905081810360008301526142eb81613f2b565b9050919050565b6000602082019050818103600083015261430b81613f4e565b9050919050565b6000602082019050818103600083015261432b81613f71565b9050919050565b6000602082019050818103600083015261434b81613f94565b9050919050565b6000602082019050818103600083015261436b81613fb7565b9050919050565b6000602082019050818103600083015261438b81613fda565b9050919050565b600060208201905081810360008301526143ab81613ffd565b9050919050565b600060208201905081810360008301526143cb81614020565b9050919050565b600060208201905081810360008301526143eb81614043565b9050919050565b6000602082019050818103600083015261440b81614066565b9050919050565b6000602082019050818103600083015261442b81614089565b9050919050565b6000602082019050818103600083015261444b816140ac565b9050919050565b6000602082019050818103600083015261446b816140cf565b9050919050565b6000602082019050818103600083015261448b816140f2565b9050919050565b600060208201905081810360008301526144ab81614115565b9050919050565b600060208201905081810360008301526144cb81614138565b9050919050565b60006020820190506144e7600083018461415b565b92915050565b600060a082019050614502600083018861415b565b61450f6020830187613e34565b81810360408301526145218186613dc7565b90506145306060830185613db8565b61453d608083018461415b565b9695505050505050565b600060608201905061455c600083018661415b565b614569602083018561415b565b614576604083018461415b565b949350505050565b6000602082019050614593600083018461416a565b92915050565b60006145a36145b4565b90506145af8282614820565b919050565b6000604051905090565b600067ffffffffffffffff8211156145d9576145d8614956565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061464a82614792565b915061465583614792565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561468a5761468961489a565b5b828201905092915050565b60006146a082614792565b91506146ab83614792565b9250826146bb576146ba6148c9565b5b828204905092915050565b60006146d182614792565b91506146dc83614792565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147155761471461489a565b5b828202905092915050565b600061472b82614792565b915061473683614792565b9250828210156147495761474861489a565b5b828203905092915050565b600061475f82614772565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147b482614792565b9050919050565b60005b838110156147d95780820151818401526020810190506147be565b838111156147e8576000848401525b50505050565b6000600282049050600182168061480657607f821691505b6020821081141561481a576148196148f8565b5b50919050565b61482982614999565b810181811067ffffffffffffffff8211171561484857614847614956565b5b80604052505050565b600061485c82614792565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561488f5761488e61489a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b614fbc81614754565b8114614fc757600080fd5b50565b614fd381614766565b8114614fde57600080fd5b50565b614fea81614792565b8114614ff557600080fd5b5056fea26469706673582212201187c66b39e74fd9b5f5661a10998c54bc8b0f9eda10387e28858e9dc3df7ddb64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806375c5df911161012e578063c8125e45116100ab578063df778d261161006f578063df778d2614610892578063e2f45605146108a9578063e884f260146108d4578063f2fde38b146108ff578063f8b45b051461092857610246565b8063c8125e4514610799578063c876d0b9146107c2578063c8c8ebe4146107ed578063d257b34f14610818578063dd62ed3e1461085557610246565b8063a457c2d7116100f2578063a457c2d7146106a2578063a9059cbb146106df578063bbc0c7421461071c578063c024666814610747578063c18bc1951461077057610246565b806375c5df91146105e15780638a8c523c1461060c5780638da5cb5b1461062357806395d89b411461064e5780639a7a23d61461067957610246565b8063313ce567116101bc5780636db79437116101805780636db794371461051057806370a0823114610539578063715018a614610576578063751039fc1461058d5780637571336a146105b857610246565b8063313ce5671461041757806339509351146104425780634a62bb651461047f5780634fbee193146104aa57806366718524146104e757610246565b806312b77e8a1161020357806312b77e8a1461034457806313114a9d1461035b57806318160ddd14610386578063203e727e146103b157806323b872dd146103da57610246565b8063056415ca1461024b57806306fdde0314610276578063095ea7b3146102a15780630b559c6f146102de5780630f3a325f1461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610953565b60405161026d91906141f5565b60405180910390f35b34801561028257600080fd5b5061028b6109f3565b6040516102989190614210565b60405180910390f35b3480156102ad57600080fd5b506102c860048036038101906102c39190613c48565b610a85565b6040516102d591906141f5565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190613c88565b610aa8565b005b34801561031357600080fd5b5061032e60048036038101906103299190613b1b565b610c9f565b60405161033b91906141f5565b60405180910390f35b34801561035057600080fd5b50610359610cf5565b005b34801561036757600080fd5b50610370610ddc565b60405161037d91906144d2565b60405180910390f35b34801561039257600080fd5b5061039b610de2565b6040516103a891906144d2565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613cd1565b610dec565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613bb5565b610efb565b60405161040e91906141f5565b60405180910390f35b34801561042357600080fd5b5061042c610f2a565b604051610439919061457e565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190613c48565b610f33565b60405161047691906141f5565b60405180910390f35b34801561048b57600080fd5b50610494610fdd565b6040516104a191906141f5565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613b1b565b610ff0565b6040516104de91906141f5565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613b1b565b611046565b005b34801561051c57600080fd5b5061053760048036038101906105329190613cfe565b611182565b005b34801561054557600080fd5b50610560600480360381019061055b9190613b1b565b61126c565b60405161056d91906144d2565b60405180910390f35b34801561058257600080fd5b5061058b6112b4565b005b34801561059957600080fd5b506105a261133c565b6040516105af91906141f5565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190613c08565b6113dc565b005b3480156105ed57600080fd5b506105f66114b3565b60405161060391906141f5565b60405180910390f35b34801561061857600080fd5b506106216114c6565b005b34801561062f57600080fd5b50610638611579565b6040516106459190614179565b60405180910390f35b34801561065a57600080fd5b506106636115a3565b6040516106709190614210565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613c08565b611635565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613c48565b611750565b6040516106d691906141f5565b60405180910390f35b3480156106eb57600080fd5b5061070660048036038101906107019190613c48565b61183a565b60405161071391906141f5565b60405180910390f35b34801561072857600080fd5b5061073161185d565b60405161073e91906141f5565b60405180910390f35b34801561075357600080fd5b5061076e60048036038101906107699190613c08565b611870565b005b34801561077c57600080fd5b5061079760048036038101906107929190613cd1565b611995565b005b3480156107a557600080fd5b506107c060048036038101906107bb9190613c88565b611aa4565b005b3480156107ce57600080fd5b506107d7611bb5565b6040516107e491906141f5565b60405180910390f35b3480156107f957600080fd5b50610802611bc8565b60405161080f91906144d2565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190613cd1565b611bce565b60405161084c91906141f5565b60405180910390f35b34801561086157600080fd5b5061087c60048036038101906108779190613b75565b611d23565b60405161088991906144d2565b60405180910390f35b34801561089e57600080fd5b506108a7611daa565b005b3480156108b557600080fd5b506108be611e9a565b6040516108cb91906144d2565b60405180910390f35b3480156108e057600080fd5b506108e9611ea0565b6040516108f691906141f5565b60405180910390f35b34801561090b57600080fd5b5061092660048036038101906109219190613b1b565b611f40565b005b34801561093457600080fd5b5061093d612038565b60405161094a91906144d2565b60405180910390f35b600061095d61203e565b73ffffffffffffffffffffffffffffffffffffffff1661097b611579565b73ffffffffffffffffffffffffffffffffffffffff16146109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c8906143f2565b60405180910390fd5b6000600f60026101000a81548160ff0219169083151502179055506001905090565b606060038054610a02906147ee565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2e906147ee565b8015610a7b5780601f10610a5057610100808354040283529160200191610a7b565b820191906000526020600020905b815481529060010190602001808311610a5e57829003601f168201915b5050505050905090565b600080610a9061203e565b9050610a9d818585612046565b600191505092915050565b610ab061203e565b73ffffffffffffffffffffffffffffffffffffffff16610ace611579565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b906143f2565b60405180910390fd5b60005b8151811015610c9b57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610b7c57610b7b614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c105750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bef57610bee614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610c8857600160086000848481518110610c2e57610c2d614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610c9390614851565b915050610b27565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610cfd61203e565b73ffffffffffffffffffffffffffffffffffffffff16610d1b611579565b73ffffffffffffffffffffffffffffffffffffffff1614610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d68906143f2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dd9573d6000803e3d6000fd5b50565b60125481565b6000600254905090565b610df461203e565b73ffffffffffffffffffffffffffffffffffffffff16610e12611579565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f906143f2565b60405180910390fd5b670de0b6b3a76400006103e86001610e7e610de2565b610e8891906146c6565b610e929190614695565b610e9c9190614695565b811015610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed5906144b2565b60405180910390fd5b670de0b6b3a764000081610ef291906146c6565b600c8190555050565b600080610f0661203e565b9050610f13858285612211565b610f1e85858561229d565b60019150509392505050565b60006012905090565b600080610f3e61203e565b9050610fd2818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fcd919061463f565b612046565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61104e61203e565b73ffffffffffffffffffffffffffffffffffffffff1661106c611579565b73ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b9906143f2565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61118a61203e565b73ffffffffffffffffffffffffffffffffffffffff166111a8611579565b73ffffffffffffffffffffffffffffffffffffffff16146111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f5906143f2565b60405180910390fd5b816013819055508060148190555060145460135461121c919061463f565b601281905550600a6012541115611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90614252565b60405180910390fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112bc61203e565b73ffffffffffffffffffffffffffffffffffffffff166112da611579565b73ffffffffffffffffffffffffffffffffffffffff1614611330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611327906143f2565b60405180910390fd5b61133a60006130b7565b565b600061134661203e565b73ffffffffffffffffffffffffffffffffffffffff16611364611579565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b1906143f2565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b6113e461203e565b73ffffffffffffffffffffffffffffffffffffffff16611402611579565b73ffffffffffffffffffffffffffffffffffffffff1614611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f906143f2565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f60029054906101000a900460ff1681565b6114ce61203e565b73ffffffffffffffffffffffffffffffffffffffff166114ec611579565b73ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611539906143f2565b60405180910390fd5b6001600f60016101000a81548160ff02191690831515021790555061157160024261317d90919063ffffffff16565b600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115b2906147ee565b80601f01602080910402602001604051908101604052809291908181526020018280546115de906147ee565b801561162b5780601f106116005761010080835404028352916020019161162b565b820191906000526020600020905b81548152906001019060200180831161160e57829003601f168201915b5050505050905090565b61163d61203e565b73ffffffffffffffffffffffffffffffffffffffff1661165b611579565b73ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a8906143f2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611742576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611739906142f2565b60405180910390fd5b61174c8282613193565b5050565b60008061175b61203e565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890614492565b60405180910390fd5b61182e8286868403612046565b60019250505092915050565b60008061184561203e565b905061185281858561229d565b600191505092915050565b600f60019054906101000a900460ff1681565b61187861203e565b73ffffffffffffffffffffffffffffffffffffffff16611896611579565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906143f2565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161198991906141f5565b60405180910390a25050565b61199d61203e565b73ffffffffffffffffffffffffffffffffffffffff166119bb611579565b73ffffffffffffffffffffffffffffffffffffffff1614611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a08906143f2565b60405180910390fd5b670de0b6b3a76400006103e86005611a27610de2565b611a3191906146c6565b611a3b9190614695565b611a459190614695565b811015611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e906142d2565b60405180910390fd5b670de0b6b3a764000081611a9b91906146c6565b600e8190555050565b611aac61203e565b73ffffffffffffffffffffffffffffffffffffffff16611aca611579565b73ffffffffffffffffffffffffffffffffffffffff1614611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b17906143f2565b60405180910390fd5b60005b8151811015611bb157600060086000848481518110611b4557611b44614927565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611ba990614851565b915050611b23565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611bd861203e565b73ffffffffffffffffffffffffffffffffffffffff16611bf6611579565b73ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906143f2565b60405180910390fd5b620186a06001611c5a610de2565b611c6491906146c6565b611c6e9190614695565b821015611cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca790614372565b60405180910390fd5b6103e86005611cbd610de2565b611cc791906146c6565b611cd19190614695565b821115611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90614392565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611db261203e565b73ffffffffffffffffffffffffffffffffffffffff16611dd0611579565b73ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d906143f2565b60405180910390fd5b611e2f47613234565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e97573d6000803e3d6000fd5b50565b600d5481565b6000611eaa61203e565b73ffffffffffffffffffffffffffffffffffffffff16611ec8611579565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f15906143f2565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611f4861203e565b73ffffffffffffffffffffffffffffffffffffffff16611f66611579565b73ffffffffffffffffffffffffffffffffffffffff1614611fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb3906143f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561202c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202390614292565b60405180910390fd5b612035816130b7565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ad90614452565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d906142b2565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161220491906144d2565b60405180910390a3505050565b600061221d8484611d23565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122975781811015612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090614312565b60405180910390fd5b6122968484848403612046565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614232565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190614432565b60405180910390fd5b60008114156124245761241f83836000613486565b6130b2565b600a544211612486576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612bee576124a3611579565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561251157506124e1611579565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561254a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612584575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561259d5750600960009054906101000a900460ff16155b15612bed57600f60019054906101000a900460ff1661269757601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126575750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614272565b60405180910390fd5b5b60006126a28361126c565b1480156126ee57506000601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156127385742601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160009054906101000a900460ff161561290457612755611579565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127de5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128385750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129035743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b5906143d2565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a4e57600c548111156129f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e8906143b2565b60405180910390fd5b600e546129fd8361126c565b82612a08919061463f565b1115612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090614472565b60405180910390fd5b612bec565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af15750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b4057600c54811115612b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3290614352565b60405180910390fd5b612beb565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bea57600e54612b9d8361126c565b82612ba8919061463f565b1115612be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be090614472565b60405180910390fd5b5b5b5b5b5b6000612bf93061126c565b90506000600d548210159050808015612c1f5750600960009054906101000a900460ff16155b8015612c755750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ccb5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d215750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d65576001600960006101000a81548160ff021916908315150217905550612d49613707565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e1b5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e2557600090505b600081156130a257601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e925750600f60029054906101000a900460ff165b8015612ede57506000601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b8015612f3757504262015180601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f34919061463f565b10155b15612fed576000600890506000600590506000612f5d838361317d90919063ffffffff16565b9050612f856064612f77838b6138d490919063ffffffff16565b6138ea90919063ffffffff16565b9350808385612f9491906146c6565b612f9e9190614695565b60166000828254612faf919061463f565b92505081905550808285612fc391906146c6565b612fcd9190614695565b60156000828254612fde919061463f565b9250508190555050505061307e565b6130156064613007601254886138d490919063ffffffff16565b6138ea90919063ffffffff16565b90506012546014548261302891906146c6565b6130329190614695565b60166000828254613043919061463f565b925050819055506012546013548261305b91906146c6565b6130659190614695565b60156000828254613076919061463f565b925050819055505b600081111561309357613092873083613486565b5b808561309f9190614720565b94505b6130ad878787613486565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361318b919061463f565b905092915050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff81111561325157613250614956565b5b60405190808252806020026020018201604052801561327f5781602001602082028036833780820191505090505b509050308160008151811061329757613296614927565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133719190613b48565b8160018151811061338557613384614927565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133ec30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612046565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134509594939291906144ed565b600060405180830381600087803b15801561346a57600080fd5b505af115801561347e573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ed90614412565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355d90614232565b60405180910390fd5b613571838383613900565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156135f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ee90614332565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461368a919061463f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136ee91906144d2565b60405180910390a3613701848484613905565b50505050565b60006137123061126c565b90506000601554601654613726919061463f565b905060008214806137375750600081145b156137435750506138d2565b600d5482111561375357600d5491505b60006002826016548561376691906146c6565b6137709190614695565b61377a9190614695565b90506000613791828561390a90919063ffffffff16565b905060004790506137a182613234565b60006137b6824761390a90919063ffffffff16565b905060006137e1866137d3601554856138d490919063ffffffff16565b6138ea90919063ffffffff16565b9050600081836137f19190614720565b905060006016819055506000601581905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561386b573d6000803e3d6000fd5b5060008611801561387c5750600081115b156138c95761388b8682613920565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516138c093929190614547565b60405180910390a15b50505050505050505b565b600081836138e291906146c6565b905092915050565b600081836138f89190614695565b905092915050565b505050565b505050565b600081836139189190614720565b905092915050565b61394d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612046565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613999611579565b426040518863ffffffff1660e01b81526004016139bb96959493929190614194565b6060604051808303818588803b1580156139d457600080fd5b505af11580156139e8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a0d9190613d3e565b5050505050565b6000613a27613a22846145be565b614599565b90508083825260208201905082856020860282011115613a4a57613a4961498a565b5b60005b85811015613a7a5781613a608882613a84565b845260208401935060208301925050600181019050613a4d565b5050509392505050565b600081359050613a9381614fb3565b92915050565b600081519050613aa881614fb3565b92915050565b600082601f830112613ac357613ac2614985565b5b8135613ad3848260208601613a14565b91505092915050565b600081359050613aeb81614fca565b92915050565b600081359050613b0081614fe1565b92915050565b600081519050613b1581614fe1565b92915050565b600060208284031215613b3157613b30614994565b5b6000613b3f84828501613a84565b91505092915050565b600060208284031215613b5e57613b5d614994565b5b6000613b6c84828501613a99565b91505092915050565b60008060408385031215613b8c57613b8b614994565b5b6000613b9a85828601613a84565b9250506020613bab85828601613a84565b9150509250929050565b600080600060608486031215613bce57613bcd614994565b5b6000613bdc86828701613a84565b9350506020613bed86828701613a84565b9250506040613bfe86828701613af1565b9150509250925092565b60008060408385031215613c1f57613c1e614994565b5b6000613c2d85828601613a84565b9250506020613c3e85828601613adc565b9150509250929050565b60008060408385031215613c5f57613c5e614994565b5b6000613c6d85828601613a84565b9250506020613c7e85828601613af1565b9150509250929050565b600060208284031215613c9e57613c9d614994565b5b600082013567ffffffffffffffff811115613cbc57613cbb61498f565b5b613cc884828501613aae565b91505092915050565b600060208284031215613ce757613ce6614994565b5b6000613cf584828501613af1565b91505092915050565b60008060408385031215613d1557613d14614994565b5b6000613d2385828601613af1565b9250506020613d3485828601613af1565b9150509250929050565b600080600060608486031215613d5757613d56614994565b5b6000613d6586828701613b06565b9350506020613d7686828701613b06565b9250506040613d8786828701613b06565b9150509250925092565b6000613d9d8383613da9565b60208301905092915050565b613db281614754565b82525050565b613dc181614754565b82525050565b6000613dd2826145fa565b613ddc818561461d565b9350613de7836145ea565b8060005b83811015613e18578151613dff8882613d91565b9750613e0a83614610565b925050600181019050613deb565b5085935050505092915050565b613e2e81614766565b82525050565b613e3d816147a9565b82525050565b6000613e4e82614605565b613e58818561462e565b9350613e688185602086016147bb565b613e7181614999565b840191505092915050565b6000613e8960238361462e565b9150613e94826149aa565b604082019050919050565b6000613eac601d8361462e565b9150613eb7826149f9565b602082019050919050565b6000613ecf60168361462e565b9150613eda82614a22565b602082019050919050565b6000613ef260268361462e565b9150613efd82614a4b565b604082019050919050565b6000613f1560228361462e565b9150613f2082614a9a565b604082019050919050565b6000613f3860248361462e565b9150613f4382614ae9565b604082019050919050565b6000613f5b60398361462e565b9150613f6682614b38565b604082019050919050565b6000613f7e601d8361462e565b9150613f8982614b87565b602082019050919050565b6000613fa160268361462e565b9150613fac82614bb0565b604082019050919050565b6000613fc460368361462e565b9150613fcf82614bff565b604082019050919050565b6000613fe760358361462e565b9150613ff282614c4e565b604082019050919050565b600061400a60348361462e565b915061401582614c9d565b604082019050919050565b600061402d60358361462e565b915061403882614cec565b604082019050919050565b600061405060498361462e565b915061405b82614d3b565b606082019050919050565b600061407360208361462e565b915061407e82614db0565b602082019050919050565b600061409660258361462e565b91506140a182614dd9565b604082019050919050565b60006140b9604d8361462e565b91506140c482614e28565b606082019050919050565b60006140dc60248361462e565b91506140e782614e9d565b604082019050919050565b60006140ff60138361462e565b915061410a82614eec565b602082019050919050565b600061412260258361462e565b915061412d82614f15565b604082019050919050565b6000614145602f8361462e565b915061415082614f64565b604082019050919050565b61416481614792565b82525050565b6141738161479c565b82525050565b600060208201905061418e6000830184613db8565b92915050565b600060c0820190506141a96000830189613db8565b6141b6602083018861415b565b6141c36040830187613e34565b6141d06060830186613e34565b6141dd6080830185613db8565b6141ea60a083018461415b565b979650505050505050565b600060208201905061420a6000830184613e25565b92915050565b6000602082019050818103600083015261422a8184613e43565b905092915050565b6000602082019050818103600083015261424b81613e7c565b9050919050565b6000602082019050818103600083015261426b81613e9f565b9050919050565b6000602082019050818103600083015261428b81613ec2565b9050919050565b600060208201905081810360008301526142ab81613ee5565b9050919050565b600060208201905081810360008301526142cb81613f08565b9050919050565b600060208201905081810360008301526142eb81613f2b565b9050919050565b6000602082019050818103600083015261430b81613f4e565b9050919050565b6000602082019050818103600083015261432b81613f71565b9050919050565b6000602082019050818103600083015261434b81613f94565b9050919050565b6000602082019050818103600083015261436b81613fb7565b9050919050565b6000602082019050818103600083015261438b81613fda565b9050919050565b600060208201905081810360008301526143ab81613ffd565b9050919050565b600060208201905081810360008301526143cb81614020565b9050919050565b600060208201905081810360008301526143eb81614043565b9050919050565b6000602082019050818103600083015261440b81614066565b9050919050565b6000602082019050818103600083015261442b81614089565b9050919050565b6000602082019050818103600083015261444b816140ac565b9050919050565b6000602082019050818103600083015261446b816140cf565b9050919050565b6000602082019050818103600083015261448b816140f2565b9050919050565b600060208201905081810360008301526144ab81614115565b9050919050565b600060208201905081810360008301526144cb81614138565b9050919050565b60006020820190506144e7600083018461415b565b92915050565b600060a082019050614502600083018861415b565b61450f6020830187613e34565b81810360408301526145218186613dc7565b90506145306060830185613db8565b61453d608083018461415b565b9695505050505050565b600060608201905061455c600083018661415b565b614569602083018561415b565b614576604083018461415b565b949350505050565b6000602082019050614593600083018461416a565b92915050565b60006145a36145b4565b90506145af8282614820565b919050565b6000604051905090565b600067ffffffffffffffff8211156145d9576145d8614956565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061464a82614792565b915061465583614792565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561468a5761468961489a565b5b828201905092915050565b60006146a082614792565b91506146ab83614792565b9250826146bb576146ba6148c9565b5b828204905092915050565b60006146d182614792565b91506146dc83614792565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147155761471461489a565b5b828202905092915050565b600061472b82614792565b915061473683614792565b9250828210156147495761474861489a565b5b828203905092915050565b600061475f82614772565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147b482614792565b9050919050565b60005b838110156147d95780820151818401526020810190506147be565b838111156147e8576000848401525b50505050565b6000600282049050600182168061480657607f821691505b6020821081141561481a576148196148f8565b5b50919050565b61482982614999565b810181811067ffffffffffffffff8211171561484857614847614956565b5b80604052505050565b600061485c82614792565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561488f5761488e61489a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b614fbc81614754565b8114614fc757600080fd5b50565b614fd381614766565b8114614fde57600080fd5b50565b614fea81614792565b8114614ff557600080fd5b5056fea26469706673582212201187c66b39e74fd9b5f5661a10998c54bc8b0f9eda10387e28858e9dc3df7ddb64736f6c63430008070033

Deployed Bytecode Sourcemap

357:14533:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4251:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2135:98:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4412:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6907:321:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7455:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14741:109;;;;;;;;;;;;;:::i;:::-;;1158:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3223:106:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5047:232:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5171:286:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3072:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5852:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;805:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6770:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6605:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5666:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3387:125:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:9;;;;;;;;;;;;;:::i;:::-;;4088:121:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5510:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;885:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3902:130;;;;;;;;;;;;;:::i;:::-;;1029:85:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2346:102:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6153:244:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6575:429:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3708:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;845:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5963:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5287:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7240:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1110:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;682:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4653:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3955:149:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14573:160:1;;;;;;;;;;;;;:::i;:::-;;724:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4443:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;764:24:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4251:127;4308:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4343:5:1::1;4325:15;;:23;;;;;;;;;;;;;;;;;;4366:4;4359:11;;4251:127:::0;:::o;2135:98:2:-;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;4412:197::-;4495:4;4511:13;4527:12;:10;:12::i;:::-;4511:28;;4549:32;4558:5;4565:7;4574:6;4549:8;:32::i;:::-;4598:4;4591:11;;;4412:197;;;;:::o;6907:321:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6995:6:1::1;6990:231;7011:12;:19;7007:1;:23;6990:231;;;7075:13;;;;;;;;;;;7056:32;;:12;7069:1;7056:15;;;;;;;;:::i;:::-;;;;;;;;:32;;;;:79;;;;;7119:15;;;;;;;;;;;7092:43;;:12;7105:1;7092:15;;;;;;;;:::i;:::-;;;;;;;;:43;;;;7056:79;7052:158;;;7190:4;7156:14;:31;7171:12;7184:1;7171:15;;;;;;;;:::i;:::-;;;;;;;;7156:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;7052:158;7032:3;;;;;:::i;:::-;;;;6990:231;;;;6907:321:::0;:::o;7455:105::-;7508:4;7532:14;:20;7547:4;7532:20;;;;;;;;;;;;;;;;;;;;;;;;;7525:27;;7455:105;;;:::o;14741:109::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14800:9:1::1;;;;;;;;;;;14792:27;;:50;14820:21;14792:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14741:109::o:0;1158:24::-;;;;:::o;3223:106:2:-;3284:7;3310:12;;3303:19;;3223:106;:::o;5047:232:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5168:4:1::1;5160;5156:1;5140:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5139:33;;;;:::i;:::-;5129:6;:43;;5121:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5267:4;5258:6;:13;;;;:::i;:::-;5235:20;:36;;;;5047:232:::0;:::o;5171:286:2:-;5298:4;5314:15;5332:12;:10;:12::i;:::-;5314:30;;5354:38;5370:4;5376:7;5385:6;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;5446:4;5439:11;;;5171:286;;;;;:::o;3072:91::-;3130:5;3154:2;3147:9;;3072:91;:::o;5852:236::-;5940:4;5956:13;5972:12;:10;:12::i;:::-;5956:28;;5994:66;6003:5;6010:7;6049:10;6019:11;:18;6031:5;6019:18;;;;;;;;;;;;;;;:27;6038:7;6019:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;5994:8;:66::i;:::-;6077:4;6070:11;;;5852:236;;;;:::o;805:33:1:-;;;;;;;;;;;;;:::o;6770:125::-;6835:4;6859:19;:28;6879:7;6859:28;;;;;;;;;;;;;;;;;;;;;;;;;6852:35;;6770:125;;;:::o;6605:157::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6712:9:1::1;;;;;;;;;;;6684:38;;6701:9;6684:38;;;;;;;;;;;;6745:9;6733;;:21;;;;;;;;;;;;;;;;;;6605:157:::0;:::o;5666:289::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5776:12:1::1;5760:13;:28;;;;5815:12;5799:13;:28;;;;5866:13;;5850;;:29;;;;:::i;:::-;5838:9;:41;;;;5911:2;5898:9;;:15;;5890:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;5666:289:::0;;:::o;3387:125:2:-;3461:7;3487:9;:18;3497:7;3487:18;;;;;;;;;;;;;;;;3480:25;;3387:125;;;:::o;1661:101:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;4088:121:1:-;4140:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4174:5:1::1;4157:14;;:22;;;;;;;;;;;;;;;;;;4197:4;4190:11;;4088:121:::0;:::o;5510:144::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5642:4:1::1;5600:31;:39;5632:6;5600:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;5510:144:::0;;:::o;885:34::-;;;;;;;;;;;;;:::o;3902:130::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3973:4:1::1;3957:13;;:20;;;;;;;;;;;;;;;;;;4002:22;4022:1;4002:15;:19;;:22;;;;:::i;:::-;3988:11;:36;;;;3902:130::o:0;1029:85:9:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2346:102:2:-;2402:13;2434:7;2427:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2346:102;:::o;6153:244:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:13:1::1;;;;;;;;;;;6252:21;;:4;:21;;;;6244:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;6348:41;6377:4;6383:5;6348:28;:41::i;:::-;6153:244:::0;;:::o;6575:429:2:-;6668:4;6684:13;6700:12;:10;:12::i;:::-;6684:28;;6722:24;6749:11;:18;6761:5;6749:18;;;;;;;;;;;;;;;:27;6768:7;6749:27;;;;;;;;;;;;;;;;6722:54;;6814:15;6794:16;:35;;6786:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6905:60;6914:5;6921:7;6949:15;6930:16;:34;6905:8;:60::i;:::-;6993:4;6986:11;;;;6575:429;;;;:::o;3708:189::-;3787:4;3803:13;3819:12;:10;:12::i;:::-;3803:28;;3841;3851:5;3858:2;3862:6;3841:9;:28::i;:::-;3886:4;3879:11;;;3708:189;;;;:::o;845:33:1:-;;;;;;;;;;;;;:::o;5963:182::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6079:8:1::1;6048:19;:28;6068:7;6048:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6119:7;6103:34;;;6128:8;6103:34;;;;;;:::i;:::-;;;;;;;;5963:182:::0;;:::o;5287:211::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5409:4:1::1;5403;5399:1;5383:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5382:31;;;;:::i;:::-;5372:6;:41;;5364:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;5486:4;5477:6;:13;;;;:::i;:::-;5465:9;:25;;;;5287:211:::0;:::o;7240:203::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7328:6:1::1;7323:113;7344:12;:19;7340:1;:23;7323:113;;;7419:5;7385:14;:31;7400:12;7413:1;7400:15;;;;;;;;:::i;:::-;;;;;;;;7385:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;7365:3;;;;;:::i;:::-;;;;7323:113;;;;7240:203:::0;:::o;1110:39::-;;;;;;;;;;;;;:::o;682:35::-;;;;:::o;4653:382::-;4734:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4791:6:1::1;4787:1;4771:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;4758:9;:39;;4750:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;4906:4;4902:1;4886:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;4873:9;:37;;4865:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;4998:9;4977:18;:30;;;;5024:4;5017:11;;4653:382:::0;;;:::o;3955:149:2:-;4044:7;4070:11;:18;4082:5;4070:18;;;;;;;;;;;;;;;:27;4089:7;4070:27;;;;;;;;;;;;;;;;4063:34;;3955:149;;;;:::o;14573:160:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14624:40:1::1;14642:21;14624:17;:40::i;:::-;14683:9;;;;;;;;;;;14675:27;;:50;14703:21;14675:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14573:160::o:0;724:33::-;;;;:::o;4443:135::-;4503:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4543:5:1::1;4520:20;;:28;;;;;;;;;;;;;;;;;;4566:4;4559:11;;4443:135:::0;:::o;1911:198:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;764:24:1:-;;;;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;10102:370:2:-;10250:1;10233:19;;:5;:19;;;;10225:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10330:1;10311:21;;:7;:21;;;;10303:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10412:6;10382:11;:18;10394:5;10382:18;;;;;;;;;;;;;;;:27;10401:7;10382:27;;;;;;;;;;;;;;;:36;;;;10449:7;10433:32;;10442:5;10433:32;;;10458:6;10433:32;;;;;;:::i;:::-;;;;;;;;10102:370;;;:::o;10749:441::-;10879:24;10906:25;10916:5;10923:7;10906:9;:25::i;:::-;10879:52;;10965:17;10945:16;:37;10941:243;;11026:6;11006:16;:26;;10998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11108:51;11117:5;11124:7;11152:6;11133:16;:25;11108:8;:51::i;:::-;10941:243;10869:321;10749:441;;;:::o;7568:4519:1:-;7716:1;7700:18;;:4;:18;;;;7692:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7793:1;7779:16;;:2;:16;;;;7771:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7855:14;:20;7870:4;7855:20;;;;;;;;;;;;;;;;;;;;;;;;;7854:21;7846:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7993:1;7983:6;:11;7979:93;;;8011:28;8027:4;8033:2;8037:1;8011:15;:28::i;:::-;8054:7;;7979:93;8107:11;;8088:15;:30;8084:61;;8141:4;8120:14;:18;8135:2;8120:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;8084:61;8170:14;;;;;;;;;;;8166:2057;;;8231:7;:5;:7::i;:::-;8223:15;;:4;:15;;;;:49;;;;;8265:7;:5;:7::i;:::-;8259:13;;:2;:13;;;;8223:49;:86;;;;;8307:1;8293:16;;:2;:16;;;;8223:86;:128;;;;;8344:6;8330:21;;:2;:21;;;;8223:128;:159;;;;;8373:9;;;;;;;;;;;8372:10;8223:159;8201:2011;;;8422:13;;;;;;;;;;;8417:150;;8468:19;:25;8488:4;8468:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;8497:19;:23;8517:2;8497:23;;;;;;;;;;;;;;;;;;;;;;;;;8468:52;8460:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;8417:150;8657:1;8640:13;8650:2;8640:9;:13::i;:::-;:18;:55;;;;;8694:1;8662:24;:28;8687:2;8662:28;;;;;;;;;;;;;;;;:33;8640:55;8636:150;;;8751:15;8720:24;:28;8745:2;8720:28;;;;;;;;;;;;;;;:46;;;;8636:150;8944:20;;;;;;;;;;;8940:423;;;8998:7;:5;:7::i;:::-;8992:13;;:2;:13;;;;:47;;;;;9023:15;;;;;;;;;;;9009:30;;:2;:30;;;;8992:47;:79;;;;;9057:13;;;;;;;;;;;9043:28;;:2;:28;;;;8992:79;8988:356;;;9149:12;9107:28;:39;9136:9;9107:39;;;;;;;;;;;;;;;;:54;9099:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;9308:12;9266:28;:39;9295:9;9266:39;;;;;;;;;;;;;;;:54;;;;8988:356;8940:423;9433:25;:31;9459:4;9433:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;9469:31;:35;9501:2;9469:35;;;;;;;;;;;;;;;;;;;;;;;;;9468:36;9433:71;9429:768;;;9547:20;;9537:6;:30;;9529:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;9682:9;;9665:13;9675:2;9665:9;:13::i;:::-;9656:6;:22;;;;:::i;:::-;:35;;9648:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9429:768;;;9810:25;:29;9836:2;9810:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;9844:31;:37;9876:4;9844:37;;;;;;;;;;;;;;;;;;;;;;;;;9843:38;9810:71;9806:391;;;9924:20;;9914:6;:30;;9906:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;9806:391;;;10051:31;:35;10083:2;10051:35;;;;;;;;;;;;;;;;;;;;;;;;;10046:151;;10144:9;;10127:13;10137:2;10127:9;:13::i;:::-;10118:6;:22;;;;:::i;:::-;:35;;10110:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10046:151;9806:391;9429:768;8201:2011;8166:2057;10237:28;10268:24;10286:4;10268:9;:24::i;:::-;10237:55;;10303:12;10342:18;;10318:20;:42;;10303:57;;10389:7;:34;;;;;10414:9;;;;;;;;;;;10413:10;10389:34;:83;;;;;10441:25;:31;10467:4;10441:31;;;;;;;;;;;;;;;;;;;;;;;;;10440:32;10389:83;:126;;;;;10490:19;:25;10510:4;10490:25;;;;;;;;;;;;;;;;;;;;;;;;;10489:26;10389:126;:167;;;;;10533:19;:23;10553:2;10533:23;;;;;;;;;;;;;;;;;;;;;;;;;10532:24;10389:167;10371:297;;;10595:4;10583:9;;:16;;;;;;;;;;;;;;;;;;10614:10;:8;:10::i;:::-;10651:5;10639:9;;:17;;;;;;;;;;;;;;;;;;10371:297;10680:12;10696:9;;;;;;;;;;;10695:10;10680:25;;10807:19;:25;10827:4;10807:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;10836:19;:23;10856:2;10836:23;;;;;;;;;;;;;;;;;;;;;;;;;10807:52;10803:100;;;10886:5;10876:15;;10803:100;10915:12;10946:7;10942:1092;;;10992:25;:29;11018:2;10992:29;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;;11043:15;;;;;;;;;;;10992:66;:122;;;;;11113:1;11079:24;:30;11104:4;11079:30;;;;;;;;;;;;;;;;:35;;10992:122;:208;;;;;11184:15;11171:8;11137:24;:30;11162:4;11137:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;10992:208;10970:897;;;11235:25;11263:1;11235:29;;11283:25;11311:1;11283:29;;11331:22;11356:40;11378:17;11356;:21;;:40;;;;:::i;:::-;11331:65;;11424:35;11455:3;11424:26;11435:14;11424:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;11417:42;;11528:14;11508:17;11501:4;:24;;;;:::i;:::-;:41;;;;:::i;:::-;11478:19;;:64;;;;;;;:::i;:::-;;;;;;;;11611:14;11591:17;11584:4;:24;;;;:::i;:::-;:41;;;;:::i;:::-;11561:19;;:64;;;;;;;:::i;:::-;;;;;;;;11216:425;;;10970:897;;;11673:30;11699:3;11673:21;11684:9;;11673:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;11666:37;;11768:9;;11752:13;;11745:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;11722:19;;:55;;;;;;;:::i;:::-;;;;;;;;11842:9;;11826:13;;11819:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;11796:19;;:55;;;;;;;:::i;:::-;;;;;;;;10970:897;11906:1;11899:4;:8;11895:91;;;11928:42;11944:4;11958;11965;11928:15;:42::i;:::-;11895:91;12018:4;12008:14;;;;;:::i;:::-;;;10942:1092;12046:33;12062:4;12068:2;12072:6;12046:15;:33::i;:::-;7681:4406;;;;7568:4519;;;;:::o;2263:187:9:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;2741:96:10:-;2799:7;2829:1;2825;:5;;;;:::i;:::-;2818:12;;2741:96;;;;:::o;6405:188:1:-;6522:5;6488:25;:31;6514:4;6488:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;6579:5;6545:40;;6573:4;6545:40;;;;;;;;;;;;6405:188;;:::o;12095:590::-;12222:21;12260:1;12246:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12222:40;;12291:4;12273;12278:1;12273:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;12317:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12307:4;12312:1;12307:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;12352:62;12369:4;12384:15;;;;;;;;;;;12402:11;12352:8;:62::i;:::-;12453:15;;;;;;;;;;;:66;;;12534:11;12560:1;12604:4;12631;12651:15;12453:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12151:534;12095:590;:::o;7467:651:2:-;7609:1;7593:18;;:4;:18;;;;7585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7685:1;7671:16;;:2;:16;;;;7663:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7738:38;7759:4;7765:2;7769:6;7738:20;:38::i;:::-;7787:19;7809:9;:15;7819:4;7809:15;;;;;;;;;;;;;;;;7787:37;;7857:6;7842:11;:21;;7834:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7972:6;7958:11;:20;7940:9;:15;7950:4;7940:15;;;;;;;;;;;;;;;:38;;;;8015:6;7998:9;:13;8008:2;7998:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8052:2;8037:26;;8046:4;8037:26;;;8056:6;8037:26;;;;;;:::i;:::-;;;;;;;;8074:37;8094:4;8100:2;8104:6;8074:19;:37::i;:::-;7575:543;7467:651;;;:::o;13219:1346:1:-;13258:23;13284:24;13302:4;13284:9;:24::i;:::-;13258:50;;13319:25;13369:19;;13347;;:41;;;;:::i;:::-;13319:69;;13432:1;13413:15;:20;:46;;;;13458:1;13437:17;:22;13413:46;13409:59;;;13461:7;;;;13409:59;13500:18;;13482:15;:36;13478:103;;;13551:18;;13533:36;;13478:103;13650:23;13736:1;13716:17;13694:19;;13676:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;13650:87;;13748:26;13777:36;13797:15;13777;:19;;:36;;;;:::i;:::-;13748:65;;13834:25;13862:21;13834:49;;13896:37;13914:18;13896:17;:37::i;:::-;13955:18;13976:44;14002:17;13976:21;:25;;:44;;;;:::i;:::-;13955:65;;14031:23;14057:58;14097:17;14057:35;14072:19;;14057:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;14031:84;;14126:23;14165:15;14152:10;:28;;;;:::i;:::-;14126:54;;14223:1;14201:19;:23;;;;14257:1;14235:19;:23;;;;14279:9;;;;;;;;;;;14271:27;;:44;14299:15;14271:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14366:1;14348:15;:19;:42;;;;;14389:1;14371:15;:19;14348:42;14344:214;;;14407:47;14421:15;14438;14407:13;:47::i;:::-;14474:72;14489:18;14509:15;14526:19;;14474:72;;;;;;;;:::i;:::-;;;;;;;;14344:214;13247:1318;;;;;;;;13219:1346;:::o;3451:96:10:-;3509:7;3539:1;3535;:5;;;;:::i;:::-;3528:12;;3451:96;;;;:::o;3836:::-;3894:7;3924:1;3920;:5;;;;:::i;:::-;3913:12;;3836:96;;;;:::o;11774:121:2:-;;;;:::o;12483:120::-;;;;:::o;3108:96:10:-;3166:7;3196:1;3192;:5;;;;:::i;:::-;3185:12;;3108:96;;;;:::o;12697:514:1:-;12846:62;12863:4;12878:15;;;;;;;;;;;12896:11;12846:8;:62::i;:::-;12951:15;;;;;;;;;;;:31;;;12990:9;13023:4;13043:11;13069:1;13112;13155:7;:5;:7::i;:::-;13177:15;12951:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12697:514;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:133::-;1482:5;1520:6;1507:20;1498:29;;1536:30;1560:5;1536:30;:::i;:::-;1439:133;;;;:::o;1578:139::-;1624:5;1662:6;1649:20;1640:29;;1678:33;1705:5;1678:33;:::i;:::-;1578:139;;;;:::o;1723:143::-;1780:5;1811:6;1805:13;1796:22;;1827:33;1854:5;1827:33;:::i;:::-;1723:143;;;;:::o;1872:329::-;1931:6;1980:2;1968:9;1959:7;1955:23;1951:32;1948:119;;;1986:79;;:::i;:::-;1948:119;2106:1;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2077:117;1872:329;;;;:::o;2207:351::-;2277:6;2326:2;2314:9;2305:7;2301:23;2297:32;2294:119;;;2332:79;;:::i;:::-;2294:119;2452:1;2477:64;2533:7;2524:6;2513:9;2509:22;2477:64;:::i;:::-;2467:74;;2423:128;2207:351;;;;:::o;2564:474::-;2632:6;2640;2689:2;2677:9;2668:7;2664:23;2660:32;2657:119;;;2695:79;;:::i;:::-;2657:119;2815:1;2840:53;2885:7;2876:6;2865:9;2861:22;2840:53;:::i;:::-;2830:63;;2786:117;2942:2;2968:53;3013:7;3004:6;2993:9;2989:22;2968:53;:::i;:::-;2958:63;;2913:118;2564:474;;;;;:::o;3044:619::-;3121:6;3129;3137;3186:2;3174:9;3165:7;3161:23;3157:32;3154:119;;;3192:79;;:::i;:::-;3154:119;3312:1;3337:53;3382:7;3373:6;3362:9;3358:22;3337:53;:::i;:::-;3327:63;;3283:117;3439:2;3465:53;3510:7;3501:6;3490:9;3486:22;3465:53;:::i;:::-;3455:63;;3410:118;3567:2;3593:53;3638:7;3629:6;3618:9;3614:22;3593:53;:::i;:::-;3583:63;;3538:118;3044:619;;;;;:::o;3669:468::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:50;4112:7;4103:6;4092:9;4088:22;4070:50;:::i;:::-;4060:60;;4015:115;3669:468;;;;;:::o;4143:474::-;4211:6;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4143:474;;;;;:::o;4623:539::-;4707:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:119;;;4762:79;;:::i;:::-;4724:119;4910:1;4899:9;4895:17;4882:31;4940:18;4932:6;4929:30;4926:117;;;4962:79;;:::i;:::-;4926:117;5067:78;5137:7;5128:6;5117:9;5113:22;5067:78;:::i;:::-;5057:88;;4853:302;4623:539;;;;:::o;5168:329::-;5227:6;5276:2;5264:9;5255:7;5251:23;5247:32;5244:119;;;5282:79;;:::i;:::-;5244:119;5402:1;5427:53;5472:7;5463:6;5452:9;5448:22;5427:53;:::i;:::-;5417:63;;5373:117;5168:329;;;;:::o;5503:474::-;5571:6;5579;5628:2;5616:9;5607:7;5603:23;5599:32;5596:119;;;5634:79;;:::i;:::-;5596:119;5754:1;5779:53;5824:7;5815:6;5804:9;5800:22;5779:53;:::i;:::-;5769:63;;5725:117;5881:2;5907:53;5952:7;5943:6;5932:9;5928:22;5907:53;:::i;:::-;5897:63;;5852:118;5503:474;;;;;:::o;5983:663::-;6071:6;6079;6087;6136:2;6124:9;6115:7;6111:23;6107:32;6104:119;;;6142:79;;:::i;:::-;6104:119;6262:1;6287:64;6343:7;6334:6;6323:9;6319:22;6287:64;:::i;:::-;6277:74;;6233:128;6400:2;6426:64;6482:7;6473:6;6462:9;6458:22;6426:64;:::i;:::-;6416:74;;6371:129;6539:2;6565:64;6621:7;6612:6;6601:9;6597:22;6565:64;:::i;:::-;6555:74;;6510:129;5983:663;;;;;:::o;6652:179::-;6721:10;6742:46;6784:3;6776:6;6742:46;:::i;:::-;6820:4;6815:3;6811:14;6797:28;;6652:179;;;;:::o;6837:108::-;6914:24;6932:5;6914:24;:::i;:::-;6909:3;6902:37;6837:108;;:::o;6951:118::-;7038:24;7056:5;7038:24;:::i;:::-;7033:3;7026:37;6951:118;;:::o;7105:732::-;7224:3;7253:54;7301:5;7253:54;:::i;:::-;7323:86;7402:6;7397:3;7323:86;:::i;:::-;7316:93;;7433:56;7483:5;7433:56;:::i;:::-;7512:7;7543:1;7528:284;7553:6;7550:1;7547:13;7528:284;;;7629:6;7623:13;7656:63;7715:3;7700:13;7656:63;:::i;:::-;7649:70;;7742:60;7795:6;7742:60;:::i;:::-;7732:70;;7588:224;7575:1;7572;7568:9;7563:14;;7528:284;;;7532:14;7828:3;7821:10;;7229:608;;;7105:732;;;;:::o;7843:109::-;7924:21;7939:5;7924:21;:::i;:::-;7919:3;7912:34;7843:109;;:::o;7958:147::-;8053:45;8092:5;8053:45;:::i;:::-;8048:3;8041:58;7958:147;;:::o;8111:364::-;8199:3;8227:39;8260:5;8227:39;:::i;:::-;8282:71;8346:6;8341:3;8282:71;:::i;:::-;8275:78;;8362:52;8407:6;8402:3;8395:4;8388:5;8384:16;8362:52;:::i;:::-;8439:29;8461:6;8439:29;:::i;:::-;8434:3;8430:39;8423:46;;8203:272;8111:364;;;;:::o;8481:366::-;8623:3;8644:67;8708:2;8703:3;8644:67;:::i;:::-;8637:74;;8720:93;8809:3;8720:93;:::i;:::-;8838:2;8833:3;8829:12;8822:19;;8481:366;;;:::o;8853:::-;8995:3;9016:67;9080:2;9075:3;9016:67;:::i;:::-;9009:74;;9092:93;9181:3;9092:93;:::i;:::-;9210:2;9205:3;9201:12;9194:19;;8853:366;;;:::o;9225:::-;9367:3;9388:67;9452:2;9447:3;9388:67;:::i;:::-;9381:74;;9464:93;9553:3;9464:93;:::i;:::-;9582:2;9577:3;9573:12;9566:19;;9225:366;;;:::o;9597:::-;9739:3;9760:67;9824:2;9819:3;9760:67;:::i;:::-;9753:74;;9836:93;9925:3;9836:93;:::i;:::-;9954:2;9949:3;9945:12;9938:19;;9597:366;;;:::o;9969:::-;10111:3;10132:67;10196:2;10191:3;10132:67;:::i;:::-;10125:74;;10208:93;10297:3;10208:93;:::i;:::-;10326:2;10321:3;10317:12;10310:19;;9969:366;;;:::o;10341:::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:::-;10855:3;10876:67;10940:2;10935:3;10876:67;:::i;:::-;10869:74;;10952:93;11041:3;10952:93;:::i;:::-;11070:2;11065:3;11061:12;11054:19;;10713:366;;;:::o;11085:::-;11227:3;11248:67;11312:2;11307:3;11248:67;:::i;:::-;11241:74;;11324:93;11413:3;11324:93;:::i;:::-;11442:2;11437:3;11433:12;11426:19;;11085:366;;;:::o;11457:::-;11599:3;11620:67;11684:2;11679:3;11620:67;:::i;:::-;11613:74;;11696:93;11785:3;11696:93;:::i;:::-;11814:2;11809:3;11805:12;11798:19;;11457:366;;;:::o;11829:::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:118::-;16380:24;16398:5;16380:24;:::i;:::-;16375:3;16368:37;16293:118;;:::o;16417:112::-;16500:22;16516:5;16500:22;:::i;:::-;16495:3;16488:35;16417:112;;:::o;16535:222::-;16628:4;16666:2;16655:9;16651:18;16643:26;;16679:71;16747:1;16736:9;16732:17;16723:6;16679:71;:::i;:::-;16535:222;;;;:::o;16763:807::-;17012:4;17050:3;17039:9;17035:19;17027:27;;17064:71;17132:1;17121:9;17117:17;17108:6;17064:71;:::i;:::-;17145:72;17213:2;17202:9;17198:18;17189:6;17145:72;:::i;:::-;17227:80;17303:2;17292:9;17288:18;17279:6;17227:80;:::i;:::-;17317;17393:2;17382:9;17378:18;17369:6;17317:80;:::i;:::-;17407:73;17475:3;17464:9;17460:19;17451:6;17407:73;:::i;:::-;17490;17558:3;17547:9;17543:19;17534:6;17490:73;:::i;:::-;16763:807;;;;;;;;;:::o;17576:210::-;17663:4;17701:2;17690:9;17686:18;17678:26;;17714:65;17776:1;17765:9;17761:17;17752:6;17714:65;:::i;:::-;17576:210;;;;:::o;17792:313::-;17905:4;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:78;18093:4;18084:6;18020:78;:::i;:::-;18012:86;;17792:313;;;;:::o;18111:419::-;18277:4;18315:2;18304:9;18300:18;18292:26;;18364:9;18358:4;18354:20;18350:1;18339:9;18335:17;18328:47;18392:131;18518:4;18392:131;:::i;:::-;18384:139;;18111:419;;;:::o;18536:::-;18702:4;18740:2;18729:9;18725:18;18717:26;;18789:9;18783:4;18779:20;18775:1;18764:9;18760:17;18753:47;18817:131;18943:4;18817:131;:::i;:::-;18809:139;;18536:419;;;:::o;18961:::-;19127:4;19165:2;19154:9;19150:18;19142:26;;19214:9;19208:4;19204:20;19200:1;19189:9;19185:17;19178:47;19242:131;19368:4;19242:131;:::i;:::-;19234:139;;18961:419;;;:::o;19386:::-;19552:4;19590:2;19579:9;19575:18;19567:26;;19639:9;19633:4;19629:20;19625:1;19614:9;19610:17;19603:47;19667:131;19793:4;19667:131;:::i;:::-;19659:139;;19386:419;;;:::o;19811:::-;19977:4;20015:2;20004:9;20000:18;19992:26;;20064:9;20058:4;20054:20;20050:1;20039:9;20035:17;20028:47;20092:131;20218:4;20092:131;:::i;:::-;20084:139;;19811:419;;;:::o;20236:::-;20402:4;20440:2;20429:9;20425:18;20417:26;;20489:9;20483:4;20479:20;20475:1;20464:9;20460:17;20453:47;20517:131;20643:4;20517:131;:::i;:::-;20509:139;;20236:419;;;:::o;20661:::-;20827:4;20865:2;20854:9;20850:18;20842:26;;20914:9;20908:4;20904:20;20900:1;20889:9;20885:17;20878:47;20942:131;21068:4;20942:131;:::i;:::-;20934:139;;20661:419;;;:::o;21086:::-;21252:4;21290:2;21279:9;21275:18;21267:26;;21339:9;21333:4;21329:20;21325:1;21314:9;21310:17;21303:47;21367:131;21493:4;21367:131;:::i;:::-;21359:139;;21086:419;;;:::o;21511:::-;21677:4;21715:2;21704:9;21700:18;21692:26;;21764:9;21758:4;21754:20;21750:1;21739:9;21735:17;21728:47;21792:131;21918:4;21792:131;:::i;:::-;21784:139;;21511:419;;;:::o;21936:::-;22102:4;22140:2;22129:9;22125:18;22117:26;;22189:9;22183:4;22179:20;22175:1;22164:9;22160:17;22153:47;22217:131;22343:4;22217:131;:::i;:::-;22209:139;;21936:419;;;:::o;22361:::-;22527:4;22565:2;22554:9;22550:18;22542:26;;22614:9;22608:4;22604:20;22600:1;22589:9;22585:17;22578:47;22642:131;22768:4;22642:131;:::i;:::-;22634:139;;22361:419;;;:::o;22786:::-;22952:4;22990:2;22979:9;22975:18;22967:26;;23039:9;23033:4;23029:20;23025:1;23014:9;23010:17;23003:47;23067:131;23193:4;23067:131;:::i;:::-;23059:139;;22786:419;;;:::o;23211:::-;23377:4;23415:2;23404:9;23400:18;23392:26;;23464:9;23458:4;23454:20;23450:1;23439:9;23435:17;23428:47;23492:131;23618:4;23492:131;:::i;:::-;23484:139;;23211:419;;;:::o;23636:::-;23802:4;23840:2;23829:9;23825:18;23817:26;;23889:9;23883:4;23879:20;23875:1;23864:9;23860:17;23853:47;23917:131;24043:4;23917:131;:::i;:::-;23909:139;;23636:419;;;:::o;24061:::-;24227:4;24265:2;24254:9;24250:18;24242:26;;24314:9;24308:4;24304:20;24300:1;24289:9;24285:17;24278:47;24342:131;24468:4;24342:131;:::i;:::-;24334:139;;24061:419;;;:::o;24486:::-;24652:4;24690:2;24679:9;24675:18;24667:26;;24739:9;24733:4;24729:20;24725:1;24714:9;24710:17;24703:47;24767:131;24893:4;24767:131;:::i;:::-;24759:139;;24486:419;;;:::o;24911:::-;25077:4;25115:2;25104:9;25100:18;25092:26;;25164:9;25158:4;25154:20;25150:1;25139:9;25135:17;25128:47;25192:131;25318:4;25192:131;:::i;:::-;25184:139;;24911:419;;;:::o;25336:::-;25502:4;25540:2;25529:9;25525:18;25517:26;;25589:9;25583:4;25579:20;25575:1;25564:9;25560:17;25553:47;25617:131;25743:4;25617:131;:::i;:::-;25609:139;;25336:419;;;:::o;25761:::-;25927:4;25965:2;25954:9;25950:18;25942:26;;26014:9;26008:4;26004:20;26000:1;25989:9;25985:17;25978:47;26042:131;26168:4;26042:131;:::i;:::-;26034:139;;25761:419;;;:::o;26186:::-;26352:4;26390:2;26379:9;26375:18;26367:26;;26439:9;26433:4;26429:20;26425:1;26414:9;26410:17;26403:47;26467:131;26593:4;26467:131;:::i;:::-;26459:139;;26186:419;;;:::o;26611:::-;26777:4;26815:2;26804:9;26800:18;26792:26;;26864:9;26858:4;26854:20;26850:1;26839:9;26835:17;26828:47;26892:131;27018:4;26892:131;:::i;:::-;26884:139;;26611:419;;;:::o;27036:222::-;27129:4;27167:2;27156:9;27152:18;27144:26;;27180:71;27248:1;27237:9;27233:17;27224:6;27180:71;:::i;:::-;27036:222;;;;:::o;27264:831::-;27527:4;27565:3;27554:9;27550:19;27542:27;;27579:71;27647:1;27636:9;27632:17;27623:6;27579:71;:::i;:::-;27660:80;27736:2;27725:9;27721:18;27712:6;27660:80;:::i;:::-;27787:9;27781:4;27777:20;27772:2;27761:9;27757:18;27750:48;27815:108;27918:4;27909:6;27815:108;:::i;:::-;27807:116;;27933:72;28001:2;27990:9;27986:18;27977:6;27933:72;:::i;:::-;28015:73;28083:3;28072:9;28068:19;28059:6;28015:73;:::i;:::-;27264:831;;;;;;;;:::o;28101:442::-;28250:4;28288:2;28277:9;28273:18;28265:26;;28301:71;28369:1;28358:9;28354:17;28345:6;28301:71;:::i;:::-;28382:72;28450:2;28439:9;28435:18;28426:6;28382:72;:::i;:::-;28464;28532:2;28521:9;28517:18;28508:6;28464:72;:::i;:::-;28101:442;;;;;;:::o;28549:214::-;28638:4;28676:2;28665:9;28661:18;28653:26;;28689:67;28753:1;28742:9;28738:17;28729:6;28689:67;:::i;:::-;28549:214;;;;:::o;28769:129::-;28803:6;28830:20;;:::i;:::-;28820:30;;28859:33;28887:4;28879:6;28859:33;:::i;:::-;28769:129;;;:::o;28904:75::-;28937:6;28970:2;28964:9;28954:19;;28904:75;:::o;28985:311::-;29062:4;29152:18;29144:6;29141:30;29138:56;;;29174:18;;:::i;:::-;29138:56;29224:4;29216:6;29212:17;29204:25;;29284:4;29278;29274:15;29266:23;;28985:311;;;:::o;29302:132::-;29369:4;29392:3;29384:11;;29422:4;29417:3;29413:14;29405:22;;29302:132;;;:::o;29440:114::-;29507:6;29541:5;29535:12;29525:22;;29440:114;;;:::o;29560:99::-;29612:6;29646:5;29640:12;29630:22;;29560:99;;;:::o;29665:113::-;29735:4;29767;29762:3;29758:14;29750:22;;29665:113;;;:::o;29784:184::-;29883:11;29917:6;29912:3;29905:19;29957:4;29952:3;29948:14;29933:29;;29784:184;;;;:::o;29974:169::-;30058:11;30092:6;30087:3;30080:19;30132:4;30127:3;30123:14;30108:29;;29974:169;;;;:::o;30149:305::-;30189:3;30208:20;30226:1;30208:20;:::i;:::-;30203:25;;30242:20;30260:1;30242:20;:::i;:::-;30237:25;;30396:1;30328:66;30324:74;30321:1;30318:81;30315:107;;;30402:18;;:::i;:::-;30315:107;30446:1;30443;30439:9;30432:16;;30149:305;;;;:::o;30460:185::-;30500:1;30517:20;30535:1;30517:20;:::i;:::-;30512:25;;30551:20;30569:1;30551:20;:::i;:::-;30546:25;;30590:1;30580:35;;30595:18;;:::i;:::-;30580:35;30637:1;30634;30630:9;30625:14;;30460:185;;;;:::o;30651:348::-;30691:7;30714:20;30732:1;30714:20;:::i;:::-;30709:25;;30748:20;30766:1;30748:20;:::i;:::-;30743:25;;30936:1;30868:66;30864:74;30861:1;30858:81;30853:1;30846:9;30839:17;30835:105;30832:131;;;30943:18;;:::i;:::-;30832:131;30991:1;30988;30984:9;30973:20;;30651:348;;;;:::o;31005:191::-;31045:4;31065:20;31083:1;31065:20;:::i;:::-;31060:25;;31099:20;31117:1;31099:20;:::i;:::-;31094:25;;31138:1;31135;31132:8;31129:34;;;31143:18;;:::i;:::-;31129:34;31188:1;31185;31181:9;31173:17;;31005:191;;;;:::o;31202:96::-;31239:7;31268:24;31286:5;31268:24;:::i;:::-;31257:35;;31202:96;;;:::o;31304:90::-;31338:7;31381:5;31374:13;31367:21;31356:32;;31304:90;;;:::o;31400:126::-;31437:7;31477:42;31470:5;31466:54;31455:65;;31400:126;;;:::o;31532:77::-;31569:7;31598:5;31587:16;;31532:77;;;:::o;31615:86::-;31650:7;31690:4;31683:5;31679:16;31668:27;;31615:86;;;:::o;31707:121::-;31765:9;31798:24;31816:5;31798:24;:::i;:::-;31785:37;;31707:121;;;:::o;31834:307::-;31902:1;31912:113;31926:6;31923:1;31920:13;31912:113;;;32011:1;32006:3;32002:11;31996:18;31992:1;31987:3;31983:11;31976:39;31948:2;31945:1;31941:10;31936:15;;31912:113;;;32043:6;32040:1;32037:13;32034:101;;;32123:1;32114:6;32109:3;32105:16;32098:27;32034:101;31883:258;31834:307;;;:::o;32147:320::-;32191:6;32228:1;32222:4;32218:12;32208:22;;32275:1;32269:4;32265:12;32296:18;32286:81;;32352:4;32344:6;32340:17;32330:27;;32286:81;32414:2;32406:6;32403:14;32383:18;32380:38;32377:84;;;32433:18;;:::i;:::-;32377:84;32198:269;32147:320;;;:::o;32473:281::-;32556:27;32578:4;32556:27;:::i;:::-;32548:6;32544:40;32686:6;32674:10;32671:22;32650:18;32638:10;32635:34;32632:62;32629:88;;;32697:18;;:::i;:::-;32629:88;32737:10;32733:2;32726:22;32516:238;32473:281;;:::o;32760:233::-;32799:3;32822:24;32840:5;32822:24;:::i;:::-;32813:33;;32868:66;32861:5;32858:77;32855:103;;;32938:18;;:::i;:::-;32855:103;32985:1;32978:5;32974:13;32967:20;;32760:233;;;:::o;32999:180::-;33047:77;33044:1;33037:88;33144:4;33141:1;33134:15;33168:4;33165:1;33158:15;33185:180;33233:77;33230:1;33223:88;33330:4;33327:1;33320:15;33354:4;33351:1;33344:15;33371:180;33419:77;33416:1;33409:88;33516:4;33513:1;33506:15;33540:4;33537:1;33530:15;33557:180;33605:77;33602:1;33595:88;33702:4;33699:1;33692:15;33726:4;33723:1;33716:15;33743:180;33791:77;33788:1;33781:88;33888:4;33885:1;33878:15;33912:4;33909:1;33902:15;33929:117;34038:1;34035;34028:12;34052:117;34161:1;34158;34151:12;34175:117;34284:1;34281;34274:12;34298:117;34407:1;34404;34397:12;34421:102;34462:6;34513:2;34509:7;34504:2;34497:5;34493:14;34489:28;34479:38;;34421:102;;;:::o;34529:222::-;34669:34;34665:1;34657:6;34653:14;34646:58;34738:5;34733:2;34725:6;34721:15;34714:30;34529:222;:::o;34757:179::-;34897:31;34893:1;34885:6;34881:14;34874:55;34757:179;:::o;34942:172::-;35082:24;35078:1;35070:6;35066:14;35059:48;34942:172;:::o;35120:225::-;35260:34;35256:1;35248:6;35244:14;35237:58;35329:8;35324:2;35316:6;35312:15;35305:33;35120:225;:::o;35351:221::-;35491:34;35487:1;35479:6;35475:14;35468:58;35560:4;35555:2;35547:6;35543:15;35536:29;35351:221;:::o;35578:223::-;35718:34;35714:1;35706:6;35702:14;35695:58;35787:6;35782:2;35774:6;35770:15;35763:31;35578:223;:::o;35807:244::-;35947:34;35943:1;35935:6;35931:14;35924:58;36016:27;36011:2;36003:6;35999:15;35992:52;35807:244;:::o;36057:179::-;36197:31;36193:1;36185:6;36181:14;36174:55;36057:179;:::o;36242:225::-;36382:34;36378:1;36370:6;36366:14;36359:58;36451:8;36446:2;36438:6;36434:15;36427:33;36242:225;:::o;36473:241::-;36613:34;36609:1;36601:6;36597:14;36590:58;36682:24;36677:2;36669:6;36665:15;36658:49;36473:241;:::o;36720:240::-;36860:34;36856:1;36848:6;36844:14;36837:58;36929:23;36924:2;36916:6;36912:15;36905:48;36720:240;:::o;36966:239::-;37106:34;37102:1;37094:6;37090:14;37083:58;37175:22;37170:2;37162:6;37158:15;37151:47;36966:239;:::o;37211:240::-;37351:34;37347:1;37339:6;37335:14;37328:58;37420:23;37415:2;37407:6;37403:15;37396:48;37211:240;:::o;37457:297::-;37597:34;37593:1;37585:6;37581:14;37574:58;37666:34;37661:2;37653:6;37649:15;37642:59;37735:11;37730:2;37722:6;37718:15;37711:36;37457:297;:::o;37760:182::-;37900:34;37896:1;37888:6;37884:14;37877:58;37760:182;:::o;37948:224::-;38088:34;38084:1;38076:6;38072:14;38065:58;38157:7;38152:2;38144:6;38140:15;38133:32;37948:224;:::o;38178:301::-;38318:34;38314:1;38306:6;38302:14;38295:58;38387:34;38382:2;38374:6;38370:15;38363:59;38456:15;38451:2;38443:6;38439:15;38432:40;38178:301;:::o;38485:223::-;38625:34;38621:1;38613:6;38609:14;38602:58;38694:6;38689:2;38681:6;38677:15;38670:31;38485:223;:::o;38714:169::-;38854:21;38850:1;38842:6;38838:14;38831:45;38714:169;:::o;38889:224::-;39029:34;39025:1;39017:6;39013:14;39006:58;39098:7;39093:2;39085:6;39081:15;39074:32;38889:224;:::o;39119:234::-;39259:34;39255:1;39247:6;39243:14;39236:58;39328:17;39323:2;39315:6;39311:15;39304:42;39119:234;:::o;39359:122::-;39432:24;39450:5;39432:24;:::i;:::-;39425:5;39422:35;39412:63;;39471:1;39468;39461:12;39412:63;39359:122;:::o;39487:116::-;39557:21;39572:5;39557:21;:::i;:::-;39550:5;39547:32;39537:60;;39593:1;39590;39583:12;39537:60;39487:116;:::o;39609:122::-;39682:24;39700:5;39682:24;:::i;:::-;39675:5;39672:35;39662:63;;39721:1;39718;39711:12;39662:63;39609:122;:::o

Swarm Source

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