ETH Price: $3,314.66 (-5.81%)

Token

Hydra (HYDRA)
 

Overview

Max Total Supply

1,000,000,000 HYDRA

Holders

149

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,742,042.123384682301660828 HYDRA

Value
$0.00
0xbf39ebb2462ad8e0fdb9b3ce9a4fd5a252f790fa
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:
Hydra

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-01-30
*/

// SPDX-License-Identifier: MIT

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 Hydra is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private _buyTax = 35;
    uint256 private _sellTax = 35;
    uint256 private _preventSwapBefore = 1;
    uint256 private _buyCount = 0;

    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;
    uint256 private _taxSwapThreshold;
    uint256 private _maxTaxSwap;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event MaxTxAmountUpdated(uint _maxTxAmount);
    event MaxWalletAmountUpdated(uint _maxWalletSize);
    event FeesUpdated(uint _buyTax, uint _sellTax);
    event SwapbackUpdated(uint _taxSwapThreshold, uint _maxTaxSwap);
    event FeeReceiverUpdated(address _taxWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

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

    constructor() ERC20("Hydra", "HYDRA") {
        uint256 _totalSupply = 1000000000 * 10 ** decimals();

        _maxTxAmount = (_totalSupply * 10) / 1000;
        _maxWalletSize = (_totalSupply * 10) / 1000;
        _taxSwapThreshold = (_totalSupply * 5) / 10000;
        _maxTaxSwap = (_totalSupply * 100) / 10000;

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

        _mint(_msgSender(), _totalSupply);
    }

    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 setFeeReceiver(address payable taxWallet1) external onlyOwner {
        _taxWallet = taxWallet1;

        emit FeeReceiverUpdated(taxWallet1);
    }

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

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

    function setTaxSwapValues(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _taxSwapThreshold = (totalSupply() * taxSwapThreshold) / 10000;
        _maxTaxSwap = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

    function removeLimits() external onlyOwner {
        _maxTxAmount = totalSupply();
        _maxWalletSize = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxWalletAmountUpdated(totalSupply());
    }

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

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

    function excludeFromFee(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 (
            _buyTax,
            _sellTax,
            _maxTxAmount,
            _maxWalletSize,
            _taxSwapThreshold,
            _maxTaxSwap
        );
    }

    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) {
            taxAmount = amount.mul(_buyTax).div(100);

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

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

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

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

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _taxSwapThreshold &&
                _buyCount > _preventSwapBefore &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance, _maxTaxSwap));
                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 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":"_buyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletSize","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":"_taxSwapThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_maxTaxSwap","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":"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":"excludeFromFee","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":"address payable","name":"taxWallet1","type":"address"}],"name":"setFeeReceiver","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":"newValue","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setTaxSwapValues","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":"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"}]

