ETH Price: $2,285.52 (-5.15%)

Token

Kermit (KERMIT)
 

Overview

Max Total Supply

420,690,000,000,000 KERMIT

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 KERMIT

Value
$0.00
0xfbdd9453aa91b46070db4aeba3ebd6d7143fbaf0
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Kermit

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
 * SPDX-License-Identifier: MIT
 * https://kermiteth.vip
 * https://t.me/KermitCoinOnEth
 * https://twitter.com/KermitCoinOnEth
*/

pragma solidity 0.8.19;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the upd allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 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 {}
}

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

interface IDexFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

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

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

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

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

contract Kermit is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private _taxOnBuys = 25;
    uint256 private _taxOnSells = 25;
    uint256 private _preventSwapBefore = 1;
    uint256 private _buyCount = 0;

    uint256 private _txAmountLimit;
    uint256 private _walletAmountLimit;
    uint256 private _swapbackMin;
    uint256 private _swapbackMax;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private launchmode = true;
    mapping(address => bool) private _canTx;

    event MaxTxAmountUpdated(uint _txAmountLimit);
    event MaxWalletAmountUpdated(uint _walletAmountLimit);
    event FeesUpdated(uint _taxOnBuys, uint _taxOnSells);
    event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax);
    event FeeReceiverUpdated(address _taxWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20("Kermit", "KERMIT") {
        uint256 _totalSupply = 420_690_000_000_000 * 10 ** 9;

        _txAmountLimit = (_totalSupply * 15) / 1000;
        _walletAmountLimit = (_totalSupply * 15) / 1000;
        _swapbackMin = (_totalSupply * 5) / 10000;
        _swapbackMax = (_totalSupply * 200) / 10000;

        _taxWallet = payable(0xCECBD357D3EFAF7F6f65119A700ab732B5a93793);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }

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

    receive() external payable {}

    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;

        emit TradingOpened();
    }

    function setwallet(address payable taxWallet1) external onlyOwner {
        _taxWallet = taxWallet1;

        emit FeeReceiverUpdated(taxWallet1);
    }

    function setTxlim(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max tx cant be lower than 0.1%");
        _txAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxTxAmountUpdated(_txAmountLimit);
    }

    function seetWalletlim(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max wallet cant be lower than 0.1%");
        _walletAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxWalletAmountUpdated(_walletAmountLimit);
    }

    function setSwapb(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000;
        _swapbackMax = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

    function changeMode() external onlyOwner {
        require(launchmode, "Launch mode is already disabled");
        _taxOnBuys = 25;
        _taxOnSells = 25;
        launchmode = false;
    }

    function removeLimits() external onlyOwner {
        _txAmountLimit = totalSupply();
        _walletAmountLimit = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxWalletAmountUpdated(totalSupply());
    }

    function setFees(uint256 buyTax, uint256 sellTax) external onlyOwner {
        require(buyTax <= 99, "Invalid buy tax value");
        require(sellTax <= 99, "Invalid sell tax value");
        _taxOnBuys = buyTax;
        _taxOnSells = sellTax;
        emit FeesUpdated(buyTax, sellTax);
    }

    function recovereth() external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        _taxWallet.transfer(address(this).balance);
    }

    function setmany(address[] calldata cute, bool status)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < cute.length; i++) {
            _canTx[cute[i]] = status;
        }
    }

    function exemptFromFee(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
        emit ExcludedFromFee(account, status);
    }

    function viewInfo()
        external
        view
        returns (
            uint256 buyFee,
            uint256 sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            _taxOnBuys,
            _taxOnSells,
            _txAmountLimit,
            _walletAmountLimit,
            _swapbackMin,
            _swapbackMax
        );
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && !inSwap) {
            if (launchmode){
                require(_canTx[from] || _canTx[to], "");
            }

            taxAmount = amount.mul(_taxOnBuys).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit.");
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(_taxOnSells).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _swapbackMin &&
                _buyCount > _preventSwapBefore &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance, _swapbackMax));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee();
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function triggerSwap() external {
        require(
            msg.sender == _taxWallet || msg.sender == owner(),
            "Only fee receiver can trigger"
        );
        uint256 contractTokenBalance = balanceOf(address(this));

        swapTokensForEth(contractTokenBalance);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee();
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee() private {
        bool success;
        (success, ) = address(_taxWallet).call{value: address(this).balance}(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_taxOnBuys","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_taxOnSells","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","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"},{"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":"changeMode","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recovereth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"seetWalletlim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTxlim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"cute","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setmany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"taxWallet1","type":"address"}],"name":"setwallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526019600a556019600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055506001601360176101000a81548160ff0219169083151502179055503480156200007657600080fd5b506040518060400160405280600681526020017f4b65726d697400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4b45524d495400000000000000000000000000000000000000000000000000008152508160039081620000f4919062000872565b50806004908162000106919062000872565b505050620001296200011d6200037e60201b60201c565b6200038660201b60201c565b6000695915a68d88da6a08000090506103e8600f826200014a919062000988565b62000156919062000a02565b600e819055506103e8600f826200016e919062000988565b6200017a919062000a02565b600f8190555061271060058262000192919062000988565b6200019e919062000a02565b60108190555061271060c882620001b6919062000988565b620001c2919062000a02565b60118190555073cecbd357d3efaf7f6f65119a700ab732b5a93793600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620002336200044c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003776200036a6200037e60201b60201c565b826200047660201b60201c565b5062000b26565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004df9062000a9b565b60405180910390fd5b620004fc60008383620005ee60201b60201c565b806002600082825462000510919062000abd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000567919062000abd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005ce919062000b09565b60405180910390a3620005ea60008383620005f360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067a57607f821691505b60208210810362000690576200068f62000632565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006bb565b620007068683620006bb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007536200074d62000747846200071e565b62000728565b6200071e565b9050919050565b6000819050919050565b6200076f8362000732565b620007876200077e826200075a565b848454620006c8565b825550505050565b600090565b6200079e6200078f565b620007ab81848462000764565b505050565b5b81811015620007d357620007c760008262000794565b600181019050620007b1565b5050565b601f8211156200082257620007ec8162000696565b620007f784620006ab565b8101602085101562000807578190505b6200081f6200081685620006ab565b830182620007b0565b50505b505050565b600082821c905092915050565b6000620008476000198460080262000827565b1980831691505092915050565b600062000862838362000834565b9150826002028217905092915050565b6200087d82620005f8565b67ffffffffffffffff81111562000899576200089862000603565b5b620008a5825462000661565b620008b2828285620007d7565b600060209050601f831160018114620008ea5760008415620008d5578287015190505b620008e1858262000854565b86555062000951565b601f198416620008fa8662000696565b60005b828110156200092457848901518255600182019150602085019450602081019050620008fd565b8683101562000944578489015162000940601f89168262000834565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000995826200071e565b9150620009a2836200071e565b9250828202620009b2816200071e565b91508282048414831517620009cc57620009cb62000959565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a0f826200071e565b915062000a1c836200071e565b92508262000a2f5762000a2e620009d3565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a83601f8362000a3a565b915062000a908262000a4b565b602082019050919050565b6000602082019050818103600083015262000ab68162000a74565b9050919050565b600062000aca826200071e565b915062000ad7836200071e565b925082820190508082111562000af25762000af162000959565b5b92915050565b62000b03816200071e565b82525050565b600060208201905062000b20600083018462000af8565b92915050565b6144a18062000b366000396000f3fe6080604052600436106101a05760003560e01c806370a08231116100ec57806395d89b411161008a578063ae60148011610064578063ae60148014610583578063c9567bf9146105b3578063dd62ed3e146105ca578063f2fde38b14610607576101a7565b806395d89b41146104de578063a457c2d714610509578063a9059cbb14610546576101a7565b80638b638426116100c65780638b6384261461045c5780638da5cb5b146104735780638e0903331461049e5780638f937cc4146104c7576101a7565b806370a08231146103f1578063715018a61461042e578063751039fc14610445576101a7565b806318160ddd11610159578063313ce56711610133578063313ce5671461033757806332ad809614610362578063395093511461038b5780635f6e36e2146103c8576101a7565b806318160ddd146102a65780631d3d5a53146102d157806323b872dd146102fa576101a7565b806303d948f8146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630b76d5451461022b5780630b78f9c0146102545780630d53b4751461027d576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b005b3480156101cf57600080fd5b506101d8610728565b6040516101e59190612f7a565b60405180910390f35b3480156101fa57600080fd5b506102156004803603810190610210919061303a565b6107ba565b6040516102229190613095565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190613141565b6107d8565b005b34801561026057600080fd5b5061027b600480360381019061027691906131a1565b6108f9565b005b34801561028957600080fd5b506102a4600480360381019061029f91906131a1565b610a48565b005b3480156102b257600080fd5b506102bb610b4d565b6040516102c891906131f0565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f3919061320b565b610b57565b005b34801561030657600080fd5b50610321600480360381019061031c9190613238565b610c79565b60405161032e9190613095565b60405180910390f35b34801561034357600080fd5b5061034c610d71565b60405161035991906132a7565b60405180910390f35b34801561036e57600080fd5b506103896004803603810190610384919061320b565b610d7a565b005b34801561039757600080fd5b506103b260048036038101906103ad919061303a565b610e9c565b6040516103bf9190613095565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613300565b610f48565b005b3480156103fd57600080fd5b506104186004803603810190610413919061332d565b61103f565b60405161042591906131f0565b60405180910390f35b34801561043a57600080fd5b50610443611087565b005b34801561045157600080fd5b5061045a61110f565b005b34801561046857600080fd5b50610471611225565b005b34801561047f57600080fd5b50610488611320565b6040516104959190613369565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613384565b61134a565b005b3480156104d357600080fd5b506104dc61145a565b005b3480156104ea57600080fd5b506104f3611558565b6040516105009190612f7a565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b919061303a565b6115ea565b60405161053d9190613095565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061303a565b6116d5565b60405161057a9190613095565b60405180910390f35b34801561058f57600080fd5b506105986116f3565b6040516105aa969594939291906133c4565b60405180910390f35b3480156105bf57600080fd5b506105c8611722565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613425565b611ce0565b6040516105fe91906131f0565b60405180910390f35b34801561061357600080fd5b5061062e6004803603810190610629919061332d565b611d67565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610656611320565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b601360179054906101000a900460ff166106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f29061351d565b60405180910390fd5b6019600a819055506019600b819055506000601360176101000a81548160ff021916908315150217905550565b6060600380546107379061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546107639061356c565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b60006107ce6107c7611e5e565b8484611e66565b6001905092915050565b6107e0611e5e565b73ffffffffffffffffffffffffffffffffffffffff166107fe611320565b73ffffffffffffffffffffffffffffffffffffffff1614610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906134b1565b60405180910390fd5b60005b838390508110156108f357816014600086868581811061087a5761087961359d565b5b905060200201602081019061088f919061332d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806108eb906135fb565b915050610857565b50505050565b610901611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661091f611320565b73ffffffffffffffffffffffffffffffffffffffff1614610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096c906134b1565b60405180910390fd5b60638211156109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09061368f565b60405180910390fd5b60638111156109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f4906136fb565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610a3c92919061371b565b60405180910390a15050565b610a50611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a6e611320565b73ffffffffffffffffffffffffffffffffffffffff1614610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb906134b1565b60405180910390fd5b61271082610ad0610b4d565b610ada9190613744565b610ae491906137b5565b60108190555061271081610af6610b4d565b610b009190613744565b610b0a91906137b5565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051610b4192919061371b565b60405180910390a15050565b6000600254905090565b610b5f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610b7d611320565b73ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca906134b1565b60405180910390fd5b6001811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613832565b60405180910390fd5b6103e881610c23610b4d565b610c2d9190613744565b610c3791906137b5565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610c6e91906131f0565b60405180910390a150565b6000610c8684848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cd1611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906138c4565b60405180910390fd5b610d6585610d5d611e5e565b858403611e66565b60019150509392505050565b60006009905090565b610d82611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610da0611320565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906134b1565b60405180910390fd5b6001811015610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613956565b60405180910390fd5b6103e881610e46610b4d565b610e509190613744565b610e5a91906137b5565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f54604051610e9191906131f0565b60405180910390a150565b6000610f3e610ea9611e5e565b848460016000610eb7611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f399190613976565b611e66565b6001905092915050565b610f50611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610f6e611320565b73ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516110349190613a09565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108f611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110ad611320565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa906134b1565b60405180910390fd5b61110d60006127f8565b565b611117611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611135611320565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611182906134b1565b60405180910390fd5b611193610b4d565b600e819055506111a1610b4d565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6111d0610b4d565b6040516111dd91906131f0565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161120e610b4d565b60405161121b91906131f0565b60405180910390a1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613a70565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561131d573d6000803e3d6000fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611352611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611370611320565b73ffffffffffffffffffffffffffffffffffffffff16146113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9828260405161144e929190613a90565b60405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114e857506114b9611320565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613a70565b60405180910390fd5b60006115323061103f565b905061153d816128be565b6000479050600081111561155457611553612b60565b5b5050565b6060600480546115679061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546115939061356c565b80156115e05780601f106115b5576101008083540402835291602001916115e0565b820191906000526020600020905b8154815290600101906020018083116115c357829003601f168201915b5050505050905090565b600080600160006115f9611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613b2b565b60405180910390fd5b6116ca6116c1611e5e565b85858403611e66565b600191505092915050565b60006116e96116e2611e5e565b848461202f565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b61172a611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611748611320565b73ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611795906134b1565b60405180910390fd5b601360149054906101000a900460ff16156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613b97565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061187730601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611872610b4d565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190613bcc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b59190613bcc565b6040518363ffffffff1660e01b81526004016119d2929190613bf9565b6020604051808303816000875af11580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a159190613bcc565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611a9e3061103f565b600080611aa9611320565b426040518863ffffffff1660e01b8152600401611acb96959493929190613c5d565b60606040518083038185885af1158015611ae9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b0e9190613cd3565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611bb0929190613d26565b6020604051808303816000875af1158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190613d64565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d6f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d8d611320565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613e03565b60405180910390fd5b611e5b816127f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202291906131f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a611320565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c85750612198611320565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e8561103f565b6124689190613976565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b99190613976565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e6906135fb565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a68561103f565b6125b09190613976565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b63061103f565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b50905030816000815181106129655761296461359d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613bcc565b81600181518110612a4457612a4361359d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c019190613744565b905092915050565b60008183612c1791906137b5565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d9190613976565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb191906131f0565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130d5576130d46130b0565b5b8235905067ffffffffffffffff8111156130f2576130f16130b5565b5b60208301915083602082028301111561310e5761310d6130ba565b5b9250929050565b61311e8161307a565b811461312957600080fd5b50565b60008135905061313b81613115565b92915050565b60008060006040848603121561315a57613159612f9c565b5b600084013567ffffffffffffffff81111561317857613177612fa1565b5b613184868287016130bf565b935093505060206131978682870161312c565b9150509250925092565b600080604083850312156131b8576131b7612f9c565b5b60006131c685828601613025565b92505060206131d785828601613025565b9150509250929050565b6131ea81613004565b82525050565b600060208201905061320560008301846131e1565b92915050565b60006020828403121561322157613220612f9c565b5b600061322f84828501613025565b91505092915050565b60008060006060848603121561325157613250612f9c565b5b600061325f86828701612fef565b935050602061327086828701612fef565b925050604061328186828701613025565b9150509250925092565b600060ff82169050919050565b6132a18161328b565b82525050565b60006020820190506132bc6000830184613298565b92915050565b60006132cd82612fa6565b9050919050565b6132dd816132c2565b81146132e857600080fd5b50565b6000813590506132fa816132d4565b92915050565b60006020828403121561331657613315612f9c565b5b6000613324848285016132eb565b91505092915050565b60006020828403121561334357613342612f9c565b5b600061335184828501612fef565b91505092915050565b61336381612fc6565b82525050565b600060208201905061337e600083018461335a565b92915050565b6000806040838503121561339b5761339a612f9c565b5b60006133a985828601612fef565b92505060206133ba8582860161312c565b9150509250929050565b600060c0820190506133d960008301896131e1565b6133e660208301886131e1565b6133f360408301876131e1565b61340060608301866131e1565b61340d60808301856131e1565b61341a60a08301846131e1565b979650505050505050565b6000806040838503121561343c5761343b612f9c565b5b600061344a85828601612fef565b925050602061345b85828601612fef565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612ef5565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613507601f83612ef5565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358457607f821691505b6020821081036135975761359661353d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360682613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613638576136376135cc565b5b600182019050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613679601583612ef5565b915061368482613643565b602082019050919050565b600060208201905081810360008301526136a88161366c565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006136e5601683612ef5565b91506136f0826136af565b602082019050919050565b60006020820190508181036000830152613714816136d8565b9050919050565b600060408201905061373060008301856131e1565b61373d60208301846131e1565b9392505050565b600061374f82613004565b915061375a83613004565b925082820261376881613004565b9150828204841483151761377f5761377e6135cc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c082613004565b91506137cb83613004565b9250826137db576137da613786565b5b828204905092915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b600061381c601e83612ef5565b9150613827826137e6565b602082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138ae602883612ef5565b91506138b982613852565b604082019050919050565b600060208201905081810360008301526138dd816138a1565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613940602283612ef5565b915061394b826138e4565b604082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b600061398182613004565b915061398c83613004565b92508282019050808211156139a4576139a36135cc565b5b92915050565b6000819050919050565b60006139cf6139ca6139c584612fa6565b6139aa565b612fa6565b9050919050565b60006139e1826139b4565b9050919050565b60006139f3826139d6565b9050919050565b613a03816139e8565b82525050565b6000602082019050613a1e60008301846139fa565b92915050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613a5a601d83612ef5565b9150613a6582613a24565b602082019050919050565b60006020820190508181036000830152613a8981613a4d565b9050919050565b6000604082019050613aa5600083018561335a565b613ab26020830184613086565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b15602583612ef5565b9150613b2082613ab9565b604082019050919050565b60006020820190508181036000830152613b4481613b08565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613b81601783612ef5565b9150613b8c82613b4b565b602082019050919050565b60006020820190508181036000830152613bb081613b74565b9050919050565b600081519050613bc681612fd8565b92915050565b600060208284031215613be257613be1612f9c565b5b6000613bf084828501613bb7565b91505092915050565b6000604082019050613c0e600083018561335a565b613c1b602083018461335a565b9392505050565b6000819050919050565b6000613c47613c42613c3d84613c22565b6139aa565b613004565b9050919050565b613c5781613c2c565b82525050565b600060c082019050613c72600083018961335a565b613c7f60208301886131e1565b613c8c6040830187613c4e565b613c996060830186613c4e565b613ca6608083018561335a565b613cb360a08301846131e1565b979650505050505050565b600081519050613ccd8161300e565b92915050565b600080600060608486031215613cec57613ceb612f9c565b5b6000613cfa86828701613cbe565b9350506020613d0b86828701613cbe565b9250506040613d1c86828701613cbe565b9150509250925092565b6000604082019050613d3b600083018561335a565b613d4860208301846131e1565b9392505050565b600081519050613d5e81613115565b92915050565b600060208284031215613d7a57613d79612f9c565b5b6000613d8884828501613d4f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ded602683612ef5565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886131e1565b61432a6020830187613c4e565b818103604083015261433c81866142aa565b905061434b606083018561335a565b61435860808301846131e1565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b9250828203905081811115614465576144646135cc565b5b9291505056fea264697066735822122079dc651cef0c9c25ecb45b013da343b8cd5866d9d89526bb50941b925f69cda064736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c806370a08231116100ec57806395d89b411161008a578063ae60148011610064578063ae60148014610583578063c9567bf9146105b3578063dd62ed3e146105ca578063f2fde38b14610607576101a7565b806395d89b41146104de578063a457c2d714610509578063a9059cbb14610546576101a7565b80638b638426116100c65780638b6384261461045c5780638da5cb5b146104735780638e0903331461049e5780638f937cc4146104c7576101a7565b806370a08231146103f1578063715018a61461042e578063751039fc14610445576101a7565b806318160ddd11610159578063313ce56711610133578063313ce5671461033757806332ad809614610362578063395093511461038b5780635f6e36e2146103c8576101a7565b806318160ddd146102a65780631d3d5a53146102d157806323b872dd146102fa576101a7565b806303d948f8146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630b76d5451461022b5780630b78f9c0146102545780630d53b4751461027d576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b005b3480156101cf57600080fd5b506101d8610728565b6040516101e59190612f7a565b60405180910390f35b3480156101fa57600080fd5b506102156004803603810190610210919061303a565b6107ba565b6040516102229190613095565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190613141565b6107d8565b005b34801561026057600080fd5b5061027b600480360381019061027691906131a1565b6108f9565b005b34801561028957600080fd5b506102a4600480360381019061029f91906131a1565b610a48565b005b3480156102b257600080fd5b506102bb610b4d565b6040516102c891906131f0565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f3919061320b565b610b57565b005b34801561030657600080fd5b50610321600480360381019061031c9190613238565b610c79565b60405161032e9190613095565b60405180910390f35b34801561034357600080fd5b5061034c610d71565b60405161035991906132a7565b60405180910390f35b34801561036e57600080fd5b506103896004803603810190610384919061320b565b610d7a565b005b34801561039757600080fd5b506103b260048036038101906103ad919061303a565b610e9c565b6040516103bf9190613095565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613300565b610f48565b005b3480156103fd57600080fd5b506104186004803603810190610413919061332d565b61103f565b60405161042591906131f0565b60405180910390f35b34801561043a57600080fd5b50610443611087565b005b34801561045157600080fd5b5061045a61110f565b005b34801561046857600080fd5b50610471611225565b005b34801561047f57600080fd5b50610488611320565b6040516104959190613369565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613384565b61134a565b005b3480156104d357600080fd5b506104dc61145a565b005b3480156104ea57600080fd5b506104f3611558565b6040516105009190612f7a565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b919061303a565b6115ea565b60405161053d9190613095565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061303a565b6116d5565b60405161057a9190613095565b60405180910390f35b34801561058f57600080fd5b506105986116f3565b6040516105aa969594939291906133c4565b60405180910390f35b3480156105bf57600080fd5b506105c8611722565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613425565b611ce0565b6040516105fe91906131f0565b60405180910390f35b34801561061357600080fd5b5061062e6004803603810190610629919061332d565b611d67565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610656611320565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b601360179054906101000a900460ff166106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f29061351d565b60405180910390fd5b6019600a819055506019600b819055506000601360176101000a81548160ff021916908315150217905550565b6060600380546107379061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546107639061356c565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b60006107ce6107c7611e5e565b8484611e66565b6001905092915050565b6107e0611e5e565b73ffffffffffffffffffffffffffffffffffffffff166107fe611320565b73ffffffffffffffffffffffffffffffffffffffff1614610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906134b1565b60405180910390fd5b60005b838390508110156108f357816014600086868581811061087a5761087961359d565b5b905060200201602081019061088f919061332d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806108eb906135fb565b915050610857565b50505050565b610901611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661091f611320565b73ffffffffffffffffffffffffffffffffffffffff1614610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096c906134b1565b60405180910390fd5b60638211156109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09061368f565b60405180910390fd5b60638111156109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f4906136fb565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610a3c92919061371b565b60405180910390a15050565b610a50611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a6e611320565b73ffffffffffffffffffffffffffffffffffffffff1614610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb906134b1565b60405180910390fd5b61271082610ad0610b4d565b610ada9190613744565b610ae491906137b5565b60108190555061271081610af6610b4d565b610b009190613744565b610b0a91906137b5565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051610b4192919061371b565b60405180910390a15050565b6000600254905090565b610b5f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610b7d611320565b73ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca906134b1565b60405180910390fd5b6001811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613832565b60405180910390fd5b6103e881610c23610b4d565b610c2d9190613744565b610c3791906137b5565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610c6e91906131f0565b60405180910390a150565b6000610c8684848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cd1611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906138c4565b60405180910390fd5b610d6585610d5d611e5e565b858403611e66565b60019150509392505050565b60006009905090565b610d82611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610da0611320565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906134b1565b60405180910390fd5b6001811015610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613956565b60405180910390fd5b6103e881610e46610b4d565b610e509190613744565b610e5a91906137b5565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f54604051610e9191906131f0565b60405180910390a150565b6000610f3e610ea9611e5e565b848460016000610eb7611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f399190613976565b611e66565b6001905092915050565b610f50611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610f6e611320565b73ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516110349190613a09565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108f611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110ad611320565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa906134b1565b60405180910390fd5b61110d60006127f8565b565b611117611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611135611320565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611182906134b1565b60405180910390fd5b611193610b4d565b600e819055506111a1610b4d565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6111d0610b4d565b6040516111dd91906131f0565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161120e610b4d565b60405161121b91906131f0565b60405180910390a1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613a70565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561131d573d6000803e3d6000fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611352611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611370611320565b73ffffffffffffffffffffffffffffffffffffffff16146113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9828260405161144e929190613a90565b60405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114e857506114b9611320565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613a70565b60405180910390fd5b60006115323061103f565b905061153d816128be565b6000479050600081111561155457611553612b60565b5b5050565b6060600480546115679061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546115939061356c565b80156115e05780601f106115b5576101008083540402835291602001916115e0565b820191906000526020600020905b8154815290600101906020018083116115c357829003601f168201915b5050505050905090565b600080600160006115f9611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613b2b565b60405180910390fd5b6116ca6116c1611e5e565b85858403611e66565b600191505092915050565b60006116e96116e2611e5e565b848461202f565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b61172a611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611748611320565b73ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611795906134b1565b60405180910390fd5b601360149054906101000a900460ff16156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613b97565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061187730601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611872610b4d565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190613bcc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b59190613bcc565b6040518363ffffffff1660e01b81526004016119d2929190613bf9565b6020604051808303816000875af11580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a159190613bcc565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611a9e3061103f565b600080611aa9611320565b426040518863ffffffff1660e01b8152600401611acb96959493929190613c5d565b60606040518083038185885af1158015611ae9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b0e9190613cd3565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611bb0929190613d26565b6020604051808303816000875af1158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190613d64565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d6f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d8d611320565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613e03565b60405180910390fd5b611e5b816127f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202291906131f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a611320565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c85750612198611320565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e8561103f565b6124689190613976565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b99190613976565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e6906135fb565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a68561103f565b6125b09190613976565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b63061103f565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b50905030816000815181106129655761296461359d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613bcc565b81600181518110612a4457612a4361359d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c019190613744565b905092915050565b60008183612c1791906137b5565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d9190613976565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb191906131f0565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130d5576130d46130b0565b5b8235905067ffffffffffffffff8111156130f2576130f16130b5565b5b60208301915083602082028301111561310e5761310d6130ba565b5b9250929050565b61311e8161307a565b811461312957600080fd5b50565b60008135905061313b81613115565b92915050565b60008060006040848603121561315a57613159612f9c565b5b600084013567ffffffffffffffff81111561317857613177612fa1565b5b613184868287016130bf565b935093505060206131978682870161312c565b9150509250925092565b600080604083850312156131b8576131b7612f9c565b5b60006131c685828601613025565b92505060206131d785828601613025565b9150509250929050565b6131ea81613004565b82525050565b600060208201905061320560008301846131e1565b92915050565b60006020828403121561322157613220612f9c565b5b600061322f84828501613025565b91505092915050565b60008060006060848603121561325157613250612f9c565b5b600061325f86828701612fef565b935050602061327086828701612fef565b925050604061328186828701613025565b9150509250925092565b600060ff82169050919050565b6132a18161328b565b82525050565b60006020820190506132bc6000830184613298565b92915050565b60006132cd82612fa6565b9050919050565b6132dd816132c2565b81146132e857600080fd5b50565b6000813590506132fa816132d4565b92915050565b60006020828403121561331657613315612f9c565b5b6000613324848285016132eb565b91505092915050565b60006020828403121561334357613342612f9c565b5b600061335184828501612fef565b91505092915050565b61336381612fc6565b82525050565b600060208201905061337e600083018461335a565b92915050565b6000806040838503121561339b5761339a612f9c565b5b60006133a985828601612fef565b92505060206133ba8582860161312c565b9150509250929050565b600060c0820190506133d960008301896131e1565b6133e660208301886131e1565b6133f360408301876131e1565b61340060608301866131e1565b61340d60808301856131e1565b61341a60a08301846131e1565b979650505050505050565b6000806040838503121561343c5761343b612f9c565b5b600061344a85828601612fef565b925050602061345b85828601612fef565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612ef5565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613507601f83612ef5565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358457607f821691505b6020821081036135975761359661353d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360682613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613638576136376135cc565b5b600182019050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613679601583612ef5565b915061368482613643565b602082019050919050565b600060208201905081810360008301526136a88161366c565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006136e5601683612ef5565b91506136f0826136af565b602082019050919050565b60006020820190508181036000830152613714816136d8565b9050919050565b600060408201905061373060008301856131e1565b61373d60208301846131e1565b9392505050565b600061374f82613004565b915061375a83613004565b925082820261376881613004565b9150828204841483151761377f5761377e6135cc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c082613004565b91506137cb83613004565b9250826137db576137da613786565b5b828204905092915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b600061381c601e83612ef5565b9150613827826137e6565b602082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138ae602883612ef5565b91506138b982613852565b604082019050919050565b600060208201905081810360008301526138dd816138a1565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613940602283612ef5565b915061394b826138e4565b604082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b600061398182613004565b915061398c83613004565b92508282019050808211156139a4576139a36135cc565b5b92915050565b6000819050919050565b60006139cf6139ca6139c584612fa6565b6139aa565b612fa6565b9050919050565b60006139e1826139b4565b9050919050565b60006139f3826139d6565b9050919050565b613a03816139e8565b82525050565b6000602082019050613a1e60008301846139fa565b92915050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613a5a601d83612ef5565b9150613a6582613a24565b602082019050919050565b60006020820190508181036000830152613a8981613a4d565b9050919050565b6000604082019050613aa5600083018561335a565b613ab26020830184613086565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b15602583612ef5565b9150613b2082613ab9565b604082019050919050565b60006020820190508181036000830152613b4481613b08565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613b81601783612ef5565b9150613b8c82613b4b565b602082019050919050565b60006020820190508181036000830152613bb081613b74565b9050919050565b600081519050613bc681612fd8565b92915050565b600060208284031215613be257613be1612f9c565b5b6000613bf084828501613bb7565b91505092915050565b6000604082019050613c0e600083018561335a565b613c1b602083018461335a565b9392505050565b6000819050919050565b6000613c47613c42613c3d84613c22565b6139aa565b613004565b9050919050565b613c5781613c2c565b82525050565b600060c082019050613c72600083018961335a565b613c7f60208301886131e1565b613c8c6040830187613c4e565b613c996060830186613c4e565b613ca6608083018561335a565b613cb360a08301846131e1565b979650505050505050565b600081519050613ccd8161300e565b92915050565b600080600060608486031215613cec57613ceb612f9c565b5b6000613cfa86828701613cbe565b9350506020613d0b86828701613cbe565b9250506040613d1c86828701613cbe565b9150509250925092565b6000604082019050613d3b600083018561335a565b613d4860208301846131e1565b9392505050565b600081519050613d5e81613115565b92915050565b600060208284031215613d7a57613d79612f9c565b5b6000613d8884828501613d4f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ded602683612ef5565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886131e1565b61432a6020830187613c4e565b818103604083015261433c81866142aa565b905061434b606083018561335a565b61435860808301846131e1565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b9250828203905081811115614465576144646135cc565b5b9291505056fea264697066735822122079dc651cef0c9c25ecb45b013da343b8cd5866d9d89526bb50941b925f69cda064736f6c63430008130033

Deployed Bytecode Sourcemap

25420:9769:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29483:196;;;;;;;;;;;;;:::i;:::-;;11018:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13251:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30418:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29934:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29168:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12138:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28649:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13923:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27354:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28898:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14857:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28485:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12309:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22357:103;;;;;;;;;;;;;:::i;:::-;;29687:239;;;;;;;;;;;;;:::i;:::-;;30241:169;;;;;;;;;;;;;:::i;:::-;;21706:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30634:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34032:436;;;;;;;;;;;;;:::i;:::-;;11237:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15646:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12665:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30817:491;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;27491:986;;;;;;;;;;;;;:::i;:::-;;12928:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22615:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29483:196;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29543:10:::1;;;;;;;;;;;29535:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:2;29600:10;:15;;;;29640:2;29626:11;:16;;;;29666:5;29653:10;;:18;;;;;;;;;;;;;;;;;;29483:196::o:0;11018:100::-;11072:13;11105:5;11098:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11018:100;:::o;13251:194::-;13359:4;13376:39;13385:12;:10;:12::i;:::-;13399:7;13408:6;13376:8;:39::i;:::-;13433:4;13426:11;;13251:194;;;;:::o;30418:208::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30531:9:::1;30526:93;30550:4;;:11;;30546:1;:15;30526:93;;;30601:6;30583;:15;30590:4;;30595:1;30590:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30583:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;30563:3;;;;;:::i;:::-;;;;30526:93;;;;30418:208:::0;;;:::o;29934:299::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30032:2:::1;30022:6;:12;;30014:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30090:2;30079:7;:13;;30071:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30143:6;30130:10;:19;;;;30174:7;30160:11;:21;;;;30197:28;30209:6;30217:7;30197:28;;;;;;;:::i;:::-;;;;;;;;29934:299:::0;;:::o;29168:307::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29339:5:::1;29319:16;29303:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29302:42;;;;:::i;:::-;29287:12;:57;;;;29401:5;29387:10;29371:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29370:36;;;;:::i;:::-;29355:12;:51;;;;29422:45;29438:16;29456:10;29422:45;;;;;;;:::i;:::-;;;;;;;;29168:307:::0;;:::o;12138:108::-;12199:7;12226:12;;12219:19;;12138:108;:::o;28649:241::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28735:1:::1;28723:8;:13;;28715:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28828:4;28816:8;28800:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28799:33;;;;:::i;:::-;28782:14;:50;;;;28848:34;28867:14;;28848:34;;;;;;:::i;:::-;;;;;;;;28649:241:::0;:::o;13923:529::-;14063:4;14080:36;14090:6;14098:9;14109:6;14080:9;:36::i;:::-;14129:24;14156:11;:19;14168:6;14156:19;;;;;;;;;;;;;;;:33;14176:12;:10;:12::i;:::-;14156:33;;;;;;;;;;;;;;;;14129:60;;14242:6;14222:16;:26;;14200:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14352:57;14361:6;14369:12;:10;:12::i;:::-;14402:6;14383:16;:25;14352:8;:57::i;:::-;14440:4;14433:11;;;13923:529;;;;;:::o;27354:92::-;27412:5;27437:1;27430:8;;27354:92;:::o;28898:262::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28989:1:::1;28977:8;:13;;28969:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29090:4;29078:8;29062:13;:11;:13::i;:::-;:24;;;;:::i;:::-;29061:33;;;;:::i;:::-;29040:18;:54;;;;29110:42;29133:18;;29110:42;;;;;;:::i;:::-;;;;;;;;28898:262:::0;:::o;14857:290::-;14970:4;14987:130;15010:12;:10;:12::i;:::-;15037:7;15096:10;15059:11;:25;15071:12;:10;:12::i;:::-;15059:25;;;;;;;;;;;;;;;:34;15085:7;15059:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14987:8;:130::i;:::-;15135:4;15128:11;;14857:290;;;;:::o;28485:156::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28575:10:::1;28562;;:23;;;;;;;;;;;;;;;;;;28603:30;28622:10;28603:30;;;;;;:::i;:::-;;;;;;;;28485:156:::0;:::o;12309:143::-;12399:7;12426:9;:18;12436:7;12426:18;;;;;;;;;;;;;;;;12419:25;;12309:143;;;:::o;22357:103::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22422:30:::1;22449:1;22422:18;:30::i;:::-;22357:103::o:0;29687:239::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29758:13:::1;:11;:13::i;:::-;29741:14;:30;;;;29803:13;:11;:13::i;:::-;29782:18;:34;;;;29832:33;29851:13;:11;:13::i;:::-;29832:33;;;;;;:::i;:::-;;;;;;;;29881:37;29904:13;:11;:13::i;:::-;29881:37;;;;;;:::i;:::-;;;;;;;;29687:239::o:0;30241:169::-;30305:10;;;;;;;;;;;30291:24;;:10;:24;;;30283:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30360:10;;;;;;;;;;;:19;;:42;30380:21;30360:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30241:169::o;21706:87::-;21752:7;21779:6;;;;;;;;;;;21772:13;;21706:87;:::o;30634:175::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30747:6:::1;30717:18;:27;30736:7;30717:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30769:32;30785:7;30794:6;30769:32;;;;;;;:::i;:::-;;;;;;;;30634:175:::0;;:::o;34032:436::-;34111:10;;;;;;;;;;;34097:24;;:10;:24;;;:49;;;;34139:7;:5;:7::i;:::-;34125:21;;:10;:21;;;34097:49;34075:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34214:28;34245:24;34263:4;34245:9;:24::i;:::-;34214:55;;34282:38;34299:20;34282:16;:38::i;:::-;34331:26;34360:21;34331:50;;34417:1;34396:18;:22;34392:69;;;34435:14;:12;:14::i;:::-;34392:69;34064:404;;34032:436::o;11237:104::-;11293:13;11326:7;11319:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11237:104;:::o;15646:475::-;15764:4;15781:24;15808:11;:25;15820:12;:10;:12::i;:::-;15808:25;;;;;;;;;;;;;;;:34;15834:7;15808:34;;;;;;;;;;;;;;;;15781:61;;15895:15;15875:16;:35;;15853:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16011:67;16020:12;:10;:12::i;:::-;16034:7;16062:15;16043:16;:34;16011:8;:67::i;:::-;16109:4;16102:11;;;15646:475;;;;:::o;12665:200::-;12776:4;12793:42;12803:12;:10;:12::i;:::-;12817:9;12828:6;12793:9;:42::i;:::-;12853:4;12846:11;;12665:200;;;;:::o;30817:491::-;30901:14;30930:15;30960:19;30994:21;31030:24;31069:18;31137:10;;31162:11;;31188:14;;31217:18;;31250:12;;31277;;31115:185;;;;;;;;;;;;30817:491;;;;;;:::o;27491:986::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27553:11:::1;;;;;;;;;;;27552:12;27544:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27646:42;27603:15;;:96;;;;;;;;;;;;;;;;;;27710:64;27727:4;27742:15;;;;;;;;;;;27760:13;:11;:13::i;:::-;27710:8;:64::i;:::-;27813:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27801:49;;;27873:4;27893:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27801:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27785:13;;:141;;;;;;;;;;;;;;;;;;27937:15;;;;;;;;;;;:31;;;27976:21;28021:4;28041:24;28059:4;28041:9;:24::i;:::-;28080:1;28096::::0;28112:7:::1;:5;:7::i;:::-;28134:15;27937:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28178:13;;;;;;;;;;;28171:29;;;28209:15;;;;;;;;;;;28227:14;28171:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28267:4;28253:11;;:18;;;;;;;;;;;;;;;;;;28296:4;28282:11;;:18;;;;;;;;;;;;;;;;;;28324:12;28311:10;:25;;;;28372:12;28347:15;;:38;;;;;;;;;;;;;;;;;;28432:4;28396:18;:33;28423:4;28396:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28454:15;;;;;;;;;;27491:986::o:0;12928:176::-;13042:7;13069:11;:18;13081:5;13069:18;;;;;;;;;;;;;;;:27;13088:7;13069:27;;;;;;;;;;;;;;;;13062:34;;12928:176;;;;:::o;22615:238::-;21937:12;:10;:12::i;:::-;21926:23;;:7;:5;:7::i;:::-;:23;;;21918:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22738:1:::1;22718:22;;:8;:22;;::::0;22696:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22817:28;22836:8;22817:18;:28::i;:::-;22615:238:::0;:::o;10024:98::-;10077:7;10104:10;10097:17;;10024:98;:::o;19429:380::-;19582:1;19565:19;;:5;:19;;;19557:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19663:1;19644:21;;:7;:21;;;19636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19747:6;19717:11;:18;19729:5;19717:18;;;;;;;;;;;;;;;:27;19736:7;19717:27;;;;;;;;;;;;;;;:36;;;;19785:7;19769:32;;19778:5;19769:32;;;19794:6;19769:32;;;;;;:::i;:::-;;;;;;;;19429:380;;;:::o;31316:2390::-;31464:1;31448:18;;:4;:18;;;31440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31541:1;31527:16;;:2;:16;;;31519:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31611:1;31602:6;:10;31594:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31669:17;31713:7;:5;:7::i;:::-;31705:15;;:4;:15;;;;:32;;;;;31730:7;:5;:7::i;:::-;31724:13;;:2;:13;;;;31705:32;:43;;;;;31742:6;;;;;;;;;;;31741:7;31705:43;31701:1834;;;31769:10;;;;;;;;;;;31765:89;;;31807:6;:12;31814:4;31807:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;31823:6;:10;31830:2;31823:10;;;;;;;;;;;;;;;;;;;;;;;;;31807:26;31799:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;31765:89;31882:31;31909:3;31882:22;31893:10;;31882:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;31870:43;;31960:13;;;;;;;;;;;31952:21;;:4;:21;;;:72;;;;;32008:15;;;;;;;;;;;31994:30;;:2;:30;;;;31952:72;:116;;;;;32046:18;:22;32065:2;32046:22;;;;;;;;;;;;;;;;;;;;;;;;;32045:23;31952:116;31930:568;;;32121:14;;32111:6;:24;;32103:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32242:18;;32232:6;32216:13;32226:2;32216:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32186:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32372:12;32368:1;32355:10;;:14;;;;:::i;:::-;:29;32351:102;;;32418:14;32429:2;32418:10;:14::i;:::-;32417:15;32409:24;;;;;;32351:102;32471:9;;:11;;;;;;;;;:::i;:::-;;;;;;31930:568;32524:13;;;;;;;;;;;32518:19;;:2;:19;;;;:46;;;;;32542:18;:22;32561:2;32542:22;;;;;;;;;;;;;;;;;;;;;;;;;32541:23;32518:46;32514:231;;;32641:18;;32631:6;32615:13;32625:2;32615:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32585:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32514:231;32771:13;;;;;;;;;;;32765:19;;:2;:19;;;:44;;;;;32804:4;32788:21;;:4;:21;;;;32765:44;32761:129;;;32842:32;32870:3;32842:23;32853:11;;32842:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;32830:44;;32761:129;32906:28;32937:24;32955:4;32937:9;:24::i;:::-;32906:55;;32999:6;;;;;;;;;;;32998:7;:47;;;;;33032:13;;;;;;;;;;;33026:19;;:2;:19;;;32998:47;:79;;;;;33066:11;;;;;;;;;;;32998:79;:135;;;;;33121:12;;33098:20;:35;32998:135;:186;;;;;33166:18;;33154:9;;:30;32998:186;:246;;;;;33231:12;33205:39;;:15;;;;;;;;;;;:39;;;;32998:246;32976:548;;;33279:57;33296:39;33300:20;33322:12;;33296:3;:39::i;:::-;33279:16;:57::i;:::-;33355:26;33384:21;33355:50;;33449:1;33428:18;:22;33424:85;;;33475:14;:12;:14::i;:::-;33424:85;33260:264;32976:548;31750:1785;31701:1834;33563:1;33551:9;:13;33547:93;;;33581:47;33597:4;33611;33618:9;33581:15;:47::i;:::-;33547:93;33650:48;33666:4;33672:2;33676:21;33687:9;33676:6;:10;;:21;;;;:::i;:::-;33650:15;:48::i;:::-;31429:2277;31316:2390;;;:::o;23013:191::-;23087:16;23106:6;;;;;;;;;;;23087:25;;23132:8;23123:6;;:17;;;;;;;;;;;;;;;;;;23187:8;23156:40;;23177:8;23156:40;;;;;;;;;;;;23076:128;23013:191;:::o;34476:532::-;26691:4;26682:6;;:13;;;;;;;;;;;;;;;;;;34579:12:::1;34554:15;;:38;;;;;;;;;;;;;;;;;;34603:21;34641:1;34627:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34603:40;;34672:4;34654;34659:1;34654:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34698:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34688:4;34693:1;34688:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34731:62;34748:4;34763:15;;;;;;;;;;;34781:11;34731:8;:62::i;:::-;34804:15;;;;;;;;;;;:66;;;34885:11;34911:1;34927:4;34954;34974:15;34804:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34543:465;26727:5:::0;26718:6;;:14;;;;;;;;;;;;;;;;;;34476:532;:::o;35016:170::-;35059:12;35104:10;;;;;;;;;;;35096:24;;35128:21;35096:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35082:96;;;;;35048:138;35016:170::o;3383:98::-;3441:7;3472:1;3468;:5;;;;:::i;:::-;3461:12;;3383:98;;;;:::o;3782:::-;3840:7;3871:1;3867;:5;;;;:::i;:::-;3860:12;;3782:98;;;;:::o;33829:195::-;33888:4;33905:12;33972:7;33960:20;33952:28;;34015:1;34008:4;:8;34001:15;;;33829:195;;;:::o;33714:107::-;33771:7;33803:1;33799;:5;33798:15;;33812:1;33798:15;;;33808:1;33798:15;33791:22;;33714:107;;;;:::o;16611:770::-;16769:1;16751:20;;:6;:20;;;16743:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16853:1;16832:23;;:9;:23;;;16824:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16908:47;16929:6;16937:9;16948:6;16908:20;:47::i;:::-;16968:21;16992:9;:17;17002:6;16992:17;;;;;;;;;;;;;;;;16968:41;;17059:6;17042:13;:23;;17020:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17203:6;17187:13;:22;17167:9;:17;17177:6;17167:17;;;;;;;;;;;;;;;:42;;;;17255:6;17231:9;:20;17241:9;17231:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17296:9;17279:35;;17288:6;17279:35;;;17307:6;17279:35;;;;;;:::i;:::-;;;;;;;;17327:46;17347:6;17355:9;17366:6;17327:19;:46::i;:::-;16732:649;16611:770;;;:::o;3026:98::-;3084:7;3115:1;3111;:5;;;;:::i;:::-;3104:12;;3026:98;;;;:::o;20409:125::-;;;;:::o;21138:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:117;3678:1;3675;3668:12;3692:117;3801:1;3798;3791:12;3832:568;3905:8;3915:6;3965:3;3958:4;3950:6;3946:17;3942:27;3932:122;;3973:79;;:::i;:::-;3932:122;4086:6;4073:20;4063:30;;4116:18;4108:6;4105:30;4102:117;;;4138:79;;:::i;:::-;4102:117;4252:4;4244:6;4240:17;4228:29;;4306:3;4298:4;4290:6;4286:17;4276:8;4272:32;4269:41;4266:128;;;4313:79;;:::i;:::-;4266:128;3832:568;;;;;:::o;4406:116::-;4476:21;4491:5;4476:21;:::i;:::-;4469:5;4466:32;4456:60;;4512:1;4509;4502:12;4456:60;4406:116;:::o;4528:133::-;4571:5;4609:6;4596:20;4587:29;;4625:30;4649:5;4625:30;:::i;:::-;4528:133;;;;:::o;4667:698::-;4759:6;4767;4775;4824:2;4812:9;4803:7;4799:23;4795:32;4792:119;;;4830:79;;:::i;:::-;4792:119;4978:1;4967:9;4963:17;4950:31;5008:18;5000:6;4997:30;4994:117;;;5030:79;;:::i;:::-;4994:117;5143:80;5215:7;5206:6;5195:9;5191:22;5143:80;:::i;:::-;5125:98;;;;4921:312;5272:2;5298:50;5340:7;5331:6;5320:9;5316:22;5298:50;:::i;:::-;5288:60;;5243:115;4667:698;;;;;:::o;5371:474::-;5439:6;5447;5496:2;5484:9;5475:7;5471:23;5467:32;5464:119;;;5502:79;;:::i;:::-;5464:119;5622:1;5647:53;5692:7;5683:6;5672:9;5668:22;5647:53;:::i;:::-;5637:63;;5593:117;5749:2;5775:53;5820:7;5811:6;5800:9;5796:22;5775:53;:::i;:::-;5765:63;;5720:118;5371:474;;;;;:::o;5851:118::-;5938:24;5956:5;5938:24;:::i;:::-;5933:3;5926:37;5851:118;;:::o;5975:222::-;6068:4;6106:2;6095:9;6091:18;6083:26;;6119:71;6187:1;6176:9;6172:17;6163:6;6119:71;:::i;:::-;5975:222;;;;:::o;6203:329::-;6262:6;6311:2;6299:9;6290:7;6286:23;6282:32;6279:119;;;6317:79;;:::i;:::-;6279:119;6437:1;6462:53;6507:7;6498:6;6487:9;6483:22;6462:53;:::i;:::-;6452:63;;6408:117;6203:329;;;;:::o;6538:619::-;6615:6;6623;6631;6680:2;6668:9;6659:7;6655:23;6651:32;6648:119;;;6686:79;;:::i;:::-;6648:119;6806:1;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6777:117;6933:2;6959:53;7004:7;6995:6;6984:9;6980:22;6959:53;:::i;:::-;6949:63;;6904:118;7061:2;7087:53;7132:7;7123:6;7112:9;7108:22;7087:53;:::i;:::-;7077:63;;7032:118;6538:619;;;;;:::o;7163:86::-;7198:7;7238:4;7231:5;7227:16;7216:27;;7163:86;;;:::o;7255:112::-;7338:22;7354:5;7338:22;:::i;:::-;7333:3;7326:35;7255:112;;:::o;7373:214::-;7462:4;7500:2;7489:9;7485:18;7477:26;;7513:67;7577:1;7566:9;7562:17;7553:6;7513:67;:::i;:::-;7373:214;;;;:::o;7593:104::-;7638:7;7667:24;7685:5;7667:24;:::i;:::-;7656:35;;7593:104;;;:::o;7703:138::-;7784:32;7810:5;7784:32;:::i;:::-;7777:5;7774:43;7764:71;;7831:1;7828;7821:12;7764:71;7703:138;:::o;7847:155::-;7901:5;7939:6;7926:20;7917:29;;7955:41;7990:5;7955:41;:::i;:::-;7847:155;;;;:::o;8008:345::-;8075:6;8124:2;8112:9;8103:7;8099:23;8095:32;8092:119;;;8130:79;;:::i;:::-;8092:119;8250:1;8275:61;8328:7;8319:6;8308:9;8304:22;8275:61;:::i;:::-;8265:71;;8221:125;8008:345;;;;:::o;8359:329::-;8418:6;8467:2;8455:9;8446:7;8442:23;8438:32;8435:119;;;8473:79;;:::i;:::-;8435:119;8593:1;8618:53;8663:7;8654:6;8643:9;8639:22;8618:53;:::i;:::-;8608:63;;8564:117;8359:329;;;;:::o;8694:118::-;8781:24;8799:5;8781:24;:::i;:::-;8776:3;8769:37;8694:118;;:::o;8818:222::-;8911:4;8949:2;8938:9;8934:18;8926:26;;8962:71;9030:1;9019:9;9015:17;9006:6;8962:71;:::i;:::-;8818:222;;;;:::o;9046:468::-;9111:6;9119;9168:2;9156:9;9147:7;9143:23;9139:32;9136:119;;;9174:79;;:::i;:::-;9136:119;9294:1;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9265:117;9421:2;9447:50;9489:7;9480:6;9469:9;9465:22;9447:50;:::i;:::-;9437:60;;9392:115;9046:468;;;;;:::o;9520:775::-;9753:4;9791:3;9780:9;9776:19;9768:27;;9805:71;9873:1;9862:9;9858:17;9849:6;9805:71;:::i;:::-;9886:72;9954:2;9943:9;9939:18;9930:6;9886:72;:::i;:::-;9968;10036:2;10025:9;10021:18;10012:6;9968:72;:::i;:::-;10050;10118:2;10107:9;10103:18;10094:6;10050:72;:::i;:::-;10132:73;10200:3;10189:9;10185:19;10176:6;10132:73;:::i;:::-;10215;10283:3;10272:9;10268:19;10259:6;10215:73;:::i;:::-;9520:775;;;;;;;;;:::o;10301:474::-;10369:6;10377;10426:2;10414:9;10405:7;10401:23;10397:32;10394:119;;;10432:79;;:::i;:::-;10394:119;10552:1;10577:53;10622:7;10613:6;10602:9;10598:22;10577:53;:::i;:::-;10567:63;;10523:117;10679:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10650:118;10301:474;;;;;:::o;10781:182::-;10921:34;10917:1;10909:6;10905:14;10898:58;10781:182;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;10969:366;;;:::o;11341:419::-;11507:4;11545:2;11534:9;11530:18;11522:26;;11594:9;11588:4;11584:20;11580:1;11569:9;11565:17;11558:47;11622:131;11748:4;11622:131;:::i;:::-;11614:139;;11341:419;;;:::o;11766:181::-;11906:33;11902:1;11894:6;11890:14;11883:57;11766:181;:::o;11953:366::-;12095:3;12116:67;12180:2;12175:3;12116:67;:::i;:::-;12109:74;;12192:93;12281:3;12192:93;:::i;:::-;12310:2;12305:3;12301:12;12294:19;;11953:366;;;:::o;12325:419::-;12491:4;12529:2;12518:9;12514:18;12506:26;;12578:9;12572:4;12568:20;12564:1;12553:9;12549:17;12542:47;12606:131;12732:4;12606:131;:::i;:::-;12598:139;;12325:419;;;:::o;12750:180::-;12798:77;12795:1;12788:88;12895:4;12892:1;12885:15;12919:4;12916:1;12909:15;12936:320;12980:6;13017:1;13011:4;13007:12;12997:22;;13064:1;13058:4;13054:12;13085:18;13075:81;;13141:4;13133:6;13129:17;13119:27;;13075:81;13203:2;13195:6;13192:14;13172:18;13169:38;13166:84;;13222:18;;:::i;:::-;13166:84;12987:269;12936:320;;;:::o;13262:180::-;13310:77;13307:1;13300:88;13407:4;13404:1;13397:15;13431:4;13428:1;13421:15;13448:180;13496:77;13493:1;13486:88;13593:4;13590:1;13583:15;13617:4;13614:1;13607:15;13634:233;13673:3;13696:24;13714:5;13696:24;:::i;:::-;13687:33;;13742:66;13735:5;13732:77;13729:103;;13812:18;;:::i;:::-;13729:103;13859:1;13852:5;13848:13;13841:20;;13634:233;;;:::o;13873:171::-;14013:23;14009:1;14001:6;13997:14;13990:47;13873:171;:::o;14050:366::-;14192:3;14213:67;14277:2;14272:3;14213:67;:::i;:::-;14206:74;;14289:93;14378:3;14289:93;:::i;:::-;14407:2;14402:3;14398:12;14391:19;;14050:366;;;:::o;14422:419::-;14588:4;14626:2;14615:9;14611:18;14603:26;;14675:9;14669:4;14665:20;14661:1;14650:9;14646:17;14639:47;14703:131;14829:4;14703:131;:::i;:::-;14695:139;;14422:419;;;:::o;14847:172::-;14987:24;14983:1;14975:6;14971:14;14964:48;14847:172;:::o;15025:366::-;15167:3;15188:67;15252:2;15247:3;15188:67;:::i;:::-;15181:74;;15264:93;15353:3;15264:93;:::i;:::-;15382:2;15377:3;15373:12;15366:19;;15025:366;;;:::o;15397:419::-;15563:4;15601:2;15590:9;15586:18;15578:26;;15650:9;15644:4;15640:20;15636:1;15625:9;15621:17;15614:47;15678:131;15804:4;15678:131;:::i;:::-;15670:139;;15397:419;;;:::o;15822:332::-;15943:4;15981:2;15970:9;15966:18;15958:26;;15994:71;16062:1;16051:9;16047:17;16038:6;15994:71;:::i;:::-;16075:72;16143:2;16132:9;16128:18;16119:6;16075:72;:::i;:::-;15822:332;;;;;:::o;16160:410::-;16200:7;16223:20;16241:1;16223:20;:::i;:::-;16218:25;;16257:20;16275:1;16257:20;:::i;:::-;16252:25;;16312:1;16309;16305:9;16334:30;16352:11;16334:30;:::i;:::-;16323:41;;16513:1;16504:7;16500:15;16497:1;16494:22;16474:1;16467:9;16447:83;16424:139;;16543:18;;:::i;:::-;16424:139;16208:362;16160:410;;;;:::o;16576:180::-;16624:77;16621:1;16614:88;16721:4;16718:1;16711:15;16745:4;16742:1;16735:15;16762:185;16802:1;16819:20;16837:1;16819:20;:::i;:::-;16814:25;;16853:20;16871:1;16853:20;:::i;:::-;16848:25;;16892:1;16882:35;;16897:18;;:::i;:::-;16882:35;16939:1;16936;16932:9;16927:14;;16762:185;;;;:::o;16953:180::-;17093:32;17089:1;17081:6;17077:14;17070:56;16953:180;:::o;17139:366::-;17281:3;17302:67;17366:2;17361:3;17302:67;:::i;:::-;17295:74;;17378:93;17467:3;17378:93;:::i;:::-;17496:2;17491:3;17487:12;17480:19;;17139:366;;;:::o;17511:419::-;17677:4;17715:2;17704:9;17700:18;17692:26;;17764:9;17758:4;17754:20;17750:1;17739:9;17735:17;17728:47;17792:131;17918:4;17792:131;:::i;:::-;17784:139;;17511:419;;;:::o;17936:227::-;18076:34;18072:1;18064:6;18060:14;18053:58;18145:10;18140:2;18132:6;18128:15;18121:35;17936:227;:::o;18169:366::-;18311:3;18332:67;18396:2;18391:3;18332:67;:::i;:::-;18325:74;;18408:93;18497:3;18408:93;:::i;:::-;18526:2;18521:3;18517:12;18510:19;;18169:366;;;:::o;18541:419::-;18707:4;18745:2;18734:9;18730:18;18722:26;;18794:9;18788:4;18784:20;18780:1;18769:9;18765:17;18758:47;18822:131;18948:4;18822:131;:::i;:::-;18814:139;;18541:419;;;:::o;18966:221::-;19106:34;19102:1;19094:6;19090:14;19083:58;19175:4;19170:2;19162:6;19158:15;19151:29;18966:221;:::o;19193:366::-;19335:3;19356:67;19420:2;19415:3;19356:67;:::i;:::-;19349:74;;19432:93;19521:3;19432:93;:::i;:::-;19550:2;19545:3;19541:12;19534:19;;19193:366;;;:::o;19565:419::-;19731:4;19769:2;19758:9;19754:18;19746:26;;19818:9;19812:4;19808:20;19804:1;19793:9;19789:17;19782:47;19846:131;19972:4;19846:131;:::i;:::-;19838:139;;19565:419;;;:::o;19990:191::-;20030:3;20049:20;20067:1;20049:20;:::i;:::-;20044:25;;20083:20;20101:1;20083:20;:::i;:::-;20078:25;;20126:1;20123;20119:9;20112:16;;20147:3;20144:1;20141:10;20138:36;;;20154:18;;:::i;:::-;20138:36;19990:191;;;;:::o;20187:60::-;20215:3;20236:5;20229:12;;20187:60;;;:::o;20253:142::-;20303:9;20336:53;20354:34;20363:24;20381:5;20363:24;:::i;:::-;20354:34;:::i;:::-;20336:53;:::i;:::-;20323:66;;20253:142;;;:::o;20401:126::-;20451:9;20484:37;20515:5;20484:37;:::i;:::-;20471:50;;20401:126;;;:::o;20533:134::-;20591:9;20624:37;20655:5;20624:37;:::i;:::-;20611:50;;20533:134;;;:::o;20673:147::-;20768:45;20807:5;20768:45;:::i;:::-;20763:3;20756:58;20673:147;;:::o;20826:238::-;20927:4;20965:2;20954:9;20950:18;20942:26;;20978:79;21054:1;21043:9;21039:17;21030:6;20978:79;:::i;:::-;20826:238;;;;:::o;21070:179::-;21210:31;21206:1;21198:6;21194:14;21187:55;21070:179;:::o;21255:366::-;21397:3;21418:67;21482:2;21477:3;21418:67;:::i;:::-;21411:74;;21494:93;21583:3;21494:93;:::i;:::-;21612:2;21607:3;21603:12;21596:19;;21255:366;;;:::o;21627:419::-;21793:4;21831:2;21820:9;21816:18;21808:26;;21880:9;21874:4;21870:20;21866:1;21855:9;21851:17;21844:47;21908:131;22034:4;21908:131;:::i;:::-;21900:139;;21627:419;;;:::o;22052:320::-;22167:4;22205:2;22194:9;22190:18;22182:26;;22218:71;22286:1;22275:9;22271:17;22262:6;22218:71;:::i;:::-;22299:66;22361:2;22350:9;22346:18;22337:6;22299:66;:::i;:::-;22052:320;;;;;:::o;22378:224::-;22518:34;22514:1;22506:6;22502:14;22495:58;22587:7;22582:2;22574:6;22570:15;22563:32;22378:224;:::o;22608:366::-;22750:3;22771:67;22835:2;22830:3;22771:67;:::i;:::-;22764:74;;22847:93;22936:3;22847:93;:::i;:::-;22965:2;22960:3;22956:12;22949:19;;22608:366;;;:::o;22980:419::-;23146:4;23184:2;23173:9;23169:18;23161:26;;23233:9;23227:4;23223:20;23219:1;23208:9;23204:17;23197:47;23261:131;23387:4;23261:131;:::i;:::-;23253:139;;22980:419;;;:::o;23405:173::-;23545:25;23541:1;23533:6;23529:14;23522:49;23405:173;:::o;23584:366::-;23726:3;23747:67;23811:2;23806:3;23747:67;:::i;:::-;23740:74;;23823:93;23912:3;23823:93;:::i;:::-;23941:2;23936:3;23932:12;23925:19;;23584:366;;;:::o;23956:419::-;24122:4;24160:2;24149:9;24145:18;24137:26;;24209:9;24203:4;24199:20;24195:1;24184:9;24180:17;24173:47;24237:131;24363:4;24237:131;:::i;:::-;24229:139;;23956:419;;;:::o;24381:143::-;24438:5;24469:6;24463:13;24454:22;;24485:33;24512:5;24485:33;:::i;:::-;24381:143;;;;:::o;24530:351::-;24600:6;24649:2;24637:9;24628:7;24624:23;24620:32;24617:119;;;24655:79;;:::i;:::-;24617:119;24775:1;24800:64;24856:7;24847:6;24836:9;24832:22;24800:64;:::i;:::-;24790:74;;24746:128;24530:351;;;;:::o;24887:332::-;25008:4;25046:2;25035:9;25031:18;25023:26;;25059:71;25127:1;25116:9;25112:17;25103:6;25059:71;:::i;:::-;25140:72;25208:2;25197:9;25193:18;25184:6;25140:72;:::i;:::-;24887:332;;;;;:::o;25225:85::-;25270:7;25299:5;25288:16;;25225:85;;;:::o;25316:158::-;25374:9;25407:61;25425:42;25434:32;25460:5;25434:32;:::i;:::-;25425:42;:::i;:::-;25407:61;:::i;:::-;25394:74;;25316:158;;;:::o;25480:147::-;25575:45;25614:5;25575:45;:::i;:::-;25570:3;25563:58;25480:147;;:::o;25633:807::-;25882:4;25920:3;25909:9;25905:19;25897:27;;25934:71;26002:1;25991:9;25987:17;25978:6;25934:71;:::i;:::-;26015:72;26083:2;26072:9;26068:18;26059:6;26015:72;:::i;:::-;26097:80;26173:2;26162:9;26158:18;26149:6;26097:80;:::i;:::-;26187;26263:2;26252:9;26248:18;26239:6;26187:80;:::i;:::-;26277:73;26345:3;26334:9;26330:19;26321:6;26277:73;:::i;:::-;26360;26428:3;26417:9;26413:19;26404:6;26360:73;:::i;:::-;25633:807;;;;;;;;;:::o;26446:143::-;26503:5;26534:6;26528:13;26519:22;;26550:33;26577:5;26550:33;:::i;:::-;26446:143;;;;:::o;26595:663::-;26683:6;26691;26699;26748:2;26736:9;26727:7;26723:23;26719:32;26716:119;;;26754:79;;:::i;:::-;26716:119;26874:1;26899:64;26955:7;26946:6;26935:9;26931:22;26899:64;:::i;:::-;26889:74;;26845:128;27012:2;27038:64;27094:7;27085:6;27074:9;27070:22;27038:64;:::i;:::-;27028:74;;26983:129;27151:2;27177:64;27233:7;27224:6;27213:9;27209:22;27177:64;:::i;:::-;27167:74;;27122:129;26595:663;;;;;:::o;27264:332::-;27385:4;27423:2;27412:9;27408:18;27400:26;;27436:71;27504:1;27493:9;27489:17;27480:6;27436:71;:::i;:::-;27517:72;27585:2;27574:9;27570:18;27561:6;27517:72;:::i;:::-;27264:332;;;;;:::o;27602:137::-;27656:5;27687:6;27681:13;27672:22;;27703:30;27727:5;27703:30;:::i;:::-;27602:137;;;;:::o;27745:345::-;27812:6;27861:2;27849:9;27840:7;27836:23;27832:32;27829:119;;;27867:79;;:::i;:::-;27829:119;27987:1;28012:61;28065:7;28056:6;28045:9;28041:22;28012:61;:::i;:::-;28002:71;;27958:125;27745:345;;;;:::o;28096:225::-;28236:34;28232:1;28224:6;28220:14;28213:58;28305:8;28300:2;28292:6;28288:15;28281:33;28096:225;:::o;28327:366::-;28469:3;28490:67;28554:2;28549:3;28490:67;:::i;:::-;28483:74;;28566:93;28655:3;28566:93;:::i;:::-;28684:2;28679:3;28675:12;28668:19;;28327:366;;;:::o;28699:419::-;28865:4;28903:2;28892:9;28888:18;28880:26;;28952:9;28946:4;28942:20;28938:1;28927:9;28923:17;28916:47;28980:131;29106:4;28980:131;:::i;:::-;28972:139;;28699:419;;;:::o;29124:223::-;29264:34;29260:1;29252:6;29248:14;29241:58;29333:6;29328:2;29320:6;29316:15;29309:31;29124:223;:::o;29353:366::-;29495:3;29516:67;29580:2;29575:3;29516:67;:::i;:::-;29509:74;;29592:93;29681:3;29592:93;:::i;:::-;29710:2;29705:3;29701:12;29694:19;;29353:366;;;:::o;29725:419::-;29891:4;29929:2;29918:9;29914:18;29906:26;;29978:9;29972:4;29968:20;29964:1;29953:9;29949:17;29942:47;30006:131;30132:4;30006:131;:::i;:::-;29998:139;;29725:419;;;:::o;30150:221::-;30290:34;30286:1;30278:6;30274:14;30267:58;30359:4;30354:2;30346:6;30342:15;30335:29;30150:221;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:224::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:7;31378:2;31370:6;31366:15;31359:32;31174:224;:::o;31404:366::-;31546:3;31567:67;31631:2;31626:3;31567:67;:::i;:::-;31560:74;;31643:93;31732:3;31643:93;:::i;:::-;31761:2;31756:3;31752:12;31745:19;;31404:366;;;:::o;31776:419::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:222::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:5;32405:2;32397:6;32393:15;32386:30;32201:222;:::o;32429:366::-;32571:3;32592:67;32656:2;32651:3;32592:67;:::i;:::-;32585:74;;32668:93;32757:3;32668:93;:::i;:::-;32786:2;32781:3;32777:12;32770:19;;32429:366;;;:::o;32801:419::-;32967:4;33005:2;32994:9;32990:18;32982:26;;33054:9;33048:4;33044:20;33040:1;33029:9;33025:17;33018:47;33082:131;33208:4;33082:131;:::i;:::-;33074:139;;32801:419;;;:::o;33226:228::-;33366:34;33362:1;33354:6;33350:14;33343:58;33435:11;33430:2;33422:6;33418:15;33411:36;33226:228;:::o;33460:366::-;33602:3;33623:67;33687:2;33682:3;33623:67;:::i;:::-;33616:74;;33699:93;33788:3;33699:93;:::i;:::-;33817:2;33812:3;33808:12;33801:19;;33460:366;;;:::o;33832:419::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:114::-;;:::o;34377:364::-;34519:3;34540:66;34604:1;34599:3;34540:66;:::i;:::-;34533:73;;34615:93;34704:3;34615:93;:::i;:::-;34733:1;34728:3;34724:11;34717:18;;34377:364;;;:::o;34747:419::-;34913:4;34951:2;34940:9;34936:18;34928:26;;35000:9;34994:4;34990:20;34986:1;34975:9;34971:17;34964:47;35028:131;35154:4;35028:131;:::i;:::-;35020:139;;34747:419;;;:::o;35172:177::-;35312:29;35308:1;35300:6;35296:14;35289:53;35172:177;:::o;35355:366::-;35497:3;35518:67;35582:2;35577:3;35518:67;:::i;:::-;35511:74;;35594:93;35683:3;35594:93;:::i;:::-;35712:2;35707:3;35703:12;35696:19;;35355:366;;;:::o;35727:419::-;35893:4;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35727:419;;;:::o;36152:176::-;36292:28;36288:1;36280:6;36276:14;36269:52;36152:176;:::o;36334:366::-;36476:3;36497:67;36561:2;36556:3;36497:67;:::i;:::-;36490:74;;36573:93;36662:3;36573:93;:::i;:::-;36691:2;36686:3;36682:12;36675:19;;36334:366;;;:::o;36706:419::-;36872:4;36910:2;36899:9;36895:18;36887:26;;36959:9;36953:4;36949:20;36945:1;36934:9;36930:17;36923:47;36987:131;37113:4;36987:131;:::i;:::-;36979:139;;36706:419;;;:::o;37131:180::-;37179:77;37176:1;37169:88;37276:4;37273:1;37266:15;37300:4;37297:1;37290:15;37317:114;37384:6;37418:5;37412:12;37402:22;;37317:114;;;:::o;37437:184::-;37536:11;37570:6;37565:3;37558:19;37610:4;37605:3;37601:14;37586:29;;37437:184;;;;:::o;37627:132::-;37694:4;37717:3;37709:11;;37747:4;37742:3;37738:14;37730:22;;37627:132;;;:::o;37765:108::-;37842:24;37860:5;37842:24;:::i;:::-;37837:3;37830:37;37765:108;;:::o;37879:179::-;37948:10;37969:46;38011:3;38003:6;37969:46;:::i;:::-;38047:4;38042:3;38038:14;38024:28;;37879:179;;;;:::o;38064:113::-;38134:4;38166;38161:3;38157:14;38149:22;;38064:113;;;:::o;38213:732::-;38332:3;38361:54;38409:5;38361:54;:::i;:::-;38431:86;38510:6;38505:3;38431:86;:::i;:::-;38424:93;;38541:56;38591:5;38541:56;:::i;:::-;38620:7;38651:1;38636:284;38661:6;38658:1;38655:13;38636:284;;;38737:6;38731:13;38764:63;38823:3;38808:13;38764:63;:::i;:::-;38757:70;;38850:60;38903:6;38850:60;:::i;:::-;38840:70;;38696:224;38683:1;38680;38676:9;38671:14;;38636:284;;;38640:14;38936:3;38929:10;;38337:608;;;38213:732;;;;:::o;38951:831::-;39214:4;39252:3;39241:9;39237:19;39229:27;;39266:71;39334:1;39323:9;39319:17;39310:6;39266:71;:::i;:::-;39347:80;39423:2;39412:9;39408:18;39399:6;39347:80;:::i;:::-;39474:9;39468:4;39464:20;39459:2;39448:9;39444:18;39437:48;39502:108;39605:4;39596:6;39502:108;:::i;:::-;39494:116;;39620:72;39688:2;39677:9;39673:18;39664:6;39620:72;:::i;:::-;39702:73;39770:3;39759:9;39755:19;39746:6;39702:73;:::i;:::-;38951:831;;;;;;;;:::o;39788:147::-;39889:11;39926:3;39911:18;;39788:147;;;;:::o;39941:398::-;40100:3;40121:83;40202:1;40197:3;40121:83;:::i;:::-;40114:90;;40213:93;40302:3;40213:93;:::i;:::-;40331:1;40326:3;40322:11;40315:18;;39941:398;;;:::o;40345:379::-;40529:3;40551:147;40694:3;40551:147;:::i;:::-;40544:154;;40715:3;40708:10;;40345:379;;;:::o;40730:225::-;40870:34;40866:1;40858:6;40854:14;40847:58;40939:8;40934:2;40926:6;40922:15;40915:33;40730:225;:::o;40961:366::-;41103:3;41124:67;41188:2;41183:3;41124:67;:::i;:::-;41117:74;;41200:93;41289:3;41200:93;:::i;:::-;41318:2;41313:3;41309:12;41302:19;;40961:366;;;:::o;41333:419::-;41499:4;41537:2;41526:9;41522:18;41514:26;;41586:9;41580:4;41576:20;41572:1;41561:9;41557:17;41550:47;41614:131;41740:4;41614:131;:::i;:::-;41606:139;;41333:419;;;:::o;41758:194::-;41798:4;41818:20;41836:1;41818:20;:::i;:::-;41813:25;;41852:20;41870:1;41852:20;:::i;:::-;41847:25;;41896:1;41893;41889:9;41881:17;;41920:1;41914:4;41911:11;41908:37;;;41925:18;;:::i;:::-;41908:37;41758:194;;;;:::o

Swarm Source

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