60806040526023600a556023600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055503480156200005b57600080fd5b506040518060400160405280600581526020017f48796472610000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f48594452410000000000000000000000000000000000000000000000000000008152508160039081620000d991906200087f565b508060049081620000eb91906200087f565b5050506200010e620001026200038260201b60201c565b6200038a60201b60201c565b6000620001206200045060201b60201c565b600a6200012e919062000af6565b633b9aca006200013f919062000b47565b90506103e8600a8262000153919062000b47565b6200015f919062000bc1565b600e819055506103e8600a8262000177919062000b47565b62000183919062000bc1565b600f819055506127106005826200019b919062000b47565b620001a7919062000bc1565b601081905550612710606482620001bf919062000b47565b620001cb919062000bc1565b601181905550620001e16200038260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620002376200045960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200037b6200036e6200038260201b60201c565b826200048360201b60201c565b5062000ce5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ec9062000c5a565b60405180910390fd5b6200050960008383620005fb60201b60201c565b80600260008282546200051d919062000c7c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000574919062000c7c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005db919062000cc8565b60405180910390a3620005f7600083836200060060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068757607f821691505b6020821081036200069d576200069c6200063f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007077fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006c8565b620007138683620006c8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007606200075a62000754846200072b565b62000735565b6200072b565b9050919050565b6000819050919050565b6200077c836200073f565b620007946200078b8262000767565b848454620006d5565b825550505050565b600090565b620007ab6200079c565b620007b881848462000771565b505050565b5b81811015620007e057620007d4600082620007a1565b600181019050620007be565b5050565b601f8211156200082f57620007f981620006a3565b6200080484620006b8565b8101602085101562000814578190505b6200082c6200082385620006b8565b830182620007bd565b50505b505050565b600082821c905092915050565b6000620008546000198460080262000834565b1980831691505092915050565b60006200086f838362000841565b9150826002028217905092915050565b6200088a8262000605565b67ffffffffffffffff811115620008a657620008a562000610565b5b620008b282546200066e565b620008bf828285620007e4565b600060209050601f831160018114620008f75760008415620008e2578287015190505b620008ee858262000861565b8655506200095e565b601f1984166200090786620006a3565b60005b8281101562000931578489015182556001820191506020850194506020810190506200090a565b868310156200095157848901516200094d601f89168262000841565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009f457808604811115620009cc57620009cb62000966565b5b6001851615620009dc5780820291505b8081029050620009ec8562000995565b9450620009ac565b94509492505050565b60008262000a0f576001905062000ae2565b8162000a1f576000905062000ae2565b816001811462000a38576002811462000a435762000a79565b600191505062000ae2565b60ff84111562000a585762000a5762000966565b5b8360020a91508482111562000a725762000a7162000966565b5b5062000ae2565b5060208310610133831016604e8410600b841016171562000ab35782820a90508381111562000aad5762000aac62000966565b5b62000ae2565b62000ac28484846001620009a2565b9250905081840481111562000adc5762000adb62000966565b5b81810290505b9392505050565b600060ff82169050919050565b600062000b03826200072b565b915062000b108362000ae9565b925062000b3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009fd565b905092915050565b600062000b54826200072b565b915062000b61836200072b565b925082820262000b71816200072b565b9150828204841483151762000b8b5762000b8a62000966565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000bce826200072b565b915062000bdb836200072b565b92508262000bee5762000bed62000b92565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c42601f8362000bf9565b915062000c4f8262000c0a565b602082019050919050565b6000602082019050818103600083015262000c758162000c33565b9050919050565b600062000c89826200072b565b915062000c96836200072b565b925082820190508082111562000cb15762000cb062000966565b5b92915050565b62000cc2816200072b565b82525050565b600060208201905062000cdf600083018462000cb7565b92915050565b613e6f8062000cf56000396000f3fe60806040526004361061014f5760003560e01c806395d89b41116100b6578063df8408fe1161006f578063df8408fe14610492578063ea1644d5146104bb578063ec28438a146104e4578063efdcd9741461050d578063f2fde38b14610536578063ff6ee23f1461055f57610156565b806395d89b4114610369578063a457c2d714610394578063a9059cbb146103d1578063ae6014801461040e578063c9567bf91461043e578063dd62ed3e1461045557610156565b8063313ce56711610108578063313ce5671461026b578063395093511461029657806370a08231146102d3578063715018a614610310578063751039fc146103275780638da5cb5b1461033e57610156565b80630614117a1461015b57806306fdde0314610172578063095ea7b31461019d5780630b78f9c0146101da57806318160ddd1461020357806323b872dd1461022e57610156565b3661015657005b600080fd5b34801561016757600080fd5b50610170610588565b005b34801561017e57600080fd5b50610187610683565b6040516101949190612ac1565b60405180910390f35b3480156101a957600080fd5b506101c460048036038101906101bf9190612b7c565b610715565b6040516101d19190612bd7565b60405180910390f35b3480156101e657600080fd5b5061020160048036038101906101fc9190612bf2565b610733565b005b34801561020f57600080fd5b50610218610882565b6040516102259190612c41565b60405180910390f35b34801561023a57600080fd5b5061025560048036038101906102509190612c5c565b61088c565b6040516102629190612bd7565b60405180910390f35b34801561027757600080fd5b50610280610984565b60405161028d9190612ccb565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190612b7c565b61098d565b6040516102ca9190612bd7565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612ce6565b610a39565b6040516103079190612c41565b60405180910390f35b34801561031c57600080fd5b50610325610a81565b005b34801561033357600080fd5b5061033c610b09565b005b34801561034a57600080fd5b50610353610c1f565b6040516103609190612d22565b60405180910390f35b34801561037557600080fd5b5061037e610c49565b60405161038b9190612ac1565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190612b7c565b610cdb565b6040516103c89190612bd7565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190612b7c565b610dc6565b6040516104059190612bd7565b60405180910390f35b34801561041a57600080fd5b50610423610de4565b60405161043596959493929190612d3d565b60405180910390f35b34801561044a57600080fd5b50610453610e13565b005b34801561046157600080fd5b5061047c60048036038101906104779190612d9e565b6113d1565b6040516104899190612c41565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190612e0a565b611458565b005b3480156104c757600080fd5b506104e260048036038101906104dd9190612e4a565b611568565b005b3480156104f057600080fd5b5061050b60048036038101906105069190612e4a565b611688565b005b34801561051957600080fd5b50610534600480360381019061052f9190612eb5565b6117a8565b005b34801561054257600080fd5b5061055d60048036038101906105589190612ce6565b61189f565b005b34801561056b57600080fd5b5061058660048036038101906105819190612bf2565b611996565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060f90612f2e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610680573d6000803e3d6000fd5b50565b60606003805461069290612f7d565b80601f01602080910402602001604051908101604052809291908181526020018280546106be90612f7d565b801561070b5780601f106106e05761010080835404028352916020019161070b565b820191906000526020600020905b8154815290600101906020018083116106ee57829003601f168201915b5050505050905090565b6000610729610722611a9b565b8484611aa3565b6001905092915050565b61073b611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610759610c1f565b73ffffffffffffffffffffffffffffffffffffffff16146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690612ffa565b60405180910390fd5b60328211156107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90613066565b60405180910390fd5b6032811115610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e906130d2565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a182826040516108769291906130f2565b60405180910390a15050565b6000600254905090565b6000610899848484611c6c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108e4611a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061318d565b60405180910390fd5b61097885610970611a9b565b858403611aa3565b60019150509392505050565b60006012905090565b6000610a2f61099a611a9b565b8484600160006109a8611a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a2a91906131dc565b611aa3565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a89611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610aa7610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490612ffa565b60405180910390fd5b610b07600061233f565b565b610b11611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610b2f610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90612ffa565b60405180910390fd5b610b8d610882565b600e81905550610b9b610882565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610bca610882565b604051610bd79190612c41565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610c08610882565b604051610c159190612c41565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c5890612f7d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8490612f7d565b8015610cd15780601f10610ca657610100808354040283529160200191610cd1565b820191906000526020600020905b815481529060010190602001808311610cb457829003601f168201915b5050505050905090565b60008060016000610cea611a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90613282565b60405180910390fd5b610dbb610db2611a9b565b85858403611aa3565b600191505092915050565b6000610dda610dd3611a9b565b8484611c6c565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b610e1b611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610e39610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690612ffa565b60405180910390fd5b601360149054906101000a900460ff1615610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed6906132ee565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f6830601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f63610882565b611aa3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190613323565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190613323565b6040518363ffffffff1660e01b81526004016110c3929190613350565b6020604051808303816000875af11580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190613323565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061118f30610a39565b60008061119a610c1f565b426040518863ffffffff1660e01b81526004016111bc969594939291906133be565b60606040518083038185885af11580156111da573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111ff9190613434565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016112a1929190613487565b6020604051808303816000875af11580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e491906134c5565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611460611a9b565b73ffffffffffffffffffffffffffffffffffffffff1661147e610c1f565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612ffa565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9828260405161155c9291906134f2565b60405180910390a15050565b611570611a9b565b73ffffffffffffffffffffffffffffffffffffffff1661158e610c1f565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612ffa565b60405180910390fd5b6001811015611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f9061358d565b60405180910390fd5b6103e881611634610882565b61163e91906135ad565b611648919061361e565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0018160405161167d9190612c41565b60405180910390a150565b611690611a9b565b73ffffffffffffffffffffffffffffffffffffffff166116ae610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90612ffa565b60405180910390fd5b6001811015611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f9061369b565b60405180910390fd5b6103e881611754610882565b61175e91906135ad565b611768919061361e565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf8160405161179d9190612c41565b60405180910390a150565b6117b0611a9b565b73ffffffffffffffffffffffffffffffffffffffff166117ce610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90612ffa565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516118949190613710565b60405180910390a150565b6118a7611a9b565b73ffffffffffffffffffffffffffffffffffffffff166118c5610c1f565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361198a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119819061379d565b60405180910390fd5b6119938161233f565b50565b61199e611a9b565b73ffffffffffffffffffffffffffffffffffffffff166119bc610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990612ffa565b60405180910390fd5b61271082611a1e610882565b611a2891906135ad565b611a32919061361e565b60108190555061271081611a44610882565b611a4e91906135ad565b611a58919061361e565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051611a8f9291906130f2565b60405180910390a15050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b099061382f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b78906138c1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c5f9190612c41565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290613953565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d41906139e5565b60405180910390fd5b60008111611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490613a77565b60405180910390fd5b6000611d97610c1f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e055750611dd5610c1f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611e1e5750601360159054906101000a900460ff16155b1561230757611e4b6064611e3d600a548561240590919063ffffffff16565b61241b90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611ef85750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f4e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203357600e54821115611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613ae3565b60405180910390fd5b600f5482611fa585610a39565b611faf91906131dc565b1115611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613b4f565b60405180910390fd5b43600360085461200091906131dc565b111561201a5761200f83612431565b1561201957600080fd5b5b600d600081548092919061202d90613b6f565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120db5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213957600f54826120ed85610a39565b6120f791906131dc565b1115612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f90613b4f565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156121c257503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156121f2576121ef60646121e1600b548561240590919063ffffffff16565b61241b90919063ffffffff16565b90505b60006121fd30610a39565b9050601360159054906101000a900460ff161580156122695750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156122815750601360169054906101000a900460ff165b801561228e575060105481115b801561229d5750600c54600d54115b80156122d357504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b15612305576122ec6122e782601154612444565b61245d565b60004790506000811115612303576123026126ff565b5b505b505b600081111561231c5761231b843083612792565b5b61233984846123348486612a1190919063ffffffff16565b612792565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361241391906135ad565b905092915050565b60008183612429919061361e565b905092915050565b600080823b905060008111915050919050565b60008183116124535782612455565b815b905092915050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156124be576124bd613bb7565b5b6040519080825280602002602001820160405280156124ec5781602001602082028036833780820191505090505b509050308160008151811061250457612503613be6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf9190613323565b816001815181106125e3576125e2613be6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061264a30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611aa3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126ae959493929190613cd3565b600060405180830381600087803b1580156126c857600080fd5b505af11580156126dc573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161274790613d5e565b60006040518083038185875af1925050503d8060008114612784576040519150601f19603f3d011682016040523d82523d6000602084013e612789565b606091505b50508091505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f890613953565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612867906139e5565b60405180910390fd5b61287b838383612a27565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f890613de5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461299491906131dc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129f89190612c41565b60405180910390a3612a0b848484612a2c565b50505050565b60008183612a1f9190613e05565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a6b578082015181840152602081019050612a50565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a9382612a31565b612a9d8185612a3c565b9350612aad818560208601612a4d565b612ab681612a77565b840191505092915050565b60006020820190508181036000830152612adb8184612a88565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b1382612ae8565b9050919050565b612b2381612b08565b8114612b2e57600080fd5b50565b600081359050612b4081612b1a565b92915050565b6000819050919050565b612b5981612b46565b8114612b6457600080fd5b50565b600081359050612b7681612b50565b92915050565b60008060408385031215612b9357612b92612ae3565b5b6000612ba185828601612b31565b9250506020612bb285828601612b67565b9150509250929050565b60008115159050919050565b612bd181612bbc565b82525050565b6000602082019050612bec6000830184612bc8565b92915050565b60008060408385031215612c0957612c08612ae3565b5b6000612c1785828601612b67565b9250506020612c2885828601612b67565b9150509250929050565b612c3b81612b46565b82525050565b6000602082019050612c566000830184612c32565b92915050565b600080600060608486031215612c7557612c74612ae3565b5b6000612c8386828701612b31565b9350506020612c9486828701612b31565b9250506040612ca586828701612b67565b9150509250925092565b600060ff82169050919050565b612cc581612caf565b82525050565b6000602082019050612ce06000830184612cbc565b92915050565b600060208284031215612cfc57612cfb612ae3565b5b6000612d0a84828501612b31565b91505092915050565b612d1c81612b08565b82525050565b6000602082019050612d376000830184612d13565b92915050565b600060c082019050612d526000830189612c32565b612d5f6020830188612c32565b612d6c6040830187612c32565b612d796060830186612c32565b612d866080830185612c32565b612d9360a0830184612c32565b979650505050505050565b60008060408385031215612db557612db4612ae3565b5b6000612dc385828601612b31565b9250506020612dd485828601612b31565b9150509250929050565b612de781612bbc565b8114612df257600080fd5b50565b600081359050612e0481612dde565b92915050565b60008060408385031215612e2157612e20612ae3565b5b6000612e2f85828601612b31565b9250506020612e4085828601612df5565b9150509250929050565b600060208284031215612e6057612e5f612ae3565b5b6000612e6e84828501612b67565b91505092915050565b6000612e8282612ae8565b9050919050565b612e9281612e77565b8114612e9d57600080fd5b50565b600081359050612eaf81612e89565b92915050565b600060208284031215612ecb57612eca612ae3565b5b6000612ed984828501612ea0565b91505092915050565b7f4f6e6c7920666565207265636569766572207061697220747269676765720000600082015250565b6000612f18601e83612a3c565b9150612f2382612ee2565b602082019050919050565b60006020820190508181036000830152612f4781612f0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f9557607f821691505b602082108103612fa857612fa7612f4e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fe4602083612a3c565b9150612fef82612fae565b602082019050919050565b6000602082019050818103600083015261301381612fd7565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613050601583612a3c565b915061305b8261301a565b602082019050919050565b6000602082019050818103600083015261307f81613043565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006130bc601683612a3c565b91506130c782613086565b602082019050919050565b600060208201905081810360008301526130eb816130af565b9050919050565b60006040820190506131076000830185612c32565b6131146020830184612c32565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613177602883612a3c565b91506131828261311b565b604082019050919050565b600060208201905081810360008301526131a68161316a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131e782612b46565b91506131f283612b46565b925082820190508082111561320a576132096131ad565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061326c602583612a3c565b915061327782613210565b604082019050919050565b6000602082019050818103600083015261329b8161325f565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006132d8601783612a3c565b91506132e3826132a2565b602082019050919050565b60006020820190508181036000830152613307816132cb565b9050919050565b60008151905061331d81612b1a565b92915050565b60006020828403121561333957613338612ae3565b5b60006133478482850161330e565b91505092915050565b60006040820190506133656000830185612d13565b6133726020830184612d13565b9392505050565b6000819050919050565b6000819050919050565b60006133a86133a361339e84613379565b613383565b612b46565b9050919050565b6133b88161338d565b82525050565b600060c0820190506133d36000830189612d13565b6133e06020830188612c32565b6133ed60408301876133af565b6133fa60608301866133af565b6134076080830185612d13565b61341460a0830184612c32565b979650505050505050565b60008151905061342e81612b50565b92915050565b60008060006060848603121561344d5761344c612ae3565b5b600061345b8682870161341f565b935050602061346c8682870161341f565b925050604061347d8682870161341f565b9150509250925092565b600060408201905061349c6000830185612d13565b6134a96020830184612c32565b9392505050565b6000815190506134bf81612dde565b92915050565b6000602082840312156134db576134da612ae3565b5b60006134e9848285016134b0565b91505092915050565b60006040820190506135076000830185612d13565b6135146020830184612bc8565b9392505050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613577602283612a3c565b91506135828261351b565b604082019050919050565b600060208201905081810360008301526135a68161356a565b9050919050565b60006135b882612b46565b91506135c383612b46565b92508282026135d181612b46565b915082820484148315176135e8576135e76131ad565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061362982612b46565b915061363483612b46565b925082613644576136436135ef565b5b828204905092915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613685601e83612a3c565b91506136908261364f565b602082019050919050565b600060208201905081810360008301526136b481613678565b9050919050565b60006136d66136d16136cc84612ae8565b613383565b612ae8565b9050919050565b60006136e8826136bb565b9050919050565b60006136fa826136dd565b9050919050565b61370a816136ef565b82525050565b60006020820190506137256000830184613701565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613787602683612a3c565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613819602483612a3c565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ab602283612a3c565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061393d602583612a3c565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006139cf602383612a3c565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613a61602983612a3c565b9150613a6c82613a05565b604082019050919050565b60006020820190508181036000830152613a9081613a54565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000613acd601983612a3c565b9150613ad882613a97565b602082019050919050565b60006020820190508181036000830152613afc81613ac0565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613b39601a83612a3c565b9150613b4482613b03565b602082019050919050565b60006020820190508181036000830152613b6881613b2c565b9050919050565b6000613b7a82612b46565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bac57613bab6131ad565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c4a81612b08565b82525050565b6000613c5c8383613c41565b60208301905092915050565b6000602082019050919050565b6000613c8082613c15565b613c8a8185613c20565b9350613c9583613c31565b8060005b83811015613cc6578151613cad8882613c50565b9750613cb883613c68565b925050600181019050613c99565b5085935050505092915050565b600060a082019050613ce86000830188612c32565b613cf560208301876133af565b8181036040830152613d078186613c75565b9050613d166060830185612d13565b613d236080830184612c32565b9695505050505050565b600081905092915050565b50565b6000613d48600083613d2d565b9150613d5382613d38565b600082019050919050565b6000613d6982613d3b565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dcf602683612a3c565b9150613dda82613d73565b604082019050919050565b60006020820190508181036000830152613dfe81613dc2565b9050919050565b6000613e1082612b46565b9150613e1b83612b46565b9250828203905081811115613e3357613e326131ad565b5b9291505056fea264697066735822122060452dd6114b87ead979296263e1d69f89b8ef8ac684038c5702650187fbb9dc64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061014f5760003560e01c806395d89b41116100b6578063df8408fe1161006f578063df8408fe14610492578063ea1644d5146104bb578063ec28438a146104e4578063efdcd9741461050d578063f2fde38b14610536578063ff6ee23f1461055f57610156565b806395d89b4114610369578063a457c2d714610394578063a9059cbb146103d1578063ae6014801461040e578063c9567bf91461043e578063dd62ed3e1461045557610156565b8063313ce56711610108578063313ce5671461026b578063395093511461029657806370a08231146102d3578063715018a614610310578063751039fc146103275780638da5cb5b1461033e57610156565b80630614117a1461015b57806306fdde0314610172578063095ea7b31461019d5780630b78f9c0146101da57806318160ddd1461020357806323b872dd1461022e57610156565b3661015657005b600080fd5b34801561016757600080fd5b50610170610588565b005b34801561017e57600080fd5b50610187610683565b6040516101949190612ac1565b60405180910390f35b3480156101a957600080fd5b506101c460048036038101906101bf9190612b7c565b610715565b6040516101d19190612bd7565b60405180910390f35b3480156101e657600080fd5b5061020160048036038101906101fc9190612bf2565b610733565b005b34801561020f57600080fd5b50610218610882565b6040516102259190612c41565b60405180910390f35b34801561023a57600080fd5b5061025560048036038101906102509190612c5c565b61088c565b6040516102629190612bd7565b60405180910390f35b34801561027757600080fd5b50610280610984565b60405161028d9190612ccb565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190612b7c565b61098d565b6040516102ca9190612bd7565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612ce6565b610a39565b6040516103079190612c41565b60405180910390f35b34801561031c57600080fd5b50610325610a81565b005b34801561033357600080fd5b5061033c610b09565b005b34801561034a57600080fd5b50610353610c1f565b6040516103609190612d22565b60405180910390f35b34801561037557600080fd5b5061037e610c49565b60405161038b9190612ac1565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190612b7c565b610cdb565b6040516103c89190612bd7565b60405180910390f35b3480156103dd57600080fd5b506103f860048036038101906103f39190612b7c565b610dc6565b6040516104059190612bd7565b60405180910390f35b34801561041a57600080fd5b50610423610de4565b60405161043596959493929190612d3d565b60405180910390f35b34801561044a57600080fd5b50610453610e13565b005b34801561046157600080fd5b5061047c60048036038101906104779190612d9e565b6113d1565b6040516104899190612c41565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190612e0a565b611458565b005b3480156104c757600080fd5b506104e260048036038101906104dd9190612e4a565b611568565b005b3480156104f057600080fd5b5061050b60048036038101906105069190612e4a565b611688565b005b34801561051957600080fd5b50610534600480360381019061052f9190612eb5565b6117a8565b005b34801561054257600080fd5b5061055d60048036038101906105589190612ce6565b61189f565b005b34801561056b57600080fd5b5061058660048036038101906105819190612bf2565b611996565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060f90612f2e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610680573d6000803e3d6000fd5b50565b60606003805461069290612f7d565b80601f01602080910402602001604051908101604052809291908181526020018280546106be90612f7d565b801561070b5780601f106106e05761010080835404028352916020019161070b565b820191906000526020600020905b8154815290600101906020018083116106ee57829003601f168201915b5050505050905090565b6000610729610722611a9b565b8484611aa3565b6001905092915050565b61073b611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610759610c1f565b73ffffffffffffffffffffffffffffffffffffffff16146107af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a690612ffa565b60405180910390fd5b60328211156107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90613066565b60405180910390fd5b6032811115610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e906130d2565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a182826040516108769291906130f2565b60405180910390a15050565b6000600254905090565b6000610899848484611c6c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108e4611a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061318d565b60405180910390fd5b61097885610970611a9b565b858403611aa3565b60019150509392505050565b60006012905090565b6000610a2f61099a611a9b565b8484600160006109a8611a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a2a91906131dc565b611aa3565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a89611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610aa7610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614610afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af490612ffa565b60405180910390fd5b610b07600061233f565b565b610b11611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610b2f610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90612ffa565b60405180910390fd5b610b8d610882565b600e81905550610b9b610882565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610bca610882565b604051610bd79190612c41565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610c08610882565b604051610c159190612c41565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c5890612f7d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8490612f7d565b8015610cd15780601f10610ca657610100808354040283529160200191610cd1565b820191906000526020600020905b815481529060010190602001808311610cb457829003601f168201915b5050505050905090565b60008060016000610cea611a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90613282565b60405180910390fd5b610dbb610db2611a9b565b85858403611aa3565b600191505092915050565b6000610dda610dd3611a9b565b8484611c6c565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b610e1b611a9b565b73ffffffffffffffffffffffffffffffffffffffff16610e39610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690612ffa565b60405180910390fd5b601360149054906101000a900460ff1615610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed6906132ee565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f6830601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f63610882565b611aa3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190613323565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a69190613323565b6040518363ffffffff1660e01b81526004016110c3929190613350565b6020604051808303816000875af11580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190613323565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061118f30610a39565b60008061119a610c1f565b426040518863ffffffff1660e01b81526004016111bc969594939291906133be565b60606040518083038185885af11580156111da573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111ff9190613434565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016112a1929190613487565b6020604051808303816000875af11580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e491906134c5565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611460611a9b565b73ffffffffffffffffffffffffffffffffffffffff1661147e610c1f565b73ffffffffffffffffffffffffffffffffffffffff16146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90612ffa565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9828260405161155c9291906134f2565b60405180910390a15050565b611570611a9b565b73ffffffffffffffffffffffffffffffffffffffff1661158e610c1f565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612ffa565b60405180910390fd5b6001811015611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f9061358d565b60405180910390fd5b6103e881611634610882565b61163e91906135ad565b611648919061361e565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0018160405161167d9190612c41565b60405180910390a150565b611690611a9b565b73ffffffffffffffffffffffffffffffffffffffff166116ae610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90612ffa565b60405180910390fd5b6001811015611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f9061369b565b60405180910390fd5b6103e881611754610882565b61175e91906135ad565b611768919061361e565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf8160405161179d9190612c41565b60405180910390a150565b6117b0611a9b565b73ffffffffffffffffffffffffffffffffffffffff166117ce610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90612ffa565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516118949190613710565b60405180910390a150565b6118a7611a9b565b73ffffffffffffffffffffffffffffffffffffffff166118c5610c1f565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361198a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119819061379d565b60405180910390fd5b6119938161233f565b50565b61199e611a9b565b73ffffffffffffffffffffffffffffffffffffffff166119bc610c1f565b73ffffffffffffffffffffffffffffffffffffffff1614611a12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0990612ffa565b60405180910390fd5b61271082611a1e610882565b611a2891906135ad565b611a32919061361e565b60108190555061271081611a44610882565b611a4e91906135ad565b611a58919061361e565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051611a8f9291906130f2565b60405180910390a15050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b099061382f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b78906138c1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c5f9190612c41565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290613953565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d41906139e5565b60405180910390fd5b60008111611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8490613a77565b60405180910390fd5b6000611d97610c1f565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e055750611dd5610c1f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611e1e5750601360159054906101000a900460ff16155b1561230757611e4b6064611e3d600a548561240590919063ffffffff16565b61241b90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611ef85750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f4e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561203357600e54821115611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613ae3565b60405180910390fd5b600f5482611fa585610a39565b611faf91906131dc565b1115611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790613b4f565b60405180910390fd5b43600360085461200091906131dc565b111561201a5761200f83612431565b1561201957600080fd5b5b600d600081548092919061202d90613b6f565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120db5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561213957600f54826120ed85610a39565b6120f791906131dc565b1115612138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212f90613b4f565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156121c257503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156121f2576121ef60646121e1600b548561240590919063ffffffff16565b61241b90919063ffffffff16565b90505b60006121fd30610a39565b9050601360159054906101000a900460ff161580156122695750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156122815750601360169054906101000a900460ff165b801561228e575060105481115b801561229d5750600c54600d54115b80156122d357504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b15612305576122ec6122e782601154612444565b61245d565b60004790506000811115612303576123026126ff565b5b505b505b600081111561231c5761231b843083612792565b5b61233984846123348486612a1190919063ffffffff16565b612792565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361241391906135ad565b905092915050565b60008183612429919061361e565b905092915050565b600080823b905060008111915050919050565b60008183116124535782612455565b815b905092915050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156124be576124bd613bb7565b5b6040519080825280602002602001820160405280156124ec5781602001602082028036833780820191505090505b509050308160008151811061250457612503613be6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf9190613323565b816001815181106125e3576125e2613be6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061264a30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611aa3565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126ae959493929190613cd3565b600060405180830381600087803b1580156126c857600080fd5b505af11580156126dc573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161274790613d5e565b60006040518083038185875af1925050503d8060008114612784576040519150601f19603f3d011682016040523d82523d6000602084013e612789565b606091505b50508091505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f890613953565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612867906139e5565b60405180910390fd5b61287b838383612a27565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f890613de5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461299491906131dc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129f89190612c41565b60405180910390a3612a0b848484612a2c565b50505050565b60008183612a1f9190613e05565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a6b578082015181840152602081019050612a50565b60008484015250505050565b6000601f19601f8301169050919050565b6000612a9382612a31565b612a9d8185612a3c565b9350612aad818560208601612a4d565b612ab681612a77565b840191505092915050565b60006020820190508181036000830152612adb8184612a88565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b1382612ae8565b9050919050565b612b2381612b08565b8114612b2e57600080fd5b50565b600081359050612b4081612b1a565b92915050565b6000819050919050565b612b5981612b46565b8114612b6457600080fd5b50565b600081359050612b7681612b50565b92915050565b60008060408385031215612b9357612b92612ae3565b5b6000612ba185828601612b31565b9250506020612bb285828601612b67565b9150509250929050565b60008115159050919050565b612bd181612bbc565b82525050565b6000602082019050612bec6000830184612bc8565b92915050565b60008060408385031215612c0957612c08612ae3565b5b6000612c1785828601612b67565b9250506020612c2885828601612b67565b9150509250929050565b612c3b81612b46565b82525050565b6000602082019050612c566000830184612c32565b92915050565b600080600060608486031215612c7557612c74612ae3565b5b6000612c8386828701612b31565b9350506020612c9486828701612b31565b9250506040612ca586828701612b67565b9150509250925092565b600060ff82169050919050565b612cc581612caf565b82525050565b6000602082019050612ce06000830184612cbc565b92915050565b600060208284031215612cfc57612cfb612ae3565b5b6000612d0a84828501612b31565b91505092915050565b612d1c81612b08565b82525050565b6000602082019050612d376000830184612d13565b92915050565b600060c082019050612d526000830189612c32565b612d5f6020830188612c32565b612d6c6040830187612c32565b612d796060830186612c32565b612d866080830185612c32565b612d9360a0830184612c32565b979650505050505050565b60008060408385031215612db557612db4612ae3565b5b6000612dc385828601612b31565b9250506020612dd485828601612b31565b9150509250929050565b612de781612bbc565b8114612df257600080fd5b50565b600081359050612e0481612dde565b92915050565b60008060408385031215612e2157612e20612ae3565b5b6000612e2f85828601612b31565b9250506020612e4085828601612df5565b9150509250929050565b600060208284031215612e6057612e5f612ae3565b5b6000612e6e84828501612b67565b91505092915050565b6000612e8282612ae8565b9050919050565b612e9281612e77565b8114612e9d57600080fd5b50565b600081359050612eaf81612e89565b92915050565b600060208284031215612ecb57612eca612ae3565b5b6000612ed984828501612ea0565b91505092915050565b7f4f6e6c7920666565207265636569766572207061697220747269676765720000600082015250565b6000612f18601e83612a3c565b9150612f2382612ee2565b602082019050919050565b60006020820190508181036000830152612f4781612f0b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f9557607f821691505b602082108103612fa857612fa7612f4e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fe4602083612a3c565b9150612fef82612fae565b602082019050919050565b6000602082019050818103600083015261301381612fd7565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613050601583612a3c565b915061305b8261301a565b602082019050919050565b6000602082019050818103600083015261307f81613043565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006130bc601683612a3c565b91506130c782613086565b602082019050919050565b600060208201905081810360008301526130eb816130af565b9050919050565b60006040820190506131076000830185612c32565b6131146020830184612c32565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613177602883612a3c565b91506131828261311b565b604082019050919050565b600060208201905081810360008301526131a68161316a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131e782612b46565b91506131f283612b46565b925082820190508082111561320a576132096131ad565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061326c602583612a3c565b915061327782613210565b604082019050919050565b6000602082019050818103600083015261329b8161325f565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006132d8601783612a3c565b91506132e3826132a2565b602082019050919050565b60006020820190508181036000830152613307816132cb565b9050919050565b60008151905061331d81612b1a565b92915050565b60006020828403121561333957613338612ae3565b5b60006133478482850161330e565b91505092915050565b60006040820190506133656000830185612d13565b6133726020830184612d13565b9392505050565b6000819050919050565b6000819050919050565b60006133a86133a361339e84613379565b613383565b612b46565b9050919050565b6133b88161338d565b82525050565b600060c0820190506133d36000830189612d13565b6133e06020830188612c32565b6133ed60408301876133af565b6133fa60608301866133af565b6134076080830185612d13565b61341460a0830184612c32565b979650505050505050565b60008151905061342e81612b50565b92915050565b60008060006060848603121561344d5761344c612ae3565b5b600061345b8682870161341f565b935050602061346c8682870161341f565b925050604061347d8682870161341f565b9150509250925092565b600060408201905061349c6000830185612d13565b6134a96020830184612c32565b9392505050565b6000815190506134bf81612dde565b92915050565b6000602082840312156134db576134da612ae3565b5b60006134e9848285016134b0565b91505092915050565b60006040820190506135076000830185612d13565b6135146020830184612bc8565b9392505050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613577602283612a3c565b91506135828261351b565b604082019050919050565b600060208201905081810360008301526135a68161356a565b9050919050565b60006135b882612b46565b91506135c383612b46565b92508282026135d181612b46565b915082820484148315176135e8576135e76131ad565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061362982612b46565b915061363483612b46565b925082613644576136436135ef565b5b828204905092915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613685601e83612a3c565b91506136908261364f565b602082019050919050565b600060208201905081810360008301526136b481613678565b9050919050565b60006136d66136d16136cc84612ae8565b613383565b612ae8565b9050919050565b60006136e8826136bb565b9050919050565b60006136fa826136dd565b9050919050565b61370a816136ef565b82525050565b60006020820190506137256000830184613701565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613787602683612a3c565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613819602483612a3c565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006138ab602283612a3c565b91506138b68261384f565b604082019050919050565b600060208201905081810360008301526138da8161389e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061393d602583612a3c565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006139cf602383612a3c565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613a61602983612a3c565b9150613a6c82613a05565b604082019050919050565b60006020820190508181036000830152613a9081613a54565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e00000000000000600082015250565b6000613acd601983612a3c565b9150613ad882613a97565b602082019050919050565b60006020820190508181036000830152613afc81613ac0565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613b39601a83612a3c565b9150613b4482613b03565b602082019050919050565b60006020820190508181036000830152613b6881613b2c565b9050919050565b6000613b7a82612b46565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bac57613bab6131ad565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c4a81612b08565b82525050565b6000613c5c8383613c41565b60208301905092915050565b6000602082019050919050565b6000613c8082613c15565b613c8a8185613c20565b9350613c9583613c31565b8060005b83811015613cc6578151613cad8882613c50565b9750613cb883613c68565b925050600181019050613c99565b5085935050505092915050565b600060a082019050613ce86000830188612c32565b613cf560208301876133af565b8181036040830152613d078186613c75565b9050613d166060830185612d13565b613d236080830184612c32565b9695505050505050565b600081905092915050565b50565b6000613d48600083613d2d565b9150613d5382613d38565b600082019050919050565b6000613d6982613d3b565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613dcf602683612a3c565b9150613dda82613d73565b604082019050919050565b60006020820190508181036000830152613dfe81613dc2565b9050919050565b6000613e1082612b46565b9150613e1b83612b46565b9250828203905081811115613e3357613e326131ad565b5b9291505056fea264697066735822122060452dd6114b87ead979296263e1d69f89b8ef8ac684038c5702650187fbb9dc64736f6c63430008130033

Deployed Bytecode Sourcemap

25313:8538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29688:170;;;;;;;;;;;;;:::i;:::-;;10911:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13144:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29387:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12031:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13816:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11873:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14750:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12202:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22250:103;;;;;;;;;;;;;:::i;:::-;;29146:233;;;;;;;;;;;;;:::i;:::-;;21599:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11130:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15539:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12558:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30050:483;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;27150:986;;;;;;;;;;;;;:::i;:::-;;12821:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29866;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28560:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28313:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28144:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22508:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28819:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29688:170;29752:10;;;;;;;;;;;29738:24;;:10;:24;;;29730:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29808:10;;;;;;;;;;;:19;;:42;29828:21;29808:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29688:170::o;10911:100::-;10965:13;10998:5;10991:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10911:100;:::o;13144:194::-;13252:4;13269:39;13278:12;:10;:12::i;:::-;13292:7;13301:6;13269:8;:39::i;:::-;13326:4;13319:11;;13144:194;;;;:::o;29387:293::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29485:2:::1;29475:6;:12;;29467:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29543:2;29532:7;:13;;29524:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29593:6;29583:7;:16;;;;29621:7;29610:8;:18;;;;29644:28;29656:6;29664:7;29644:28;;;;;;;:::i;:::-;;;;;;;;29387:293:::0;;:::o;12031:108::-;12092:7;12119:12;;12112:19;;12031:108;:::o;13816:529::-;13956:4;13973:36;13983:6;13991:9;14002:6;13973:9;:36::i;:::-;14022:24;14049:11;:19;14061:6;14049:19;;;;;;;;;;;;;;;:33;14069:12;:10;:12::i;:::-;14049:33;;;;;;;;;;;;;;;;14022:60;;14135:6;14115:16;:26;;14093:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14245:57;14254:6;14262:12;:10;:12::i;:::-;14295:6;14276:16;:25;14245:8;:57::i;:::-;14333:4;14326:11;;;13816:529;;;;;:::o;11873:93::-;11931:5;11956:2;11949:9;;11873:93;:::o;14750:290::-;14863:4;14880:130;14903:12;:10;:12::i;:::-;14930:7;14989:10;14952:11;:25;14964:12;:10;:12::i;:::-;14952:25;;;;;;;;;;;;;;;:34;14978:7;14952:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14880:8;:130::i;:::-;15028:4;15021:11;;14750:290;;;;:::o;12202:143::-;12292:7;12319:9;:18;12329:7;12319:18;;;;;;;;;;;;;;;;12312:25;;12202:143;;;:::o;22250:103::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22315:30:::1;22342:1;22315:18;:30::i;:::-;22250:103::o:0;29146:233::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29215:13:::1;:11;:13::i;:::-;29200:12;:28;;;;29256:13;:11;:13::i;:::-;29239:14;:30;;;;29285:33;29304:13;:11;:13::i;:::-;29285:33;;;;;;:::i;:::-;;;;;;;;29334:37;29357:13;:11;:13::i;:::-;29334:37;;;;;;:::i;:::-;;;;;;;;29146:233::o:0;21599:87::-;21645:7;21672:6;;;;;;;;;;;21665:13;;21599:87;:::o;11130:104::-;11186:13;11219:7;11212:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11130:104;:::o;15539:475::-;15657:4;15674:24;15701:11;:25;15713:12;:10;:12::i;:::-;15701:25;;;;;;;;;;;;;;;:34;15727:7;15701:34;;;;;;;;;;;;;;;;15674:61;;15788:15;15768:16;:35;;15746:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15904:67;15913:12;:10;:12::i;:::-;15927:7;15955:15;15936:16;:34;15904:8;:67::i;:::-;16002:4;15995:11;;;15539:475;;;;:::o;12558:200::-;12669:4;12686:42;12696:12;:10;:12::i;:::-;12710:9;12721:6;12686:9;:42::i;:::-;12746:4;12739:11;;12558:200;;;;:::o;30050:483::-;30134:14;30163:15;30193:19;30227:21;30263:24;30302:18;30370:7;;30392:8;;30415:12;;30442:14;;30471:17;;30503:11;;30348:177;;;;;;;;;;;;30050:483;;;;;;:::o;27150:986::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27212:11:::1;;;;;;;;;;;27211:12;27203:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27305:42;27262:15;;:96;;;;;;;;;;;;;;;;;;27369:64;27386:4;27401:15;;;;;;;;;;;27419:13;:11;:13::i;:::-;27369:8;:64::i;:::-;27472:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27460:49;;;27532:4;27552:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27460:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27444:13;;:141;;;;;;;;;;;;;;;;;;27596:15;;;;;;;;;;;:31;;;27635:21;27680:4;27700:24;27718:4;27700:9;:24::i;:::-;27739:1;27755::::0;27771:7:::1;:5;:7::i;:::-;27793:15;27596:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27837:13;;;;;;;;;;;27830:29;;;27868:15;;;;;;;;;;;27886:14;27830:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27926:4;27912:11;;:18;;;;;;;;;;;;;;;;;;27955:4;27941:11;;:18;;;;;;;;;;;;;;;;;;27983:12;27970:10;:25;;;;28031:12;28006:15;;:38;;;;;;;;;;;;;;;;;;28091:4;28055:18;:33;28082:4;28055:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28113:15;;;;;;;;;;27150:986::o:0;12821:176::-;12935:7;12962:11;:18;12974:5;12962:18;;;;;;;;;;;;;;;:27;12981:7;12962:27;;;;;;;;;;;;;;;;12955:34;;12821:176;;;;:::o;29866:::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29980:6:::1;29950:18;:27;29969:7;29950:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30002:32;30018:7;30027:6;30002:32;;;;;;;:::i;:::-;;;;;;;;29866:176:::0;;:::o;28560:251::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28654:1:::1;28642:8;:13;;28634:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28751:4;28739:8;28723:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28722:33;;;;:::i;:::-;28705:14;:50;;;;28771:32;28794:8;28771:32;;;;;;:::i;:::-;;;;;;;;28560:251:::0;:::o;28313:239::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28405:1:::1;28393:8;:13;;28385:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28496:4;28484:8;28468:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28467:33;;;;:::i;:::-;28452:12;:48;;;;28516:28;28535:8;28516:28;;;;;;:::i;:::-;;;;;;;;28313:239:::0;:::o;28144:161::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28239:10:::1;28226;;:23;;;;;;;;;;;;;;;;;;28267:30;28286:10;28267:30;;;;;;:::i;:::-;;;;;;;;28144:161:::0;:::o;22508:238::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22631:1:::1;22611:22;;:8;:22;;::::0;22589:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22710:28;22729:8;22710:18;:28::i;:::-;22508:238:::0;:::o;28819:319::-;21830:12;:10;:12::i;:::-;21819:23;;:7;:5;:7::i;:::-;:23;;;21811:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29003:5:::1;28983:16;28967:13;:11;:13::i;:::-;:32;;;;:::i;:::-;28966:42;;;;:::i;:::-;28946:17;:62;;;;29064:5;29050:10;29034:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29033:36;;;;:::i;:::-;29019:11;:50;;;;29085:45;29101:16;29119:10;29085:45;;;;;;;:::i;:::-;;;;;;;;28819:319:::0;;:::o;9917:98::-;9970:7;9997:10;9990:17;;9917:98;:::o;19322:380::-;19475:1;19458:19;;:5;:19;;;19450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19556:1;19537:21;;:7;:21;;;19529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19640:6;19610:11;:18;19622:5;19610:18;;;;;;;;;;;;;;;:27;19629:7;19610:27;;;;;;;;;;;;;;;:36;;;;19678:7;19662:32;;19671:5;19662:32;;;19687:6;19662:32;;;;;;:::i;:::-;;;;;;;;19322:380;;;:::o;30541:2271::-;30689:1;30673:18;;:4;:18;;;30665:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30766:1;30752:16;;:2;:16;;;30744:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30836:1;30827:6;:10;30819:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30894:17;30938:7;:5;:7::i;:::-;30930:15;;:4;:15;;;;:32;;;;;30955:7;:5;:7::i;:::-;30949:13;;:2;:13;;;;30930:32;:43;;;;;30967:6;;;;;;;;;;;30966:7;30930:43;30926:1715;;;31002:28;31026:3;31002:19;31013:7;;31002:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;30990:40;;31077:13;;;;;;;;;;;31069:21;;:4;:21;;;:72;;;;;31125:15;;;;;;;;;;;31111:30;;:2;:30;;;;31069:72;:116;;;;;31163:18;:22;31182:2;31163:22;;;;;;;;;;;;;;;;;;;;;;;;;31162:23;31069:116;31047:560;;;31238:12;;31228:6;:22;;31220:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31355:14;;31345:6;31329:13;31339:2;31329:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;31299:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31481:12;31477:1;31464:10;;:14;;;;:::i;:::-;:29;31460:102;;;31527:14;31538:2;31527:10;:14::i;:::-;31526:15;31518:24;;;;;;31460:102;31580:9;;:11;;;;;;;;;:::i;:::-;;;;;;31047:560;31633:13;;;;;;;;;;;31627:19;;:2;:19;;;;:46;;;;;31651:18;:22;31670:2;31651:22;;;;;;;;;;;;;;;;;;;;;;;;;31650:23;31627:46;31623:227;;;31750:14;;31740:6;31724:13;31734:2;31724:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;31694:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31623:227;31876:13;;;;;;;;;;;31870:19;;:2;:19;;;:44;;;;;31909:4;31893:21;;:4;:21;;;;31870:44;31866:126;;;31947:29;31972:3;31947:20;31958:8;;31947:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;31935:41;;31866:126;32008:28;32039:24;32057:4;32039:9;:24::i;:::-;32008:55;;32101:6;;;;;;;;;;;32100:7;:47;;;;;32134:13;;;;;;;;;;;32128:19;;:2;:19;;;32100:47;:79;;;;;32168:11;;;;;;;;;;;32100:79;:140;;;;;32223:17;;32200:20;:40;32100:140;:191;;;;;32273:18;;32261:9;;:30;32100:191;:251;;;;;32338:12;32312:39;;:15;;;;;;;;;;;:39;;;;32100:251;32078:552;;;32386:56;32403:38;32407:20;32429:11;;32403:3;:38::i;:::-;32386:16;:56::i;:::-;32461:26;32490:21;32461:50;;32555:1;32534:18;:22;32530:85;;;32581:14;:12;:14::i;:::-;32530:85;32367:263;32078:552;30975:1666;30926:1715;32669:1;32657:9;:13;32653:93;;;32687:47;32703:4;32717;32724:9;32687:15;:47::i;:::-;32653:93;32756:48;32772:4;32778:2;32782:21;32793:9;32782:6;:10;;:21;;;;:::i;:::-;32756:15;:48::i;:::-;30654:2158;30541:2271;;;:::o;22906:191::-;22980:16;22999:6;;;;;;;;;;;22980:25;;23025:8;23016:6;;:17;;;;;;;;;;;;;;;;;;23080:8;23049:40;;23070:8;23049:40;;;;;;;;;;;;22969:128;22906:191;:::o;3276:98::-;3334:7;3365:1;3361;:5;;;;:::i;:::-;3354:12;;3276:98;;;;:::o;3675:::-;3733:7;3764:1;3760;:5;;;;:::i;:::-;3753:12;;3675:98;;;;:::o;32935:195::-;32994:4;33011:12;33078:7;33066:20;33058:28;;33121:1;33114:4;:8;33107:15;;;32935:195;;;:::o;32820:107::-;32877:7;32909:1;32905;:5;32904:15;;32918:1;32904:15;;;32914:1;32904:15;32897:22;;32820:107;;;;:::o;33138:532::-;26484:4;26475:6;;:13;;;;;;;;;;;;;;;;;;33241:12:::1;33216:15;;:38;;;;;;;;;;;;;;;;;;33265:21;33303:1;33289:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33265:40;;33334:4;33316;33321:1;33316:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;33360:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33350:4;33355:1;33350:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;33393:62;33410:4;33425:15;;;;;;;;;;;33443:11;33393:8;:62::i;:::-;33466:15;;;;;;;;;;;:66;;;33547:11;33573:1;33589:4;33616;33636:15;33466:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33205:465;26520:5:::0;26511:6;;:14;;;;;;;;;;;;;;;;;;33138:532;:::o;33678:170::-;33721:12;33766:10;;;;;;;;;;;33758:24;;33790:21;33758:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33744:96;;;;;33710:138;33678:170::o;16504:770::-;16662:1;16644:20;;:6;:20;;;16636:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16746:1;16725:23;;:9;:23;;;16717:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16801:47;16822:6;16830:9;16841:6;16801:20;:47::i;:::-;16861:21;16885:9;:17;16895:6;16885:17;;;;;;;;;;;;;;;;16861:41;;16952:6;16935:13;:23;;16913:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17096:6;17080:13;:22;17060:9;:17;17070:6;17060:17;;;;;;;;;;;;;;;:42;;;;17148:6;17124:9;:20;17134:9;17124:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17189:9;17172:35;;17181:6;17172:35;;;17200:6;17172:35;;;;;;:::i;:::-;;;;;;;;17220:46;17240:6;17248:9;17259:6;17220:19;:46::i;:::-;16625:649;16504:770;;;:::o;2919:98::-;2977:7;3008:1;3004;:5;;;;:::i;:::-;2997:12;;2919:98;;;;:::o;20302:125::-;;;;:::o;21031: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;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:474::-;3514:6;3522;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3446:474;;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:619::-;4355:6;4363;4371;4420:2;4408:9;4399:7;4395:23;4391:32;4388:119;;;4426:79;;:::i;:::-;4388:119;4546:1;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4517:117;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4801:2;4827:53;4872:7;4863:6;4852:9;4848:22;4827:53;:::i;:::-;4817:63;;4772:118;4278:619;;;;;:::o;4903:86::-;4938:7;4978:4;4971:5;4967:16;4956:27;;4903:86;;;:::o;4995:112::-;5078:22;5094:5;5078:22;:::i;:::-;5073:3;5066:35;4995:112;;:::o;5113:214::-;5202:4;5240:2;5229:9;5225:18;5217:26;;5253:67;5317:1;5306:9;5302:17;5293:6;5253:67;:::i;:::-;5113:214;;;;:::o;5333:329::-;5392:6;5441:2;5429:9;5420:7;5416:23;5412:32;5409:119;;;5447:79;;:::i;:::-;5409:119;5567:1;5592:53;5637:7;5628:6;5617:9;5613:22;5592:53;:::i;:::-;5582:63;;5538:117;5333:329;;;;:::o;5668:118::-;5755:24;5773:5;5755:24;:::i;:::-;5750:3;5743:37;5668:118;;:::o;5792:222::-;5885:4;5923:2;5912:9;5908:18;5900:26;;5936:71;6004:1;5993:9;5989:17;5980:6;5936:71;:::i;:::-;5792:222;;;;:::o;6020:775::-;6253:4;6291:3;6280:9;6276:19;6268:27;;6305:71;6373:1;6362:9;6358:17;6349:6;6305:71;:::i;:::-;6386:72;6454:2;6443:9;6439:18;6430:6;6386:72;:::i;:::-;6468;6536:2;6525:9;6521:18;6512:6;6468:72;:::i;:::-;6550;6618:2;6607:9;6603:18;6594:6;6550:72;:::i;:::-;6632:73;6700:3;6689:9;6685:19;6676:6;6632:73;:::i;:::-;6715;6783:3;6772:9;6768:19;6759:6;6715:73;:::i;:::-;6020:775;;;;;;;;;:::o;6801:474::-;6869:6;6877;6926:2;6914:9;6905:7;6901:23;6897:32;6894:119;;;6932:79;;:::i;:::-;6894:119;7052:1;7077:53;7122:7;7113:6;7102:9;7098:22;7077:53;:::i;:::-;7067:63;;7023:117;7179:2;7205:53;7250:7;7241:6;7230:9;7226:22;7205:53;:::i;:::-;7195:63;;7150:118;6801:474;;;;;:::o;7281:116::-;7351:21;7366:5;7351:21;:::i;:::-;7344:5;7341:32;7331:60;;7387:1;7384;7377:12;7331:60;7281:116;:::o;7403:133::-;7446:5;7484:6;7471:20;7462:29;;7500:30;7524:5;7500:30;:::i;:::-;7403:133;;;;:::o;7542:468::-;7607:6;7615;7664:2;7652:9;7643:7;7639:23;7635:32;7632:119;;;7670:79;;:::i;:::-;7632:119;7790:1;7815:53;7860:7;7851:6;7840:9;7836:22;7815:53;:::i;:::-;7805:63;;7761:117;7917:2;7943:50;7985:7;7976:6;7965:9;7961:22;7943:50;:::i;:::-;7933:60;;7888:115;7542:468;;;;;:::o;8016:329::-;8075:6;8124:2;8112:9;8103:7;8099:23;8095:32;8092:119;;;8130:79;;:::i;:::-;8092:119;8250:1;8275:53;8320:7;8311:6;8300:9;8296:22;8275:53;:::i;:::-;8265:63;;8221:117;8016:329;;;;:::o;8351:104::-;8396:7;8425:24;8443:5;8425:24;:::i;:::-;8414:35;;8351:104;;;:::o;8461:138::-;8542:32;8568:5;8542:32;:::i;:::-;8535:5;8532:43;8522:71;;8589:1;8586;8579:12;8522:71;8461:138;:::o;8605:155::-;8659:5;8697:6;8684:20;8675:29;;8713:41;8748:5;8713:41;:::i;:::-;8605:155;;;;:::o;8766:345::-;8833:6;8882:2;8870:9;8861:7;8857:23;8853:32;8850:119;;;8888:79;;:::i;:::-;8850:119;9008:1;9033:61;9086:7;9077:6;9066:9;9062:22;9033:61;:::i;:::-;9023:71;;8979:125;8766:345;;;;:::o;9117:180::-;9257:32;9253:1;9245:6;9241:14;9234:56;9117:180;:::o;9303:366::-;9445:3;9466:67;9530:2;9525:3;9466:67;:::i;:::-;9459:74;;9542:93;9631:3;9542:93;:::i;:::-;9660:2;9655:3;9651:12;9644:19;;9303:366;;;:::o;9675:419::-;9841:4;9879:2;9868:9;9864:18;9856:26;;9928:9;9922:4;9918:20;9914:1;9903:9;9899:17;9892:47;9956:131;10082:4;9956:131;:::i;:::-;9948:139;;9675:419;;;:::o;10100:180::-;10148:77;10145:1;10138:88;10245:4;10242:1;10235:15;10269:4;10266:1;10259:15;10286:320;10330:6;10367:1;10361:4;10357:12;10347:22;;10414:1;10408:4;10404:12;10435:18;10425:81;;10491:4;10483:6;10479:17;10469:27;;10425:81;10553:2;10545:6;10542:14;10522:18;10519:38;10516:84;;10572:18;;:::i;:::-;10516:84;10337:269;10286:320;;;:::o;10612:182::-;10752:34;10748:1;10740:6;10736:14;10729:58;10612:182;:::o;10800:366::-;10942:3;10963:67;11027:2;11022:3;10963:67;:::i;:::-;10956:74;;11039:93;11128:3;11039:93;:::i;:::-;11157:2;11152:3;11148:12;11141:19;;10800:366;;;:::o;11172:419::-;11338:4;11376:2;11365:9;11361:18;11353:26;;11425:9;11419:4;11415:20;11411:1;11400:9;11396:17;11389:47;11453:131;11579:4;11453:131;:::i;:::-;11445:139;;11172:419;;;:::o;11597:171::-;11737:23;11733:1;11725:6;11721:14;11714:47;11597:171;:::o;11774:366::-;11916:3;11937:67;12001:2;11996:3;11937:67;:::i;:::-;11930:74;;12013:93;12102:3;12013:93;:::i;:::-;12131:2;12126:3;12122:12;12115:19;;11774:366;;;:::o;12146:419::-;12312:4;12350:2;12339:9;12335:18;12327:26;;12399:9;12393:4;12389:20;12385:1;12374:9;12370:17;12363:47;12427:131;12553:4;12427:131;:::i;:::-;12419:139;;12146:419;;;:::o;12571:172::-;12711:24;12707:1;12699:6;12695:14;12688:48;12571:172;:::o;12749:366::-;12891:3;12912:67;12976:2;12971:3;12912:67;:::i;:::-;12905:74;;12988:93;13077:3;12988:93;:::i;:::-;13106:2;13101:3;13097:12;13090:19;;12749:366;;;:::o;13121:419::-;13287:4;13325:2;13314:9;13310:18;13302:26;;13374:9;13368:4;13364:20;13360:1;13349:9;13345:17;13338:47;13402:131;13528:4;13402:131;:::i;:::-;13394:139;;13121:419;;;:::o;13546:332::-;13667:4;13705:2;13694:9;13690:18;13682:26;;13718:71;13786:1;13775:9;13771:17;13762:6;13718:71;:::i;:::-;13799:72;13867:2;13856:9;13852:18;13843:6;13799:72;:::i;:::-;13546:332;;;;;:::o;13884:227::-;14024:34;14020:1;14012:6;14008:14;14001:58;14093:10;14088:2;14080:6;14076:15;14069:35;13884:227;:::o;14117:366::-;14259:3;14280:67;14344:2;14339:3;14280:67;:::i;:::-;14273:74;;14356:93;14445:3;14356:93;:::i;:::-;14474:2;14469:3;14465:12;14458:19;;14117:366;;;:::o;14489:419::-;14655:4;14693:2;14682:9;14678:18;14670:26;;14742:9;14736:4;14732:20;14728:1;14717:9;14713:17;14706:47;14770:131;14896:4;14770:131;:::i;:::-;14762:139;;14489:419;;;:::o;14914:180::-;14962:77;14959:1;14952:88;15059:4;15056:1;15049:15;15083:4;15080:1;15073:15;15100:191;15140:3;15159:20;15177:1;15159:20;:::i;:::-;15154:25;;15193:20;15211:1;15193:20;:::i;:::-;15188:25;;15236:1;15233;15229:9;15222:16;;15257:3;15254:1;15251:10;15248:36;;;15264:18;;:::i;:::-;15248:36;15100:191;;;;:::o;15297:224::-;15437:34;15433:1;15425:6;15421:14;15414:58;15506:7;15501:2;15493:6;15489:15;15482:32;15297:224;:::o;15527:366::-;15669:3;15690:67;15754:2;15749:3;15690:67;:::i;:::-;15683:74;;15766:93;15855:3;15766:93;:::i;:::-;15884:2;15879:3;15875:12;15868:19;;15527:366;;;:::o;15899:419::-;16065:4;16103:2;16092:9;16088:18;16080:26;;16152:9;16146:4;16142:20;16138:1;16127:9;16123:17;16116:47;16180:131;16306:4;16180:131;:::i;:::-;16172:139;;15899:419;;;:::o;16324:173::-;16464:25;16460:1;16452:6;16448:14;16441:49;16324:173;:::o;16503:366::-;16645:3;16666:67;16730:2;16725:3;16666:67;:::i;:::-;16659:74;;16742:93;16831:3;16742:93;:::i;:::-;16860:2;16855:3;16851:12;16844:19;;16503:366;;;:::o;16875:419::-;17041:4;17079:2;17068:9;17064:18;17056:26;;17128:9;17122:4;17118:20;17114:1;17103:9;17099:17;17092:47;17156:131;17282:4;17156:131;:::i;:::-;17148:139;;16875:419;;;:::o;17300:143::-;17357:5;17388:6;17382:13;17373:22;;17404:33;17431:5;17404:33;:::i;:::-;17300:143;;;;:::o;17449:351::-;17519:6;17568:2;17556:9;17547:7;17543:23;17539:32;17536:119;;;17574:79;;:::i;:::-;17536:119;17694:1;17719:64;17775:7;17766:6;17755:9;17751:22;17719:64;:::i;:::-;17709:74;;17665:128;17449:351;;;;:::o;17806:332::-;17927:4;17965:2;17954:9;17950:18;17942:26;;17978:71;18046:1;18035:9;18031:17;18022:6;17978:71;:::i;:::-;18059:72;18127:2;18116:9;18112:18;18103:6;18059:72;:::i;:::-;17806:332;;;;;:::o;18144:85::-;18189:7;18218:5;18207:16;;18144:85;;;:::o;18235:60::-;18263:3;18284:5;18277:12;;18235:60;;;:::o;18301:158::-;18359:9;18392:61;18410:42;18419:32;18445:5;18419:32;:::i;:::-;18410:42;:::i;:::-;18392:61;:::i;:::-;18379:74;;18301:158;;;:::o;18465:147::-;18560:45;18599:5;18560:45;:::i;:::-;18555:3;18548:58;18465:147;;:::o;18618:807::-;18867:4;18905:3;18894:9;18890:19;18882:27;;18919:71;18987:1;18976:9;18972:17;18963:6;18919:71;:::i;:::-;19000:72;19068:2;19057:9;19053:18;19044:6;19000:72;:::i;:::-;19082:80;19158:2;19147:9;19143:18;19134:6;19082:80;:::i;:::-;19172;19248:2;19237:9;19233:18;19224:6;19172:80;:::i;:::-;19262:73;19330:3;19319:9;19315:19;19306:6;19262:73;:::i;:::-;19345;19413:3;19402:9;19398:19;19389:6;19345:73;:::i;:::-;18618:807;;;;;;;;;:::o;19431:143::-;19488:5;19519:6;19513:13;19504:22;;19535:33;19562:5;19535:33;:::i;:::-;19431:143;;;;:::o;19580:663::-;19668:6;19676;19684;19733:2;19721:9;19712:7;19708:23;19704:32;19701:119;;;19739:79;;:::i;:::-;19701:119;19859:1;19884:64;19940:7;19931:6;19920:9;19916:22;19884:64;:::i;:::-;19874:74;;19830:128;19997:2;20023:64;20079:7;20070:6;20059:9;20055:22;20023:64;:::i;:::-;20013:74;;19968:129;20136:2;20162:64;20218:7;20209:6;20198:9;20194:22;20162:64;:::i;:::-;20152:74;;20107:129;19580:663;;;;;:::o;20249:332::-;20370:4;20408:2;20397:9;20393:18;20385:26;;20421:71;20489:1;20478:9;20474:17;20465:6;20421:71;:::i;:::-;20502:72;20570:2;20559:9;20555:18;20546:6;20502:72;:::i;:::-;20249:332;;;;;:::o;20587:137::-;20641:5;20672:6;20666:13;20657:22;;20688:30;20712:5;20688:30;:::i;:::-;20587:137;;;;:::o;20730:345::-;20797:6;20846:2;20834:9;20825:7;20821:23;20817:32;20814:119;;;20852:79;;:::i;:::-;20814:119;20972:1;20997:61;21050:7;21041:6;21030:9;21026:22;20997:61;:::i;:::-;20987:71;;20943:125;20730:345;;;;:::o;21081:320::-;21196:4;21234:2;21223:9;21219:18;21211:26;;21247:71;21315:1;21304:9;21300:17;21291:6;21247:71;:::i;:::-;21328:66;21390:2;21379:9;21375:18;21366:6;21328:66;:::i;:::-;21081:320;;;;;:::o;21407:221::-;21547:34;21543:1;21535:6;21531:14;21524:58;21616:4;21611:2;21603:6;21599:15;21592:29;21407:221;:::o;21634:366::-;21776:3;21797:67;21861:2;21856:3;21797:67;:::i;:::-;21790:74;;21873:93;21962:3;21873:93;:::i;:::-;21991:2;21986:3;21982:12;21975:19;;21634:366;;;:::o;22006:419::-;22172:4;22210:2;22199:9;22195:18;22187:26;;22259:9;22253:4;22249:20;22245:1;22234:9;22230:17;22223:47;22287:131;22413:4;22287:131;:::i;:::-;22279:139;;22006:419;;;:::o;22431:410::-;22471:7;22494:20;22512:1;22494:20;:::i;:::-;22489:25;;22528:20;22546:1;22528:20;:::i;:::-;22523:25;;22583:1;22580;22576:9;22605:30;22623:11;22605:30;:::i;:::-;22594:41;;22784:1;22775:7;22771:15;22768:1;22765:22;22745:1;22738:9;22718:83;22695:139;;22814:18;;:::i;:::-;22695:139;22479:362;22431:410;;;;:::o;22847:180::-;22895:77;22892:1;22885:88;22992:4;22989:1;22982:15;23016:4;23013:1;23006:15;23033:185;23073:1;23090:20;23108:1;23090:20;:::i;:::-;23085:25;;23124:20;23142:1;23124:20;:::i;:::-;23119:25;;23163:1;23153:35;;23168:18;;:::i;:::-;23153:35;23210:1;23207;23203:9;23198:14;;23033:185;;;;:::o;23224:180::-;23364:32;23360:1;23352:6;23348:14;23341:56;23224:180;:::o;23410:366::-;23552:3;23573:67;23637:2;23632:3;23573:67;:::i;:::-;23566:74;;23649:93;23738:3;23649:93;:::i;:::-;23767:2;23762:3;23758:12;23751:19;;23410:366;;;:::o;23782:419::-;23948:4;23986:2;23975:9;23971:18;23963:26;;24035:9;24029:4;24025:20;24021:1;24010:9;24006:17;23999:47;24063:131;24189:4;24063:131;:::i;:::-;24055:139;;23782:419;;;:::o;24207:142::-;24257:9;24290:53;24308:34;24317:24;24335:5;24317:24;:::i;:::-;24308:34;:::i;:::-;24290:53;:::i;:::-;24277:66;;24207:142;;;:::o;24355:126::-;24405:9;24438:37;24469:5;24438:37;:::i;:::-;24425:50;;24355:126;;;:::o;24487:134::-;24545:9;24578:37;24609:5;24578:37;:::i;:::-;24565:50;;24487:134;;;:::o;24627:147::-;24722:45;24761:5;24722:45;:::i;:::-;24717:3;24710:58;24627:147;;:::o;24780:238::-;24881:4;24919:2;24908:9;24904:18;24896:26;;24932:79;25008:1;24997:9;24993:17;24984:6;24932:79;:::i;:::-;24780:238;;;;:::o;25024:225::-;25164:34;25160:1;25152:6;25148:14;25141:58;25233:8;25228:2;25220:6;25216:15;25209:33;25024:225;:::o;25255:366::-;25397:3;25418:67;25482:2;25477:3;25418:67;:::i;:::-;25411:74;;25494:93;25583:3;25494:93;:::i;:::-;25612:2;25607:3;25603:12;25596:19;;25255:366;;;:::o;25627:419::-;25793:4;25831:2;25820:9;25816:18;25808:26;;25880:9;25874:4;25870:20;25866:1;25855:9;25851:17;25844:47;25908:131;26034:4;25908:131;:::i;:::-;25900:139;;25627:419;;;:::o;26052:223::-;26192:34;26188:1;26180:6;26176:14;26169:58;26261:6;26256:2;26248:6;26244:15;26237:31;26052:223;:::o;26281:366::-;26423:3;26444:67;26508:2;26503:3;26444:67;:::i;:::-;26437:74;;26520:93;26609:3;26520:93;:::i;:::-;26638:2;26633:3;26629:12;26622:19;;26281:366;;;:::o;26653:419::-;26819:4;26857:2;26846:9;26842:18;26834:26;;26906:9;26900:4;26896:20;26892:1;26881:9;26877:17;26870:47;26934:131;27060:4;26934:131;:::i;:::-;26926:139;;26653:419;;;:::o;27078:221::-;27218:34;27214:1;27206:6;27202:14;27195:58;27287:4;27282:2;27274:6;27270:15;27263:29;27078:221;:::o;27305:366::-;27447:3;27468:67;27532:2;27527:3;27468:67;:::i;:::-;27461:74;;27544:93;27633:3;27544:93;:::i;:::-;27662:2;27657:3;27653:12;27646:19;;27305:366;;;:::o;27677:419::-;27843:4;27881:2;27870:9;27866:18;27858:26;;27930:9;27924:4;27920:20;27916:1;27905:9;27901:17;27894:47;27958:131;28084:4;27958:131;:::i;:::-;27950:139;;27677:419;;;:::o;28102:224::-;28242:34;28238:1;28230:6;28226:14;28219:58;28311:7;28306:2;28298:6;28294:15;28287:32;28102:224;:::o;28332:366::-;28474:3;28495:67;28559:2;28554:3;28495:67;:::i;:::-;28488:74;;28571:93;28660:3;28571:93;:::i;:::-;28689:2;28684:3;28680:12;28673:19;;28332:366;;;:::o;28704:419::-;28870:4;28908:2;28897:9;28893:18;28885:26;;28957:9;28951:4;28947:20;28943:1;28932:9;28928:17;28921:47;28985:131;29111:4;28985:131;:::i;:::-;28977:139;;28704:419;;;:::o;29129:222::-;29269:34;29265:1;29257:6;29253:14;29246:58;29338:5;29333:2;29325:6;29321:15;29314:30;29129:222;:::o;29357:366::-;29499:3;29520:67;29584:2;29579:3;29520:67;:::i;:::-;29513:74;;29596:93;29685:3;29596:93;:::i;:::-;29714:2;29709:3;29705:12;29698:19;;29357:366;;;:::o;29729:419::-;29895:4;29933:2;29922:9;29918:18;29910:26;;29982:9;29976:4;29972:20;29968:1;29957:9;29953:17;29946:47;30010:131;30136:4;30010:131;:::i;:::-;30002:139;;29729:419;;;:::o;30154:228::-;30294:34;30290:1;30282:6;30278:14;30271:58;30363:11;30358:2;30350:6;30346:15;30339:36;30154:228;:::o;30388:366::-;30530:3;30551:67;30615:2;30610:3;30551:67;:::i;:::-;30544:74;;30627:93;30716:3;30627:93;:::i;:::-;30745:2;30740:3;30736:12;30729:19;;30388:366;;;:::o;30760:419::-;30926:4;30964:2;30953:9;30949:18;30941:26;;31013:9;31007:4;31003:20;30999:1;30988:9;30984:17;30977:47;31041:131;31167:4;31041:131;:::i;:::-;31033:139;;30760:419;;;:::o;31185:175::-;31325:27;31321:1;31313:6;31309:14;31302:51;31185:175;:::o;31366:366::-;31508:3;31529:67;31593:2;31588:3;31529:67;:::i;:::-;31522:74;;31605:93;31694:3;31605:93;:::i;:::-;31723:2;31718:3;31714:12;31707:19;;31366:366;;;:::o;31738:419::-;31904:4;31942:2;31931:9;31927:18;31919:26;;31991:9;31985:4;31981:20;31977:1;31966:9;31962:17;31955:47;32019:131;32145:4;32019:131;:::i;:::-;32011:139;;31738:419;;;:::o;32163:176::-;32303:28;32299:1;32291:6;32287:14;32280:52;32163:176;:::o;32345:366::-;32487:3;32508:67;32572:2;32567:3;32508:67;:::i;:::-;32501:74;;32584:93;32673:3;32584:93;:::i;:::-;32702:2;32697:3;32693:12;32686:19;;32345:366;;;:::o;32717:419::-;32883:4;32921:2;32910:9;32906:18;32898:26;;32970:9;32964:4;32960:20;32956:1;32945:9;32941:17;32934:47;32998:131;33124:4;32998:131;:::i;:::-;32990:139;;32717:419;;;:::o;33142:233::-;33181:3;33204:24;33222:5;33204:24;:::i;:::-;33195:33;;33250:66;33243:5;33240:77;33237:103;;33320:18;;:::i;:::-;33237:103;33367:1;33360:5;33356:13;33349:20;;33142:233;;;:::o;33381:180::-;33429:77;33426:1;33419:88;33526:4;33523:1;33516:15;33550:4;33547:1;33540:15;33567:180;33615:77;33612:1;33605:88;33712:4;33709:1;33702:15;33736:4;33733:1;33726:15;33753:114;33820:6;33854:5;33848:12;33838:22;;33753:114;;;:::o;33873:184::-;33972:11;34006:6;34001:3;33994:19;34046:4;34041:3;34037:14;34022:29;;33873:184;;;;:::o;34063:132::-;34130:4;34153:3;34145:11;;34183:4;34178:3;34174:14;34166:22;;34063:132;;;:::o;34201:108::-;34278:24;34296:5;34278:24;:::i;:::-;34273:3;34266:37;34201:108;;:::o;34315:179::-;34384:10;34405:46;34447:3;34439:6;34405:46;:::i;:::-;34483:4;34478:3;34474:14;34460:28;;34315:179;;;;:::o;34500:113::-;34570:4;34602;34597:3;34593:14;34585:22;;34500:113;;;:::o;34649:732::-;34768:3;34797:54;34845:5;34797:54;:::i;:::-;34867:86;34946:6;34941:3;34867:86;:::i;:::-;34860:93;;34977:56;35027:5;34977:56;:::i;:::-;35056:7;35087:1;35072:284;35097:6;35094:1;35091:13;35072:284;;;35173:6;35167:13;35200:63;35259:3;35244:13;35200:63;:::i;:::-;35193:70;;35286:60;35339:6;35286:60;:::i;:::-;35276:70;;35132:224;35119:1;35116;35112:9;35107:14;;35072:284;;;35076:14;35372:3;35365:10;;34773:608;;;34649:732;;;;:::o;35387:831::-;35650:4;35688:3;35677:9;35673:19;35665:27;;35702:71;35770:1;35759:9;35755:17;35746:6;35702:71;:::i;:::-;35783:80;35859:2;35848:9;35844:18;35835:6;35783:80;:::i;:::-;35910:9;35904:4;35900:20;35895:2;35884:9;35880:18;35873:48;35938:108;36041:4;36032:6;35938:108;:::i;:::-;35930:116;;36056:72;36124:2;36113:9;36109:18;36100:6;36056:72;:::i;:::-;36138:73;36206:3;36195:9;36191:19;36182:6;36138:73;:::i;:::-;35387:831;;;;;;;;:::o;36224:147::-;36325:11;36362:3;36347:18;;36224:147;;;;:::o;36377:114::-;;:::o;36497:398::-;36656:3;36677:83;36758:1;36753:3;36677:83;:::i;:::-;36670:90;;36769:93;36858:3;36769:93;:::i;:::-;36887:1;36882:3;36878:11;36871:18;;36497:398;;;:::o;36901:379::-;37085:3;37107:147;37250:3;37107:147;:::i;:::-;37100:154;;37271:3;37264:10;;36901:379;;;:::o;37286:225::-;37426:34;37422:1;37414:6;37410:14;37403:58;37495:8;37490:2;37482:6;37478:15;37471:33;37286:225;:::o;37517:366::-;37659:3;37680:67;37744:2;37739:3;37680:67;:::i;:::-;37673:74;;37756:93;37845:3;37756:93;:::i;:::-;37874:2;37869:3;37865:12;37858:19;;37517:366;;;:::o;37889:419::-;38055:4;38093:2;38082:9;38078:18;38070:26;;38142:9;38136:4;38132:20;38128:1;38117:9;38113:17;38106:47;38170:131;38296:4;38170:131;:::i;:::-;38162:139;;37889:419;;;:::o;38314:194::-;38354:4;38374:20;38392:1;38374:20;:::i;:::-;38369:25;;38408:20;38426:1;38408:20;:::i;:::-;38403:25;;38452:1;38449;38445:9;38437:17;;38476:1;38470:4;38467:11;38464:37;;;38481:18;;:::i;:::-;38464:37;38314:194;;;;:::o

Swarm Source

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