ETH Price: $3,376.04 (+3.20%)
Gas: 2 Gwei

Token

MY FIRST MEME COIN (by Autistic Dev) (MFMC)
 

Overview

Max Total Supply

1,000,000,000 MFMC

Holders

68

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0xmoles.eth
Balance
7,646,532.067105179240045649 MFMC

Value
$0.00
0x1ee9e2692b4fcb8016f1986699aee96d4b6f9586
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:
MYFIRSTMEMECOINbyAutisticDev

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-21
*/

// **
// Website: https://myfirstmemecoin.com/
// Twitter: https://twitter.com/MyFirstMemeCoin
// Telegram: https://t.me/myfirstmemecoin
// **

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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
    );

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

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

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

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

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev 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 {}
}

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

contract MYFIRSTMEMECOINbyAutisticDev is ERC20, Ownable, Pausable {
    uint256 constant NUMERATOR = 1000;
    uint256 public buyTaxRate = 500; 
    uint256 public sellTaxRate = 500; 
    uint256 public tokensTXLimit;
    uint256 public minTokensToSwap;
    IUniswapV2Router02 _uniswapRouter;
    address public uniswapRouterAddress;
    address public _uniswapPair;

    address public DEV_WALLET = 0x9046cF76405296Fe98f572bac9275B87A48e8B5f;

    mapping(address => bool) public blacklisted;
    mapping(address => bool) public isExemptedFromTax;
    mapping(address => bool) public isExemptedFromMaxTXN;
    mapping(address => bool) public isExemptedFromMaxHolding;

    address public MARKETING_ADDRESS = 
        0x9046cF76405296Fe98f572bac9275B87A48e8B5f;

    uint256 public MAX_WALLET_SIZE;

    bool public isTradingEnabled;
    bool public isFeeEnabled;
    event TaxReceiversUpdated(address MARKETING_ADDRESS);
    event TradingStatusChanged(bool TradeStatus);
    event WalletTokensLimitUpdated(uint256 WalletTokenTxLimit);
    event TokensTXLimit(uint256 TokensLimit);
    event BlacklistStatusUpdated(address Address, bool Status);
    event TaxRateSet(uint256 TaxRate);

    modifier isNotBlacklisted(address _address) {
        require(!blacklisted[_address], "Address has been Blocklisted");
        _;
    }

    constructor () ERC20 ("MY FIRST MEME COIN (by Autistic Dev)", "MFMC") {
        _mint(DEV_WALLET, 1000000000000000000000000000); // 1 billion is the total supply

        _uniswapRouter = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        ); // ETH: Uniswap V2 Router
        uniswapRouterAddress = address(_uniswapRouter);

        // Create pairs
        _uniswapPair = IUniswapV2Factory(_uniswapRouter.factory()).createPair(
            address(this),
            _uniswapRouter.WETH()
        );
    }

    function enableTrading() public onlyOwner {
        isTradingEnabled = true;
        emit TradingStatusChanged(true);
    }

    function disableTrading() public onlyOwner {
        isTradingEnabled = false;
        emit TradingStatusChanged(false);
    }

    function enableOrDisableFees(bool feeStatus) public onlyOwner {
        isFeeEnabled = feeStatus;
    }

    function setMarketingAddress(address _taxReceiver) public onlyOwner {
        require(_taxReceiver != address(0));
        MARKETING_ADDRESS = _taxReceiver;
        emit TaxReceiversUpdated(_taxReceiver);
    }

    function setMinTokenToSwap(uint256 _minTokensToSwap) public onlyOwner {
        minTokensToSwap = _minTokensToSwap;
    }

    function addToBlacklist(address _address) external onlyOwner {
        if (
            (_address != _uniswapPair) &&
            (_address != address(_uniswapRouter)) &&
            (_address != address(this))
        ) blacklisted[_address] = true;
        emit BlacklistStatusUpdated(_address, true);
    }

    function removeFromBlacklist(address _address) external onlyOwner {
        blacklisted[_address] = false;
        emit BlacklistStatusUpdated(_address, false);
    }

    function includeOrExcludeFromMaxHolding(
        address _exemptedAddress,
        bool included
    ) public onlyOwner {
        isExemptedFromMaxHolding[_exemptedAddress] = included;
    }

    function includeOrExcludeFromFee(address _exemptedAddress, bool included)
        public
        onlyOwner
    {
        isExemptedFromTax[_exemptedAddress] = !included;
    }

    function includeOrExcludeFromMaxTXN(address _exemptedAddress, bool included)
        public
        onlyOwner
    {
        isExemptedFromMaxTXN[_exemptedAddress] = included;
    }

    function setMaxWalletSize(uint256 _maxWalletSize) external onlyOwner {
        MAX_WALLET_SIZE = _maxWalletSize;
        emit WalletTokensLimitUpdated(MAX_WALLET_SIZE);
    }

    function setBuyFeePercent(uint256 _taxRate) public onlyOwner whenNotPaused {
        buyTaxRate = _taxRate;
        emit TaxRateSet(buyTaxRate);
    }

    function setSellFeePercent(uint256 _taxRate)
        public
        onlyOwner
        whenNotPaused
    {
        sellTaxRate = _taxRate;
        emit TaxRateSet(sellTaxRate);
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function setUniswapRouterAddress(address _uniswapRouterAddress)
        external
        onlyOwner
    {
        require(
            _uniswapRouterAddress != address(0),
            "Invalid Uniswap router address"
        );
        _uniswapRouter = IUniswapV2Router02(_uniswapRouterAddress);
        uniswapRouterAddress = _uniswapRouterAddress;
    }

    function setUniswapPairAddress(address _uniswapPairAddress)
        external
        onlyOwner
    {
        require(_uniswapPairAddress != address(0), "Invalid Pair address");
        _uniswapPair = _uniswapPairAddress;
    }

    function setMaxTxnLimit(uint256 _tokensTXLimit)
        public
        onlyOwner
        whenNotPaused
    {
        tokensTXLimit = _tokensTXLimit;
        emit TokensTXLimit(tokensTXLimit);
    }

    function getTransactionLimit() public view returns (uint256) {
        return tokensTXLimit;
    }

    function getBuyTaxRate() public view returns (uint256) {
        return buyTaxRate;
    }

    function getSellTaxRate() public view returns (uint256) {
        return sellTaxRate;
    }

    function getContractETHBalance() public view returns (uint256) {
        return address(this).balance;
    }

    fallback() external payable {}

    receive() external payable {}

    function withdrawETH() public onlyOwner {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapRouter.WETH();

        uint256 contractTokenBalance = balanceOf(address(this)); 
        if (contractTokenBalance == 0) return;

        uint256 initialBalance = address(this).balance; //eth balance
        this.approve(address(_uniswapRouter), contractTokenBalance);

        _uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ethAmount = address(this).balance - initialBalance;

        // Transfer fees to respective wallet
        payable(MARKETING_ADDRESS).transfer(ethAmount);
    }

    function transfer(address to, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), to, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public override returns (bool) {
        _transfer(from, to, amount);
        _approve(from, _msgSender(), allowance(from, _msgSender()) - amount);
        return true;
    }

    bool public _transferFlag;

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override isNotBlacklisted(from) isNotBlacklisted(to) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if (!isExemptedFromMaxTXN[to] || !isExemptedFromMaxTXN[from])
            require(
                amount <= tokensTXLimit && amount > minTokensToSwap,
                "TX Limit: Cannot transfer more than tokensTXLimit"
            );
        //While Trading
        // user wantes: eth => token --> BUY
        if (
            from == _uniswapPair &&
            !isExemptedFromTax[to] &&
            to != address(_uniswapRouter) &&
            isFeeEnabled
        ) {
            require(isTradingEnabled, "Trading is not enabled");

            if (!isExemptedFromMaxHolding[to])
                require(
                    balanceOf(to) + amount <= MAX_WALLET_SIZE,
                    "Max Holding"
                );

            uint256 amountOfTax = (amount * buyTaxRate) / NUMERATOR;
            super._transfer(from, address(this), amountOfTax);
            super._transfer(from, to, amount - amountOfTax);
        }
        // users wants token => eth or adding Liquidity --> SELL
        else if (
            to == _uniswapPair &&
            !isExemptedFromTax[from] &&
            from != address(_uniswapRouter) &&
            isFeeEnabled
        ) {
            require(isTradingEnabled, "Trading is not enabled");

            uint256 amountOfTax = (amount * sellTaxRate) / NUMERATOR;

            super._transfer(from, address(this), amountOfTax);
            super._transfer(from, to, amount - amountOfTax);
        } else {
            super._transfer(from, to, amount);
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    )
        internal
        view
        override
        isNotBlacklisted(from)
        isNotBlacklisted(to)
    {}

    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
}

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":"Address","type":"address"},{"indexed":false,"internalType":"bool","name":"Status","type":"bool"}],"name":"BlacklistStatusUpdated","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TaxRate","type":"uint256"}],"name":"TaxRateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"MARKETING_ADDRESS","type":"address"}],"name":"TaxReceiversUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"TokensLimit","type":"uint256"}],"name":"TokensTXLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"TradeStatus","type":"bool"}],"name":"TradingStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"WalletTokenTxLimit","type":"uint256"}],"name":"WalletTokensLimitUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEV_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MARKETING_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WALLET_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTaxRate","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":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"feeStatus","type":"bool"}],"name":"enableOrDisableFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransactionLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_exemptedAddress","type":"address"},{"internalType":"bool","name":"included","type":"bool"}],"name":"includeOrExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_exemptedAddress","type":"address"},{"internalType":"bool","name":"included","type":"bool"}],"name":"includeOrExcludeFromMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_exemptedAddress","type":"address"},{"internalType":"bool","name":"included","type":"bool"}],"name":"includeOrExcludeFromMaxTXN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptedFromMaxHolding","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptedFromMaxTXN","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxRate","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxReceiver","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokensTXLimit","type":"uint256"}],"name":"setMaxTxnLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokensToSwap","type":"uint256"}],"name":"setMinTokenToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxRate","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapPairAddress","type":"address"}],"name":"setUniswapPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapRouterAddress","type":"address"}],"name":"setUniswapRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensTXLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526101f46006556101f4600755739046cf76405296fe98f572bac9275b87a48e8b5f600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739046cf76405296fe98f572bac9275b87a48e8b5f60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000c4575f80fd5b5060405180606001604052806024815260200162004c04602491396040518060400160405280600481526020017f4d464d4300000000000000000000000000000000000000000000000000000000815250816003908162000126919062000a09565b50806004908162000138919062000a09565b5050506200015b6200014f6200044e60201b60201c565b6200045560201b60201c565b5f600560146101000a81548160ff021916908315150217905550620001b4600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce80000006200051860201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002fa919062000b52565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000381573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003a7919062000b52565b6040518363ffffffff1660e01b8152600401620003c692919062000b93565b6020604051808303815f875af1158015620003e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000409919062000b52565b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000d3d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005809062000c1c565b60405180910390fd5b6200059c5f83836200067d60201b60201c565b8060025f828254620005af919062000c69565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200065e919062000cb4565b60405180910390a3620006795f8383620007a060201b60201c565b5050565b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156200070b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007029062000d1d565b60405180910390fd5b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562000799576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007909062000d1d565b60405180910390fd5b5050505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200082157607f821691505b602082108103620008375762000836620007dc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200089b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200085e565b620008a786836200085e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620008f1620008eb620008e584620008bf565b620008c8565b620008bf565b9050919050565b5f819050919050565b6200090c83620008d1565b620009246200091b82620008f8565b8484546200086a565b825550505050565b5f90565b6200093a6200092c565b6200094781848462000901565b505050565b5b818110156200096e57620009625f8262000930565b6001810190506200094d565b5050565b601f821115620009bd5762000987816200083d565b62000992846200084f565b81016020851015620009a2578190505b620009ba620009b1856200084f565b8301826200094c565b50505b505050565b5f82821c905092915050565b5f620009df5f1984600802620009c2565b1980831691505092915050565b5f620009f98383620009ce565b9150826002028217905092915050565b62000a1482620007a5565b67ffffffffffffffff81111562000a305762000a2f620007af565b5b62000a3c825462000809565b62000a4982828562000972565b5f60209050601f83116001811462000a7f575f841562000a6a578287015190505b62000a768582620009ec565b86555062000ae5565b601f19841662000a8f866200083d565b5f5b8281101562000ab85784890151825560018201915060208501945060208101905062000a91565b8683101562000ad8578489015162000ad4601f891682620009ce565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000b1c8262000af1565b9050919050565b62000b2e8162000b10565b811462000b39575f80fd5b50565b5f8151905062000b4c8162000b23565b92915050565b5f6020828403121562000b6a5762000b6962000aed565b5b5f62000b798482850162000b3c565b91505092915050565b62000b8d8162000b10565b82525050565b5f60408201905062000ba85f83018562000b82565b62000bb7602083018462000b82565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000c04601f8362000bbe565b915062000c118262000bce565b602082019050919050565b5f6020820190508181035f83015262000c358162000bf6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000c7582620008bf565b915062000c8283620008bf565b925082820190508082111562000c9d5762000c9c62000c3c565b5b92915050565b62000cae81620008bf565b82525050565b5f60208201905062000cc95f83018462000ca3565b92915050565b7f4164647265737320686173206265656e20426c6f636b6c6973746564000000005f82015250565b5f62000d05601c8362000bbe565b915062000d128262000ccf565b602082019050919050565b5f6020820190508181035f83015262000d368162000cf7565b9050919050565b613eb98062000d4b5f395ff3fe608060405260043610610353575f3560e01c8063715018a6116101c5578063c3743cff116100f6578063e689c47611610094578063f097ea1a1161006e578063f097ea1a14610bec578063f0b006e014610c14578063f2fde38b14610c3e578063fd43e46114610c665761035a565b8063e689c47614610b72578063ea1644d514610b9c578063ea5b9e8514610bc45761035a565b8063dbac26e9116100d0578063dbac26e914610aba578063dd62ed3e14610af6578063e086e5ec14610b32578063e0988d8714610b485761035a565b8063c3743cff14610a40578063d613433e14610a6a578063db15d18514610a925761035a565b806395d89b4111610163578063a457c2d71161013d578063a457c2d714610978578063a9059cbb146109b4578063b0bc2a2d146109f0578063bd7644b814610a185761035a565b806395d89b41146108fe5780639b6a275014610928578063a2b8a947146109505761035a565b80638c89a0ad1161019f5780638c89a0ad1461085a5780638da5cb5b14610884578063906e9dd0146108ae578063950eb5d5146108d65761035a565b8063715018a6146108185780638456cb591461082e5780638a8c523c146108445761035a565b806336fe302d1161029f5780634f0543171161023d5780635c975abb116102175780635c975abb1461074c5780635f73521414610776578063691f224f146107b257806370a08231146107dc5761035a565b80634f054317146106be57806350433d40146106e8578063537df3b6146107245761035a565b80633f4ba83a116102795780633f4ba83a1461062e57806342966c681461064457806344337ea11461066c5780634bf28fd0146106945761035a565b806336fe302d1461059e57806338458e9b146105c857806339509351146105f25761035a565b806320ca3c7f1161030c57806324024efd116102e657806324024efd146104f85780632d04f820146105225780632d1293901461054c578063313ce567146105745761035a565b806320ca3c7f1461045657806322aafef21461048057806323b872dd146104bc5761035a565b8063064a59d01461035c57806306fdde0314610386578063095ea7b3146103b05780630e66dc69146103ec57806317700f011461041657806318160ddd1461042c5761035a565b3661035a57005b005b348015610367575f80fd5b50610370610c90565b60405161037d9190612e25565b60405180910390f35b348015610391575f80fd5b5061039a610ca2565b6040516103a79190612ec8565b60405180910390f35b3480156103bb575f80fd5b506103d660048036038101906103d19190612f79565b610d32565b6040516103e39190612e25565b60405180910390f35b3480156103f7575f80fd5b50610400610d54565b60405161040d9190612e25565b60405180910390f35b348015610421575f80fd5b5061042a610d67565b005b348015610437575f80fd5b50610440610dc1565b60405161044d9190612fc6565b60405180910390f35b348015610461575f80fd5b5061046a610dca565b6040516104779190612fee565b60405180910390f35b34801561048b575f80fd5b506104a660048036038101906104a19190613007565b610def565b6040516104b39190612e25565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190613032565b610e0c565b6040516104ef9190612e25565b60405180910390f35b348015610503575f80fd5b5061050c610e50565b6040516105199190612fc6565b60405180910390f35b34801561052d575f80fd5b50610536610e56565b6040516105439190612fee565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d91906130ac565b610e7b565b005b34801561057f575f80fd5b50610588610edb565b6040516105959190613105565b60405180910390f35b3480156105a9575f80fd5b506105b2610ee3565b6040516105bf9190612e25565b60405180910390f35b3480156105d3575f80fd5b506105dc610ef6565b6040516105e99190612fc6565b60405180910390f35b3480156105fd575f80fd5b5061061860048036038101906106139190612f79565b610eff565b6040516106259190612e25565b60405180910390f35b348015610639575f80fd5b50610642610f35565b005b34801561064f575f80fd5b5061066a6004803603810190610665919061311e565b610f47565b005b348015610677575f80fd5b50610692600480360381019061068d9190613007565b610f5c565b005b34801561069f575f80fd5b506106a86110de565b6040516106b59190612fee565b60405180910390f35b3480156106c9575f80fd5b506106d2611103565b6040516106df9190612fc6565b60405180910390f35b3480156106f3575f80fd5b5061070e60048036038101906107099190613007565b611109565b60405161071b9190612e25565b60405180910390f35b34801561072f575f80fd5b5061074a60048036038101906107459190613007565b611126565b005b348015610757575f80fd5b506107606111be565b60405161076d9190612e25565b60405180910390f35b348015610781575f80fd5b5061079c60048036038101906107979190613007565b6111d4565b6040516107a99190612e25565b60405180910390f35b3480156107bd575f80fd5b506107c66111f1565b6040516107d39190612fc6565b60405180910390f35b3480156107e7575f80fd5b5061080260048036038101906107fd9190613007565b6111f7565b60405161080f9190612fc6565b60405180910390f35b348015610823575f80fd5b5061082c61123c565b005b348015610839575f80fd5b5061084261124f565b005b34801561084f575f80fd5b50610858611261565b005b348015610865575f80fd5b5061086e6112bd565b60405161087b9190612fc6565b60405180910390f35b34801561088f575f80fd5b506108986112c4565b6040516108a59190612fee565b60405180910390f35b3480156108b9575f80fd5b506108d460048036038101906108cf9190613007565b6112ec565b005b3480156108e1575f80fd5b506108fc60048036038101906108f7919061311e565b6113a5565b005b348015610909575f80fd5b506109126113f8565b60405161091f9190612ec8565b60405180910390f35b348015610933575f80fd5b5061094e6004803603810190610949919061311e565b611488565b005b34801561095b575f80fd5b506109766004803603810190610971919061311e565b6114db565b005b348015610983575f80fd5b5061099e60048036038101906109999190612f79565b61152e565b6040516109ab9190612e25565b60405180910390f35b3480156109bf575f80fd5b506109da60048036038101906109d59190612f79565b6115a3565b6040516109e79190612e25565b60405180910390f35b3480156109fb575f80fd5b50610a166004803603810190610a119190613149565b6115c0565b005b348015610a23575f80fd5b50610a3e6004803603810190610a399190613007565b6115e5565b005b348015610a4b575f80fd5b50610a5461169e565b604051610a619190612fc6565b60405180910390f35b348015610a75575f80fd5b50610a906004803603810190610a8b91906130ac565b6116a7565b005b348015610a9d575f80fd5b50610ab86004803603810190610ab39190613007565b611707565b005b348015610ac5575f80fd5b50610ae06004803603810190610adb9190613007565b611800565b604051610aed9190612e25565b60405180910390f35b348015610b01575f80fd5b50610b1c6004803603810190610b179190613174565b61181d565b604051610b299190612fc6565b60405180910390f35b348015610b3d575f80fd5b50610b4661189f565b005b348015610b53575f80fd5b50610b5c611be3565b604051610b699190612fc6565b60405180910390f35b348015610b7d575f80fd5b50610b86611be9565b604051610b939190612fee565b60405180910390f35b348015610ba7575f80fd5b50610bc26004803603810190610bbd919061311e565b611c0e565b005b348015610bcf575f80fd5b50610bea6004803603810190610be591906130ac565b611c59565b005b348015610bf7575f80fd5b50610c126004803603810190610c0d919061311e565b611cba565b005b348015610c1f575f80fd5b50610c28611ccc565b604051610c359190612fc6565b60405180910390f35b348015610c49575f80fd5b50610c646004803603810190610c5f9190613007565b611cd2565b005b348015610c71575f80fd5b50610c7a611d54565b604051610c879190612fc6565b60405180910390f35b60145f9054906101000a900460ff1681565b606060038054610cb1906131df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdd906131df565b8015610d285780601f10610cff57610100808354040283529160200191610d28565b820191905f5260205f20905b815481529060010190602001808311610d0b57829003601f168201915b5050505050905090565b5f80610d3c611d5d565b9050610d49818585611d64565b600191505092915050565b601460019054906101000a900460ff1681565b610d6f611f27565b5f60145f6101000a81548160ff0219169083151502179055507f63e9bb35ae90a43113bc6f999f1c6395e88ee5f59560b46bd45815fe8560efae5f604051610db79190612e25565b60405180910390a1565b5f600254905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f602052805f5260405f205f915054906101000a900460ff1681565b5f610e18848484611fa5565b610e4584610e24611d5d565b84610e3688610e31611d5d565b61181d565b610e40919061323c565b611d64565b600190509392505050565b60075481565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e83611f27565b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6012905090565b601460029054906101000a900460ff1681565b5f600754905090565b5f80610f09611d5d565b9050610f2a818585610f1b858961181d565b610f25919061326f565b611d64565b600191505092915050565b610f3d611f27565b610f4561269f565b565b610f4f611f27565b610f593382612701565b50565b610f64611f27565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561100e5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561104657503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156110a1576001600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b7f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb68160016040516110d39291906132a2565b60405180910390a150565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6010602052805f5260405f205f915054906101000a900460ff1681565b61112e611f27565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb6815f6040516111b39291906132a2565b60405180910390a150565b5f600560149054906101000a900460ff16905090565b6011602052805f5260405f205f915054906101000a900460ff1681565b60065481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611244611f27565b61124d5f6128c4565b565b611257611f27565b61125f612987565b565b611269611f27565b600160145f6101000a81548160ff0219169083151502179055507f63e9bb35ae90a43113bc6f999f1c6395e88ee5f59560b46bd45815fe8560efae60016040516112b39190612e25565b60405180910390a1565b5f47905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112f4611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361132b575f80fd5b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f119ab5d6448433382f95f98698605fe2e806e811e886d5806cdf09cf8419db608160405161139a9190612fee565b60405180910390a150565b6113ad611f27565b6113b56129ea565b806006819055507f2cf6bdee09c3811c29dab74512064ee7a320add122b9150b166c88dd957602176006546040516113ed9190612fc6565b60405180910390a150565b606060048054611407906131df565b80601f0160208091040260200160405190810160405280929190818152602001828054611433906131df565b801561147e5780601f106114555761010080835404028352916020019161147e565b820191905f5260205f20905b81548152906001019060200180831161146157829003601f168201915b5050505050905090565b611490611f27565b6114986129ea565b806008819055507f4eb511c00ccadf52c50365c85aae30bb36e65d3eefbee2b03192e2b7d761376c6008546040516114d09190612fc6565b60405180910390a150565b6114e3611f27565b6114eb6129ea565b806007819055507f2cf6bdee09c3811c29dab74512064ee7a320add122b9150b166c88dd957602176007546040516115239190612fc6565b60405180910390a150565b5f80611538611d5d565b90505f611545828661181d565b90508381101561158a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158190613339565b60405180910390fd5b6115978286868403611d64565b60019250505092915050565b5f6115b66115af611d5d565b8484611fa5565b6001905092915050565b6115c8611f27565b80601460016101000a81548160ff02191690831515021790555050565b6115ed611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361165b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611652906133a1565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600854905090565b6116af611f27565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61170f611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613409565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6118a7611f27565b5f600267ffffffffffffffff8111156118c3576118c2613427565b5b6040519080825280602002602001820160405280156118f15781602001602082028036833780820191505090505b50905030815f8151811061190857611907613454565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d09190613495565b816001815181106119e4576119e3613454565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f611a28306111f7565b90505f8103611a38575050611be1565b5f4790503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611a989291906134c0565b6020604051808303815f875af1158015611ab4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad891906134fb565b50600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8630426040518663ffffffff1660e01b8152600401611b3b95949392919061361f565b5f604051808303815f87803b158015611b52575f80fd5b505af1158015611b64573d5f803e3d5ffd5b505050505f8147611b75919061323c565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611bdb573d5f803e3d5ffd5b50505050505b565b60085481565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c16611f27565b806013819055507f393f89ef106cb116df007cc6bd2aa044a0996d181c9bc86c7c80f2b9b87b6850601354604051611c4e9190612fc6565b60405180910390a150565b611c61611f27565b8015600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611cc2611f27565b8060098190555050565b60095481565b611cda611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906136e7565b60405180910390fd5b611d51816128c4565b50565b5f600654905090565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990613775565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613803565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1a9190612fc6565b60405180910390a3505050565b611f2f611d5d565b73ffffffffffffffffffffffffffffffffffffffff16611f4d6112c4565b73ffffffffffffffffffffffffffffffffffffffff1614611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a9061386b565b60405180910390fd5b565b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612030576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612027906138d3565b60405180910390fd5b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b2906138d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090613961565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e906139ef565b60405180910390fd5b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580612234575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561228c57600854831115801561224c575060095483115b61228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613a7d565b60405180910390fd5b5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561232f5750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123885750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123a05750601460019054906101000a900460ff165b156124df5760145f9054906101000a900460ff166123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea90613ae5565b60405180910390fd5b60115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661249a576013548361244e866111f7565b612458919061326f565b1115612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090613b4d565b60405180910390fd5b5b5f6103e8600654856124ac9190613b6b565b6124b69190613bd9565b90506124c3863083612a34565b6124d9868683876124d4919061323c565b612a34565b50612698565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156125825750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125db5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125f35750601460019054906101000a900460ff165b1561268b5760145f9054906101000a900460ff16612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d90613ae5565b60405180910390fd5b5f6103e8600754856126589190613b6b565b6126629190613bd9565b905061266f863083612a34565b61268586868387612680919061323c565b612a34565b50612697565b612696858585612a34565b5b5b5050505050565b6126a7612ca0565b5f600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6126ea611d5d565b6040516126f79190612fee565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690613c79565b60405180910390fd5b61277a825f83612ce9565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f490613d07565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ac9190612fc6565b60405180910390a36128bf835f84612e06565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61298f6129ea565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129d3611d5d565b6040516129e09190612fee565b60405180910390a1565b6129f26111be565b15612a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2990613d6f565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9990613961565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b07906139ef565b60405180910390fd5b612b1b838383612ce9565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9590613dfd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c879190612fc6565b60405180910390a3612c9a848484612e06565b50505050565b612ca86111be565b612ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cde90613e65565b60405180910390fd5b565b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6b906138d3565b60405180910390fd5b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df6906138d3565b60405180910390fd5b5050505050565b505050565b5f8115159050919050565b612e1f81612e0b565b82525050565b5f602082019050612e385f830184612e16565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e75578082015181840152602081019050612e5a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612e9a82612e3e565b612ea48185612e48565b9350612eb4818560208601612e58565b612ebd81612e80565b840191505092915050565b5f6020820190508181035f830152612ee08184612e90565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f1582612eec565b9050919050565b612f2581612f0b565b8114612f2f575f80fd5b50565b5f81359050612f4081612f1c565b92915050565b5f819050919050565b612f5881612f46565b8114612f62575f80fd5b50565b5f81359050612f7381612f4f565b92915050565b5f8060408385031215612f8f57612f8e612ee8565b5b5f612f9c85828601612f32565b9250506020612fad85828601612f65565b9150509250929050565b612fc081612f46565b82525050565b5f602082019050612fd95f830184612fb7565b92915050565b612fe881612f0b565b82525050565b5f6020820190506130015f830184612fdf565b92915050565b5f6020828403121561301c5761301b612ee8565b5b5f61302984828501612f32565b91505092915050565b5f805f6060848603121561304957613048612ee8565b5b5f61305686828701612f32565b935050602061306786828701612f32565b925050604061307886828701612f65565b9150509250925092565b61308b81612e0b565b8114613095575f80fd5b50565b5f813590506130a681613082565b92915050565b5f80604083850312156130c2576130c1612ee8565b5b5f6130cf85828601612f32565b92505060206130e085828601613098565b9150509250929050565b5f60ff82169050919050565b6130ff816130ea565b82525050565b5f6020820190506131185f8301846130f6565b92915050565b5f6020828403121561313357613132612ee8565b5b5f61314084828501612f65565b91505092915050565b5f6020828403121561315e5761315d612ee8565b5b5f61316b84828501613098565b91505092915050565b5f806040838503121561318a57613189612ee8565b5b5f61319785828601612f32565b92505060206131a885828601612f32565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806131f657607f821691505b602082108103613209576132086131b2565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61324682612f46565b915061325183612f46565b92508282039050818111156132695761326861320f565b5b92915050565b5f61327982612f46565b915061328483612f46565b925082820190508082111561329c5761329b61320f565b5b92915050565b5f6040820190506132b55f830185612fdf565b6132c26020830184612e16565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613323602583612e48565b915061332e826132c9565b604082019050919050565b5f6020820190508181035f83015261335081613317565b9050919050565b7f496e76616c6964205061697220616464726573730000000000000000000000005f82015250565b5f61338b601483612e48565b915061339682613357565b602082019050919050565b5f6020820190508181035f8301526133b88161337f565b9050919050565b7f496e76616c696420556e697377617020726f75746572206164647265737300005f82015250565b5f6133f3601e83612e48565b91506133fe826133bf565b602082019050919050565b5f6020820190508181035f830152613420816133e7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061348f81612f1c565b92915050565b5f602082840312156134aa576134a9612ee8565b5b5f6134b784828501613481565b91505092915050565b5f6040820190506134d35f830185612fdf565b6134e06020830184612fb7565b9392505050565b5f815190506134f581613082565b92915050565b5f602082840312156135105761350f612ee8565b5b5f61351d848285016134e7565b91505092915050565b5f819050919050565b5f819050919050565b5f61355261354d61354884613526565b61352f565b612f46565b9050919050565b61356281613538565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61359a81612f0b565b82525050565b5f6135ab8383613591565b60208301905092915050565b5f602082019050919050565b5f6135cd82613568565b6135d78185613572565b93506135e283613582565b805f5b838110156136125781516135f988826135a0565b9750613604836135b7565b9250506001810190506135e5565b5085935050505092915050565b5f60a0820190506136325f830188612fb7565b61363f6020830187613559565b818103604083015261365181866135c3565b90506136606060830185612fdf565b61366d6080830184612fb7565b9695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6136d1602683612e48565b91506136dc82613677565b604082019050919050565b5f6020820190508181035f8301526136fe816136c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61375f602483612e48565b915061376a82613705565b604082019050919050565b5f6020820190508181035f83015261378c81613753565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137ed602283612e48565b91506137f882613793565b604082019050919050565b5f6020820190508181035f83015261381a816137e1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613855602083612e48565b915061386082613821565b602082019050919050565b5f6020820190508181035f83015261388281613849565b9050919050565b7f4164647265737320686173206265656e20426c6f636b6c6973746564000000005f82015250565b5f6138bd601c83612e48565b91506138c882613889565b602082019050919050565b5f6020820190508181035f8301526138ea816138b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61394b602583612e48565b9150613956826138f1565b604082019050919050565b5f6020820190508181035f8301526139788161393f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139d9602383612e48565b91506139e48261397f565b604082019050919050565b5f6020820190508181035f830152613a06816139cd565b9050919050565b7f5458204c696d69743a2043616e6e6f74207472616e73666572206d6f726520745f8201527f68616e20746f6b656e7354584c696d6974000000000000000000000000000000602082015250565b5f613a67603183612e48565b9150613a7282613a0d565b604082019050919050565b5f6020820190508181035f830152613a9481613a5b565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f613acf601683612e48565b9150613ada82613a9b565b602082019050919050565b5f6020820190508181035f830152613afc81613ac3565b9050919050565b7f4d617820486f6c64696e670000000000000000000000000000000000000000005f82015250565b5f613b37600b83612e48565b9150613b4282613b03565b602082019050919050565b5f6020820190508181035f830152613b6481613b2b565b9050919050565b5f613b7582612f46565b9150613b8083612f46565b9250828202613b8e81612f46565b91508282048414831517613ba557613ba461320f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613be382612f46565b9150613bee83612f46565b925082613bfe57613bfd613bac565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c63602183612e48565b9150613c6e82613c09565b604082019050919050565b5f6020820190508181035f830152613c9081613c57565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613cf1602283612e48565b9150613cfc82613c97565b604082019050919050565b5f6020820190508181035f830152613d1e81613ce5565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f613d59601083612e48565b9150613d6482613d25565b602082019050919050565b5f6020820190508181035f830152613d8681613d4d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613de7602683612e48565b9150613df282613d8d565b604082019050919050565b5f6020820190508181035f830152613e1481613ddb565b9050919050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f613e4f601483612e48565b9150613e5a82613e1b565b602082019050919050565b5f6020820190508181035f830152613e7c81613e43565b905091905056fea2646970667358221220d644c44cb08cc27f441211d2a0a4a2c720bddba41858d1c1f495a7b98ae2bfb764736f6c634300081600334d59204649525354204d454d4520434f494e202862792041757469737469632044657629

Deployed Bytecode

0x608060405260043610610353575f3560e01c8063715018a6116101c5578063c3743cff116100f6578063e689c47611610094578063f097ea1a1161006e578063f097ea1a14610bec578063f0b006e014610c14578063f2fde38b14610c3e578063fd43e46114610c665761035a565b8063e689c47614610b72578063ea1644d514610b9c578063ea5b9e8514610bc45761035a565b8063dbac26e9116100d0578063dbac26e914610aba578063dd62ed3e14610af6578063e086e5ec14610b32578063e0988d8714610b485761035a565b8063c3743cff14610a40578063d613433e14610a6a578063db15d18514610a925761035a565b806395d89b4111610163578063a457c2d71161013d578063a457c2d714610978578063a9059cbb146109b4578063b0bc2a2d146109f0578063bd7644b814610a185761035a565b806395d89b41146108fe5780639b6a275014610928578063a2b8a947146109505761035a565b80638c89a0ad1161019f5780638c89a0ad1461085a5780638da5cb5b14610884578063906e9dd0146108ae578063950eb5d5146108d65761035a565b8063715018a6146108185780638456cb591461082e5780638a8c523c146108445761035a565b806336fe302d1161029f5780634f0543171161023d5780635c975abb116102175780635c975abb1461074c5780635f73521414610776578063691f224f146107b257806370a08231146107dc5761035a565b80634f054317146106be57806350433d40146106e8578063537df3b6146107245761035a565b80633f4ba83a116102795780633f4ba83a1461062e57806342966c681461064457806344337ea11461066c5780634bf28fd0146106945761035a565b806336fe302d1461059e57806338458e9b146105c857806339509351146105f25761035a565b806320ca3c7f1161030c57806324024efd116102e657806324024efd146104f85780632d04f820146105225780632d1293901461054c578063313ce567146105745761035a565b806320ca3c7f1461045657806322aafef21461048057806323b872dd146104bc5761035a565b8063064a59d01461035c57806306fdde0314610386578063095ea7b3146103b05780630e66dc69146103ec57806317700f011461041657806318160ddd1461042c5761035a565b3661035a57005b005b348015610367575f80fd5b50610370610c90565b60405161037d9190612e25565b60405180910390f35b348015610391575f80fd5b5061039a610ca2565b6040516103a79190612ec8565b60405180910390f35b3480156103bb575f80fd5b506103d660048036038101906103d19190612f79565b610d32565b6040516103e39190612e25565b60405180910390f35b3480156103f7575f80fd5b50610400610d54565b60405161040d9190612e25565b60405180910390f35b348015610421575f80fd5b5061042a610d67565b005b348015610437575f80fd5b50610440610dc1565b60405161044d9190612fc6565b60405180910390f35b348015610461575f80fd5b5061046a610dca565b6040516104779190612fee565b60405180910390f35b34801561048b575f80fd5b506104a660048036038101906104a19190613007565b610def565b6040516104b39190612e25565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190613032565b610e0c565b6040516104ef9190612e25565b60405180910390f35b348015610503575f80fd5b5061050c610e50565b6040516105199190612fc6565b60405180910390f35b34801561052d575f80fd5b50610536610e56565b6040516105439190612fee565b60405180910390f35b348015610557575f80fd5b50610572600480360381019061056d91906130ac565b610e7b565b005b34801561057f575f80fd5b50610588610edb565b6040516105959190613105565b60405180910390f35b3480156105a9575f80fd5b506105b2610ee3565b6040516105bf9190612e25565b60405180910390f35b3480156105d3575f80fd5b506105dc610ef6565b6040516105e99190612fc6565b60405180910390f35b3480156105fd575f80fd5b5061061860048036038101906106139190612f79565b610eff565b6040516106259190612e25565b60405180910390f35b348015610639575f80fd5b50610642610f35565b005b34801561064f575f80fd5b5061066a6004803603810190610665919061311e565b610f47565b005b348015610677575f80fd5b50610692600480360381019061068d9190613007565b610f5c565b005b34801561069f575f80fd5b506106a86110de565b6040516106b59190612fee565b60405180910390f35b3480156106c9575f80fd5b506106d2611103565b6040516106df9190612fc6565b60405180910390f35b3480156106f3575f80fd5b5061070e60048036038101906107099190613007565b611109565b60405161071b9190612e25565b60405180910390f35b34801561072f575f80fd5b5061074a60048036038101906107459190613007565b611126565b005b348015610757575f80fd5b506107606111be565b60405161076d9190612e25565b60405180910390f35b348015610781575f80fd5b5061079c60048036038101906107979190613007565b6111d4565b6040516107a99190612e25565b60405180910390f35b3480156107bd575f80fd5b506107c66111f1565b6040516107d39190612fc6565b60405180910390f35b3480156107e7575f80fd5b5061080260048036038101906107fd9190613007565b6111f7565b60405161080f9190612fc6565b60405180910390f35b348015610823575f80fd5b5061082c61123c565b005b348015610839575f80fd5b5061084261124f565b005b34801561084f575f80fd5b50610858611261565b005b348015610865575f80fd5b5061086e6112bd565b60405161087b9190612fc6565b60405180910390f35b34801561088f575f80fd5b506108986112c4565b6040516108a59190612fee565b60405180910390f35b3480156108b9575f80fd5b506108d460048036038101906108cf9190613007565b6112ec565b005b3480156108e1575f80fd5b506108fc60048036038101906108f7919061311e565b6113a5565b005b348015610909575f80fd5b506109126113f8565b60405161091f9190612ec8565b60405180910390f35b348015610933575f80fd5b5061094e6004803603810190610949919061311e565b611488565b005b34801561095b575f80fd5b506109766004803603810190610971919061311e565b6114db565b005b348015610983575f80fd5b5061099e60048036038101906109999190612f79565b61152e565b6040516109ab9190612e25565b60405180910390f35b3480156109bf575f80fd5b506109da60048036038101906109d59190612f79565b6115a3565b6040516109e79190612e25565b60405180910390f35b3480156109fb575f80fd5b50610a166004803603810190610a119190613149565b6115c0565b005b348015610a23575f80fd5b50610a3e6004803603810190610a399190613007565b6115e5565b005b348015610a4b575f80fd5b50610a5461169e565b604051610a619190612fc6565b60405180910390f35b348015610a75575f80fd5b50610a906004803603810190610a8b91906130ac565b6116a7565b005b348015610a9d575f80fd5b50610ab86004803603810190610ab39190613007565b611707565b005b348015610ac5575f80fd5b50610ae06004803603810190610adb9190613007565b611800565b604051610aed9190612e25565b60405180910390f35b348015610b01575f80fd5b50610b1c6004803603810190610b179190613174565b61181d565b604051610b299190612fc6565b60405180910390f35b348015610b3d575f80fd5b50610b4661189f565b005b348015610b53575f80fd5b50610b5c611be3565b604051610b699190612fc6565b60405180910390f35b348015610b7d575f80fd5b50610b86611be9565b604051610b939190612fee565b60405180910390f35b348015610ba7575f80fd5b50610bc26004803603810190610bbd919061311e565b611c0e565b005b348015610bcf575f80fd5b50610bea6004803603810190610be591906130ac565b611c59565b005b348015610bf7575f80fd5b50610c126004803603810190610c0d919061311e565b611cba565b005b348015610c1f575f80fd5b50610c28611ccc565b604051610c359190612fc6565b60405180910390f35b348015610c49575f80fd5b50610c646004803603810190610c5f9190613007565b611cd2565b005b348015610c71575f80fd5b50610c7a611d54565b604051610c879190612fc6565b60405180910390f35b60145f9054906101000a900460ff1681565b606060038054610cb1906131df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cdd906131df565b8015610d285780601f10610cff57610100808354040283529160200191610d28565b820191905f5260205f20905b815481529060010190602001808311610d0b57829003601f168201915b5050505050905090565b5f80610d3c611d5d565b9050610d49818585611d64565b600191505092915050565b601460019054906101000a900460ff1681565b610d6f611f27565b5f60145f6101000a81548160ff0219169083151502179055507f63e9bb35ae90a43113bc6f999f1c6395e88ee5f59560b46bd45815fe8560efae5f604051610db79190612e25565b60405180910390a1565b5f600254905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f602052805f5260405f205f915054906101000a900460ff1681565b5f610e18848484611fa5565b610e4584610e24611d5d565b84610e3688610e31611d5d565b61181d565b610e40919061323c565b611d64565b600190509392505050565b60075481565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e83611f27565b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6012905090565b601460029054906101000a900460ff1681565b5f600754905090565b5f80610f09611d5d565b9050610f2a818585610f1b858961181d565b610f25919061326f565b611d64565b600191505092915050565b610f3d611f27565b610f4561269f565b565b610f4f611f27565b610f593382612701565b50565b610f64611f27565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561100e5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561104657503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156110a1576001600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b7f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb68160016040516110d39291906132a2565b60405180910390a150565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6010602052805f5260405f205f915054906101000a900460ff1681565b61112e611f27565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f92d364d140f902817e5eaa71cedfe20bae2a3c66a2725cee3d9a51d73f052fb6815f6040516111b39291906132a2565b60405180910390a150565b5f600560149054906101000a900460ff16905090565b6011602052805f5260405f205f915054906101000a900460ff1681565b60065481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611244611f27565b61124d5f6128c4565b565b611257611f27565b61125f612987565b565b611269611f27565b600160145f6101000a81548160ff0219169083151502179055507f63e9bb35ae90a43113bc6f999f1c6395e88ee5f59560b46bd45815fe8560efae60016040516112b39190612e25565b60405180910390a1565b5f47905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112f4611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361132b575f80fd5b8060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f119ab5d6448433382f95f98698605fe2e806e811e886d5806cdf09cf8419db608160405161139a9190612fee565b60405180910390a150565b6113ad611f27565b6113b56129ea565b806006819055507f2cf6bdee09c3811c29dab74512064ee7a320add122b9150b166c88dd957602176006546040516113ed9190612fc6565b60405180910390a150565b606060048054611407906131df565b80601f0160208091040260200160405190810160405280929190818152602001828054611433906131df565b801561147e5780601f106114555761010080835404028352916020019161147e565b820191905f5260205f20905b81548152906001019060200180831161146157829003601f168201915b5050505050905090565b611490611f27565b6114986129ea565b806008819055507f4eb511c00ccadf52c50365c85aae30bb36e65d3eefbee2b03192e2b7d761376c6008546040516114d09190612fc6565b60405180910390a150565b6114e3611f27565b6114eb6129ea565b806007819055507f2cf6bdee09c3811c29dab74512064ee7a320add122b9150b166c88dd957602176007546040516115239190612fc6565b60405180910390a150565b5f80611538611d5d565b90505f611545828661181d565b90508381101561158a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158190613339565b60405180910390fd5b6115978286868403611d64565b60019250505092915050565b5f6115b66115af611d5d565b8484611fa5565b6001905092915050565b6115c8611f27565b80601460016101000a81548160ff02191690831515021790555050565b6115ed611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361165b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611652906133a1565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600854905090565b6116af611f27565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61170f611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613409565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6118a7611f27565b5f600267ffffffffffffffff8111156118c3576118c2613427565b5b6040519080825280602002602001820160405280156118f15781602001602082028036833780820191505090505b50905030815f8151811061190857611907613454565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119d09190613495565b816001815181106119e4576119e3613454565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f611a28306111f7565b90505f8103611a38575050611be1565b5f4790503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611a989291906134c0565b6020604051808303815f875af1158015611ab4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad891906134fb565b50600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8630426040518663ffffffff1660e01b8152600401611b3b95949392919061361f565b5f604051808303815f87803b158015611b52575f80fd5b505af1158015611b64573d5f803e3d5ffd5b505050505f8147611b75919061323c565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611bdb573d5f803e3d5ffd5b50505050505b565b60085481565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c16611f27565b806013819055507f393f89ef106cb116df007cc6bd2aa044a0996d181c9bc86c7c80f2b9b87b6850601354604051611c4e9190612fc6565b60405180910390a150565b611c61611f27565b8015600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611cc2611f27565b8060098190555050565b60095481565b611cda611f27565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906136e7565b60405180910390fd5b611d51816128c4565b50565b5f600654905090565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990613775565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3790613803565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1a9190612fc6565b60405180910390a3505050565b611f2f611d5d565b73ffffffffffffffffffffffffffffffffffffffff16611f4d6112c4565b73ffffffffffffffffffffffffffffffffffffffff1614611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a9061386b565b60405180910390fd5b565b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612030576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612027906138d3565b60405180910390fd5b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b2906138d3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090613961565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e906139ef565b60405180910390fd5b60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580612234575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561228c57600854831115801561224c575060095483115b61228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613a7d565b60405180910390fd5b5b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561232f5750600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123885750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156123a05750601460019054906101000a900460ff165b156124df5760145f9054906101000a900460ff166123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea90613ae5565b60405180910390fd5b60115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661249a576013548361244e866111f7565b612458919061326f565b1115612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090613b4d565b60405180910390fd5b5b5f6103e8600654856124ac9190613b6b565b6124b69190613bd9565b90506124c3863083612a34565b6124d9868683876124d4919061323c565b612a34565b50612698565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156125825750600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125db5750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125f35750601460019054906101000a900460ff165b1561268b5760145f9054906101000a900460ff16612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d90613ae5565b60405180910390fd5b5f6103e8600754856126589190613b6b565b6126629190613bd9565b905061266f863083612a34565b61268586868387612680919061323c565b612a34565b50612697565b612696858585612a34565b5b5b5050505050565b6126a7612ca0565b5f600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6126ea611d5d565b6040516126f79190612fee565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690613c79565b60405180910390fd5b61277a825f83612ce9565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f490613d07565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128ac9190612fc6565b60405180910390a36128bf835f84612e06565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61298f6129ea565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586129d3611d5d565b6040516129e09190612fee565b60405180910390a1565b6129f26111be565b15612a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2990613d6f565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9990613961565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b07906139ef565b60405180910390fd5b612b1b838383612ce9565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9590613dfd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c879190612fc6565b60405180910390a3612c9a848484612e06565b50505050565b612ca86111be565b612ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cde90613e65565b60405180910390fd5b565b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6b906138d3565b60405180910390fd5b82600e5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df6906138d3565b60405180910390fd5b5050505050565b505050565b5f8115159050919050565b612e1f81612e0b565b82525050565b5f602082019050612e385f830184612e16565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e75578082015181840152602081019050612e5a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612e9a82612e3e565b612ea48185612e48565b9350612eb4818560208601612e58565b612ebd81612e80565b840191505092915050565b5f6020820190508181035f830152612ee08184612e90565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f1582612eec565b9050919050565b612f2581612f0b565b8114612f2f575f80fd5b50565b5f81359050612f4081612f1c565b92915050565b5f819050919050565b612f5881612f46565b8114612f62575f80fd5b50565b5f81359050612f7381612f4f565b92915050565b5f8060408385031215612f8f57612f8e612ee8565b5b5f612f9c85828601612f32565b9250506020612fad85828601612f65565b9150509250929050565b612fc081612f46565b82525050565b5f602082019050612fd95f830184612fb7565b92915050565b612fe881612f0b565b82525050565b5f6020820190506130015f830184612fdf565b92915050565b5f6020828403121561301c5761301b612ee8565b5b5f61302984828501612f32565b91505092915050565b5f805f6060848603121561304957613048612ee8565b5b5f61305686828701612f32565b935050602061306786828701612f32565b925050604061307886828701612f65565b9150509250925092565b61308b81612e0b565b8114613095575f80fd5b50565b5f813590506130a681613082565b92915050565b5f80604083850312156130c2576130c1612ee8565b5b5f6130cf85828601612f32565b92505060206130e085828601613098565b9150509250929050565b5f60ff82169050919050565b6130ff816130ea565b82525050565b5f6020820190506131185f8301846130f6565b92915050565b5f6020828403121561313357613132612ee8565b5b5f61314084828501612f65565b91505092915050565b5f6020828403121561315e5761315d612ee8565b5b5f61316b84828501613098565b91505092915050565b5f806040838503121561318a57613189612ee8565b5b5f61319785828601612f32565b92505060206131a885828601612f32565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806131f657607f821691505b602082108103613209576132086131b2565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61324682612f46565b915061325183612f46565b92508282039050818111156132695761326861320f565b5b92915050565b5f61327982612f46565b915061328483612f46565b925082820190508082111561329c5761329b61320f565b5b92915050565b5f6040820190506132b55f830185612fdf565b6132c26020830184612e16565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613323602583612e48565b915061332e826132c9565b604082019050919050565b5f6020820190508181035f83015261335081613317565b9050919050565b7f496e76616c6964205061697220616464726573730000000000000000000000005f82015250565b5f61338b601483612e48565b915061339682613357565b602082019050919050565b5f6020820190508181035f8301526133b88161337f565b9050919050565b7f496e76616c696420556e697377617020726f75746572206164647265737300005f82015250565b5f6133f3601e83612e48565b91506133fe826133bf565b602082019050919050565b5f6020820190508181035f830152613420816133e7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061348f81612f1c565b92915050565b5f602082840312156134aa576134a9612ee8565b5b5f6134b784828501613481565b91505092915050565b5f6040820190506134d35f830185612fdf565b6134e06020830184612fb7565b9392505050565b5f815190506134f581613082565b92915050565b5f602082840312156135105761350f612ee8565b5b5f61351d848285016134e7565b91505092915050565b5f819050919050565b5f819050919050565b5f61355261354d61354884613526565b61352f565b612f46565b9050919050565b61356281613538565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61359a81612f0b565b82525050565b5f6135ab8383613591565b60208301905092915050565b5f602082019050919050565b5f6135cd82613568565b6135d78185613572565b93506135e283613582565b805f5b838110156136125781516135f988826135a0565b9750613604836135b7565b9250506001810190506135e5565b5085935050505092915050565b5f60a0820190506136325f830188612fb7565b61363f6020830187613559565b818103604083015261365181866135c3565b90506136606060830185612fdf565b61366d6080830184612fb7565b9695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6136d1602683612e48565b91506136dc82613677565b604082019050919050565b5f6020820190508181035f8301526136fe816136c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61375f602483612e48565b915061376a82613705565b604082019050919050565b5f6020820190508181035f83015261378c81613753565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137ed602283612e48565b91506137f882613793565b604082019050919050565b5f6020820190508181035f83015261381a816137e1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613855602083612e48565b915061386082613821565b602082019050919050565b5f6020820190508181035f83015261388281613849565b9050919050565b7f4164647265737320686173206265656e20426c6f636b6c6973746564000000005f82015250565b5f6138bd601c83612e48565b91506138c882613889565b602082019050919050565b5f6020820190508181035f8301526138ea816138b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61394b602583612e48565b9150613956826138f1565b604082019050919050565b5f6020820190508181035f8301526139788161393f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139d9602383612e48565b91506139e48261397f565b604082019050919050565b5f6020820190508181035f830152613a06816139cd565b9050919050565b7f5458204c696d69743a2043616e6e6f74207472616e73666572206d6f726520745f8201527f68616e20746f6b656e7354584c696d6974000000000000000000000000000000602082015250565b5f613a67603183612e48565b9150613a7282613a0d565b604082019050919050565b5f6020820190508181035f830152613a9481613a5b565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564000000000000000000005f82015250565b5f613acf601683612e48565b9150613ada82613a9b565b602082019050919050565b5f6020820190508181035f830152613afc81613ac3565b9050919050565b7f4d617820486f6c64696e670000000000000000000000000000000000000000005f82015250565b5f613b37600b83612e48565b9150613b4282613b03565b602082019050919050565b5f6020820190508181035f830152613b6481613b2b565b9050919050565b5f613b7582612f46565b9150613b8083612f46565b9250828202613b8e81612f46565b91508282048414831517613ba557613ba461320f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613be382612f46565b9150613bee83612f46565b925082613bfe57613bfd613bac565b5b828204905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c63602183612e48565b9150613c6e82613c09565b604082019050919050565b5f6020820190508181035f830152613c9081613c57565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613cf1602283612e48565b9150613cfc82613c97565b604082019050919050565b5f6020820190508181035f830152613d1e81613ce5565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f613d59601083612e48565b9150613d6482613d25565b602082019050919050565b5f6020820190508181035f830152613d8681613d4d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613de7602683612e48565b9150613df282613d8d565b604082019050919050565b5f6020820190508181035f830152613e1481613ddb565b9050919050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f613e4f601483612e48565b9150613e5a82613e1b565b602082019050919050565b5f6020820190508181035f830152613e7c81613e43565b905091905056fea2646970667358221220d644c44cb08cc27f441211d2a0a4a2c720bddba41858d1c1f495a7b98ae2bfb764736f6c63430008160033

Deployed Bytecode Sourcemap

28724:9314:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29550:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17023:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19515:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29585:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30783:129;;;;;;;;;;;;;:::i;:::-;;18143:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29028:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29235:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35510:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28876:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29106:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31887:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17985:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35794:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34186:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21041:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33082:65;;;;;;;;;;;;;:::i;:::-;;37944:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31386:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29070:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29511:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29291:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31710:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8139:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29350:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28837:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18314:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10871:103;;;;;;;;;;;;;:::i;:::-;;33013:61;;;;;;;;;;;;;:::i;:::-;;30649:126;;;;;;;;;;;;;:::i;:::-;;34287:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10223:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31033:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32656:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17242:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33767:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32817:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21814:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35317:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30920:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33527:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33979:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32278:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33155:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29185:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18994:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34480:829;;;;;;;;;;;;;:::i;:::-;;28916:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29415:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32471:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32090:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31255:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28951:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11129:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34087:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29550:28;;;;;;;;;;;;;:::o;17023:100::-;17077:13;17110:5;17103:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17023:100;:::o;19515:242::-;19634:4;19656:13;19672:12;:10;:12::i;:::-;19656:28;;19695:32;19704:5;19711:7;19720:6;19695:8;:32::i;:::-;19745:4;19738:11;;;19515:242;;;;:::o;29585:24::-;;;;;;;;;;;;;:::o;30783:129::-;10109:13;:11;:13::i;:::-;30856:5:::1;30837:16;;:24;;;;;;;;;;;;;;;;;;30877:27;30898:5;30877:27;;;;;;:::i;:::-;;;;;;;;30783:129::o:0;18143:108::-;18204:7;18231:12;;18224:19;;18143:108;:::o;29028:35::-;;;;;;;;;;;;;:::o;29235:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;35510:276::-;35633:4;35650:27;35660:4;35666:2;35670:6;35650:9;:27::i;:::-;35688:68;35697:4;35703:12;:10;:12::i;:::-;35749:6;35717:29;35727:4;35733:12;:10;:12::i;:::-;35717:9;:29::i;:::-;:38;;;;:::i;:::-;35688:8;:68::i;:::-;35774:4;35767:11;;35510:276;;;;;:::o;28876:32::-;;;;:::o;29106:70::-;;;;;;;;;;;;;:::o;31887:195::-;10109:13;:11;:13::i;:::-;32066:8:::1;32021:24;:42;32046:16;32021:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31887:195:::0;;:::o;17985:93::-;18043:5;18068:2;18061:9;;17985:93;:::o;35794:25::-;;;;;;;;;;;;;:::o;34186:93::-;34233:7;34260:11;;34253:18;;34186:93;:::o;21041:270::-;21156:4;21178:13;21194:12;:10;:12::i;:::-;21178:28;;21217:64;21226:5;21233:7;21270:10;21242:25;21252:5;21259:7;21242:9;:25::i;:::-;:38;;;;:::i;:::-;21217:8;:64::i;:::-;21299:4;21292:11;;;21041:270;;;;:::o;33082:65::-;10109:13;:11;:13::i;:::-;33129:10:::1;:8;:10::i;:::-;33082:65::o:0;37944:91::-;10109:13;:11;:13::i;:::-;38002:25:::1;38008:10;38020:6;38002:5;:25::i;:::-;37944:91:::0;:::o;31386:316::-;10109:13;:11;:13::i;:::-;31489:12:::1;;;;;;;;;;;31477:24;;:8;:24;;;;31476:80;;;;;31540:14;;;;;;;;;;;31520:35;;:8;:35;;;;31476:80;:124;;;;;31594:4;31574:25;;:8;:25;;;;31476:124;31458:182;;;31636:4;31612:11;:21;31624:8;31612:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31458:182;31656:38;31679:8;31689:4;31656:38;;;;;;;:::i;:::-;;;;;;;;31386:316:::0;:::o;29070:27::-;;;;;;;;;;;;;:::o;29511:30::-;;;;:::o;29291:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;31710:169::-;10109:13;:11;:13::i;:::-;31811:5:::1;31787:11;:21;31799:8;31787:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31832:39;31855:8;31865:5;31832:39;;;;;;;:::i;:::-;;;;;;;;31710:169:::0;:::o;8139:86::-;8186:4;8210:7;;;;;;;;;;;8203:14;;8139:86;:::o;29350:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;28837:31::-;;;;:::o;18314:177::-;18433:7;18465:9;:18;18475:7;18465:18;;;;;;;;;;;;;;;;18458:25;;18314:177;;;:::o;10871:103::-;10109:13;:11;:13::i;:::-;10936:30:::1;10963:1;10936:18;:30::i;:::-;10871:103::o:0;33013:61::-;10109:13;:11;:13::i;:::-;33058:8:::1;:6;:8::i;:::-;33013:61::o:0;30649:126::-;10109:13;:11;:13::i;:::-;30721:4:::1;30702:16;;:23;;;;;;;;;;;;;;;;;;30741:26;30762:4;30741:26;;;;;;:::i;:::-;;;;;;;;30649:126::o:0;34287:110::-;34341:7;34368:21;34361:28;;34287:110;:::o;10223:87::-;10269:7;10296:6;;;;;;;;;;;10289:13;;10223:87;:::o;31033:214::-;10109:13;:11;:13::i;:::-;31144:1:::1;31120:26;;:12;:26;;::::0;31112:35:::1;;;::::0;::::1;;31178:12;31158:17;;:32;;;;;;;;;;;;;;;;;;31206:33;31226:12;31206:33;;;;;;:::i;:::-;;;;;;;;31033:214:::0;:::o;32656:153::-;10109:13;:11;:13::i;:::-;7744:19:::1;:17;:19::i;:::-;32755:8:::2;32742:10;:21;;;;32779:22;32790:10;;32779:22;;;;;;:::i;:::-;;;;;;;;32656:153:::0;:::o;17242:104::-;17298:13;17331:7;17324:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17242:104;:::o;33767:204::-;10109:13;:11;:13::i;:::-;7744:19:::1;:17;:19::i;:::-;33905:14:::2;33889:13;:30;;;;33935:28;33949:13;;33935:28;;;;;;:::i;:::-;;;;;;;;33767:204:::0;:::o;32817:188::-;10109:13;:11;:13::i;:::-;7744:19:::1;:17;:19::i;:::-;32950:8:::2;32936:11;:22;;;;32974:23;32985:11;;32974:23;;;;;;:::i;:::-;;;;;;;;32817:188:::0;:::o;21814:505::-;21934:4;21956:13;21972:12;:10;:12::i;:::-;21956:28;;21995:24;22022:25;22032:5;22039:7;22022:9;:25::i;:::-;21995:52;;22100:15;22080:16;:35;;22058:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22216:60;22225:5;22232:7;22260:15;22241:16;:34;22216:8;:60::i;:::-;22307:4;22300:11;;;;21814:505;;;;:::o;35317:185::-;35415:4;35437:35;35447:12;:10;:12::i;:::-;35461:2;35465:6;35437:9;:35::i;:::-;35490:4;35483:11;;35317:185;;;;:::o;30920:105::-;10109:13;:11;:13::i;:::-;31008:9:::1;30993:12;;:24;;;;;;;;;;;;;;;;;;30920:105:::0;:::o;33527:232::-;10109:13;:11;:13::i;:::-;33679:1:::1;33648:33;;:19;:33;;::::0;33640:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33732:19;33717:12;;:34;;;;;;;;;;;;;;;;;;33527:232:::0;:::o;33979:100::-;34031:7;34058:13;;34051:20;;33979:100;:::o;32278:185::-;10109:13;:11;:13::i;:::-;32447:8:::1;32406:20;:38;32427:16;32406:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;32278:185:::0;;:::o;33155:364::-;10109:13;:11;:13::i;:::-;33327:1:::1;33294:35;;:21;:35;;::::0;33272:115:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33434:21;33398:14;;:58;;;;;;;;;;;;;;;;;;33490:21;33467:20;;:44;;;;;;;;;;;;;;;;;;33155:364:::0;:::o;29185:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;18994:201::-;19128:7;19160:11;:18;19172:5;19160:18;;;;;;;;;;;;;;;:27;19179:7;19160:27;;;;;;;;;;;;;;;;19153:34;;18994:201;;;;:::o;34480:829::-;10109:13;:11;:13::i;:::-;34531:21:::1;34569:1;34555:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34531:40;;34600:4;34582;34587:1;34582:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34626:14;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34616:4;34621:1;34616:7;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;::::0;::::1;34660:28;34691:24;34709:4;34691:9;:24::i;:::-;34660:55;;34755:1;34731:20;:25:::0;34727:38:::1;;34758:7;;;;34727:38;34777:22;34802:21;34777:46;;34848:4;:12;;;34869:14;;;;;;;;;;;34886:20;34848:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34920:14;;;;;;;;;;;:65;;;35000:20;35035:1;35051:4;35078;35098:15;34920:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35137:17;35181:14;35157:21;:38;;;;:::i;:::-;35137:58;;35263:17;;;;;;;;;;;35255:35;;:46;35291:9;35255:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34520:789;;;;10133:1;34480:829::o:0;28916:28::-;;;;:::o;29415:87::-;;;;;;;;;;;;;:::o;32471:177::-;10109:13;:11;:13::i;:::-;32569:14:::1;32551:15;:32;;;;32599:41;32624:15;;32599:41;;;;;;:::i;:::-;;;;;;;;32471:177:::0;:::o;32090:180::-;10109:13;:11;:13::i;:::-;32254:8:::1;32253:9;32215:17;:35;32233:16;32215:35;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;32090:180:::0;;:::o;31255:123::-;10109:13;:11;:13::i;:::-;31354:16:::1;31336:15;:34;;;;31255:123:::0;:::o;28951:30::-;;;;:::o;11129:238::-;10109:13;:11;:13::i;:::-;11252:1:::1;11232:22;;:8;:22;;::::0;11210:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11331:28;11350:8;11331:18;:28::i;:::-;11129:238:::0;:::o;34087:91::-;34133:7;34160:10;;34153:17;;34087:91;:::o;6416:98::-;6469:7;6496:10;6489:17;;6416:98;:::o;25947:380::-;26100:1;26083:19;;:5;:19;;;26075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26181:1;26162:21;;:7;:21;;;26154:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26265:6;26235:11;:18;26247:5;26235:18;;;;;;;;;;;;;;;:27;26254:7;26235:27;;;;;;;;;;;;;;;:36;;;;26303:7;26287:32;;26296:5;26287:32;;;26312:6;26287:32;;;;;;:::i;:::-;;;;;;;;25947:380;;;:::o;10388:132::-;10463:12;:10;:12::i;:::-;10452:23;;:7;:5;:7::i;:::-;:23;;;10444:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10388:132::o;35828:1875::-;35958:4;30009:11;:21;30021:8;30009:21;;;;;;;;;;;;;;;;;;;;;;;;;30008:22;30000:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35981:2:::1;30009:11;:21;30021:8;30009:21;;;;;;;;;;;;;;;;;;;;;;;;;30008:22;30000:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;36020:1:::2;36004:18;;:4;:18;;::::0;35996:68:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;36097:1;36083:16;;:2;:16;;::::0;36075:64:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;36155:20;:24;36176:2;36155:24;;;;;;;;;;;;;;;;;;;;;;;;;36154:25;:56;;;;36184:20;:26;36205:4;36184:26;;;;;;;;;;;;;;;;;;;;;;;;;36183:27;36154:56;36150:237;;;36261:13;;36251:6;:23;;:51;;;;;36287:15;;36278:6;:24;36251:51;36225:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;36150:237;36495:12;;;;;;;;;;;36487:20;;:4;:20;;;:59;;;;;36525:17;:21;36543:2;36525:21;;;;;;;;;;;;;;;;;;;;;;;;;36524:22;36487:59;:105;;;;;36577:14;;;;;;;;;;;36563:29;;:2;:29;;;;36487:105;:134;;;;;36609:12;;;;;;;;;;;36487:134;36469:1227;;;36656:16;;;;;;;;;;;36648:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36721:24;:28;36746:2;36721:28;;;;;;;;;;;;;;;;;;;;;;;;;36716:178;;36824:15;;36814:6;36798:13;36808:2;36798:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;36768:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;36716:178;36911:19;28826:4;36943:10;;36934:6;:19;;;;:::i;:::-;36933:33;;;;:::i;:::-;36911:55;;36981:49;36997:4;37011;37018:11;36981:15;:49::i;:::-;37045:47;37061:4;37067:2;37080:11;37071:6;:20;;;;:::i;:::-;37045:15;:47::i;:::-;36633:471;36469:1227;;;37209:12;;;;;;;;;;;37203:18;;:2;:18;;;:59;;;;;37239:17;:23;37257:4;37239:23;;;;;;;;;;;;;;;;;;;;;;;;;37238:24;37203:59;:107;;;;;37295:14;;;;;;;;;;;37279:31;;:4;:31;;;;37203:107;:136;;;;;37327:12;;;;;;;;;;;37203:136;37185:511;;;37374:16;;;;;;;;;;;37366:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37434:19;28826:4;37466:11;;37457:6;:20;;;;:::i;:::-;37456:34;;;;:::i;:::-;37434:56;;37507:49;37523:4;37537;37544:11;37507:15;:49::i;:::-;37571:47;37587:4;37593:2;37606:11;37597:6;:20;;;;:::i;:::-;37571:15;:47::i;:::-;37351:279;37185:511;;;37651:33;37667:4;37673:2;37677:6;37651:15;:33::i;:::-;37185:511;36469:1227;30074:1:::1;35828:1875:::0;;;;:::o;8994:120::-;8003:16;:14;:16::i;:::-;9063:5:::1;9053:7;;:15;;;;;;;;;;;;;;;;;;9084:22;9093:12;:10;:12::i;:::-;9084:22;;;;;;:::i;:::-;;;;;;;;8994:120::o:0;24834:675::-;24937:1;24918:21;;:7;:21;;;24910:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24990:49;25011:7;25028:1;25032:6;24990:20;:49::i;:::-;25052:22;25077:9;:18;25087:7;25077:18;;;;;;;;;;;;;;;;25052:43;;25132:6;25114:14;:24;;25106:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25251:6;25234:14;:23;25213:9;:18;25223:7;25213:18;;;;;;;;;;;;;;;:44;;;;25368:6;25352:12;;:22;;;;;;;;;;;25429:1;25403:37;;25412:7;25403:37;;;25433:6;25403:37;;;;;;:::i;:::-;;;;;;;;25453:48;25473:7;25490:1;25494:6;25453:19;:48::i;:::-;24899:610;24834:675;;:::o;11527:191::-;11601:16;11620:6;;;;;;;;;;;11601:25;;11646:8;11637:6;;:17;;;;;;;;;;;;;;;;;;11701:8;11670:40;;11691:8;11670:40;;;;;;;;;;;;11590:128;11527:191;:::o;8735:118::-;7744:19;:17;:19::i;:::-;8805:4:::1;8795:7;;:14;;;;;;;;;;;;;;;;;;8825:20;8832:12;:10;:12::i;:::-;8825:20;;;;;;:::i;:::-;;;;;;;;8735:118::o:0;8298:108::-;8369:8;:6;:8::i;:::-;8368:9;8360:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8298:108::o;22789:877::-;22936:1;22920:18;;:4;:18;;;22912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23013:1;22999:16;;:2;:16;;;22991:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23068:38;23089:4;23095:2;23099:6;23068:20;:38::i;:::-;23119:19;23141:9;:15;23151:4;23141:15;;;;;;;;;;;;;;;;23119:37;;23204:6;23189:11;:21;;23167:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;23344:6;23330:11;:20;23312:9;:15;23322:4;23312:15;;;;;;;;;;;;;;;:38;;;;23547:6;23530:9;:13;23540:2;23530:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23597:2;23582:26;;23591:4;23582:26;;;23601:6;23582:26;;;;;;:::i;:::-;;;;;;;;23621:37;23641:4;23647:2;23651:6;23621:19;:37::i;:::-;22901:765;22789:877;;;:::o;8483:108::-;8550:8;:6;:8::i;:::-;8542:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;8483:108::o;37711:225::-;37893:4;30009:11;:21;30021:8;30009:21;;;;;;;;;;;;;;;;;;;;;;;;;30008:22;30000:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;37925:2:::1;30009:11;:21;30021:8;30009:21;;;;;;;;;;;;;;;;;;;;;;;;;30008:22;30000:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30074:1;37711:225:::0;;;;:::o;28449:124::-;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1857:117::-;1966:1;1963;1956:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:329::-;4209:6;4258:2;4246:9;4237:7;4233:23;4229:32;4226:119;;;4264:79;;:::i;:::-;4226:119;4384:1;4409:53;4454:7;4445:6;4434:9;4430:22;4409:53;:::i;:::-;4399:63;;4355:117;4150:329;;;;:::o;4485:619::-;4562:6;4570;4578;4627:2;4615:9;4606:7;4602:23;4598:32;4595:119;;;4633:79;;:::i;:::-;4595:119;4753:1;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4724:117;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;4485:619;;;;;:::o;5110:116::-;5180:21;5195:5;5180:21;:::i;:::-;5173:5;5170:32;5160:60;;5216:1;5213;5206:12;5160:60;5110:116;:::o;5232:133::-;5275:5;5313:6;5300:20;5291:29;;5329:30;5353:5;5329:30;:::i;:::-;5232:133;;;;:::o;5371:468::-;5436:6;5444;5493:2;5481:9;5472:7;5468:23;5464:32;5461:119;;;5499:79;;:::i;:::-;5461:119;5619:1;5644:53;5689:7;5680:6;5669:9;5665:22;5644:53;:::i;:::-;5634:63;;5590:117;5746:2;5772:50;5814:7;5805:6;5794:9;5790:22;5772:50;:::i;:::-;5762:60;;5717:115;5371:468;;;;;:::o;5845:86::-;5880:7;5920:4;5913:5;5909:16;5898:27;;5845:86;;;:::o;5937:112::-;6020:22;6036:5;6020:22;:::i;:::-;6015:3;6008:35;5937:112;;:::o;6055:214::-;6144:4;6182:2;6171:9;6167:18;6159:26;;6195:67;6259:1;6248:9;6244:17;6235:6;6195:67;:::i;:::-;6055:214;;;;:::o;6275:329::-;6334:6;6383:2;6371:9;6362:7;6358:23;6354:32;6351:119;;;6389:79;;:::i;:::-;6351:119;6509:1;6534:53;6579:7;6570:6;6559:9;6555:22;6534:53;:::i;:::-;6524:63;;6480:117;6275:329;;;;:::o;6610:323::-;6666:6;6715:2;6703:9;6694:7;6690:23;6686:32;6683:119;;;6721:79;;:::i;:::-;6683:119;6841:1;6866:50;6908:7;6899:6;6888:9;6884:22;6866:50;:::i;:::-;6856:60;;6812:114;6610:323;;;;:::o;6939:474::-;7007:6;7015;7064:2;7052:9;7043:7;7039:23;7035:32;7032:119;;;7070:79;;:::i;:::-;7032:119;7190:1;7215:53;7260:7;7251:6;7240:9;7236:22;7215:53;:::i;:::-;7205:63;;7161:117;7317:2;7343:53;7388:7;7379:6;7368:9;7364:22;7343:53;:::i;:::-;7333:63;;7288:118;6939:474;;;;;:::o;7419:180::-;7467:77;7464:1;7457:88;7564:4;7561:1;7554:15;7588:4;7585:1;7578:15;7605:320;7649:6;7686:1;7680:4;7676:12;7666:22;;7733:1;7727:4;7723:12;7754:18;7744:81;;7810:4;7802:6;7798:17;7788:27;;7744:81;7872:2;7864:6;7861:14;7841:18;7838:38;7835:84;;7891:18;;:::i;:::-;7835:84;7656:269;7605:320;;;:::o;7931:180::-;7979:77;7976:1;7969:88;8076:4;8073:1;8066:15;8100:4;8097:1;8090:15;8117:194;8157:4;8177:20;8195:1;8177:20;:::i;:::-;8172:25;;8211:20;8229:1;8211:20;:::i;:::-;8206:25;;8255:1;8252;8248:9;8240:17;;8279:1;8273:4;8270:11;8267:37;;;8284:18;;:::i;:::-;8267:37;8117:194;;;;:::o;8317:191::-;8357:3;8376:20;8394:1;8376:20;:::i;:::-;8371:25;;8410:20;8428:1;8410:20;:::i;:::-;8405:25;;8453:1;8450;8446:9;8439:16;;8474:3;8471:1;8468:10;8465:36;;;8481:18;;:::i;:::-;8465:36;8317:191;;;;:::o;8514:320::-;8629:4;8667:2;8656:9;8652:18;8644:26;;8680:71;8748:1;8737:9;8733:17;8724:6;8680:71;:::i;:::-;8761:66;8823:2;8812:9;8808:18;8799:6;8761:66;:::i;:::-;8514:320;;;;;:::o;8840:224::-;8980:34;8976:1;8968:6;8964:14;8957:58;9049:7;9044:2;9036:6;9032:15;9025:32;8840:224;:::o;9070:366::-;9212:3;9233:67;9297:2;9292:3;9233:67;:::i;:::-;9226:74;;9309:93;9398:3;9309:93;:::i;:::-;9427:2;9422:3;9418:12;9411:19;;9070:366;;;:::o;9442:419::-;9608:4;9646:2;9635:9;9631:18;9623:26;;9695:9;9689:4;9685:20;9681:1;9670:9;9666:17;9659:47;9723:131;9849:4;9723:131;:::i;:::-;9715:139;;9442:419;;;:::o;9867:170::-;10007:22;10003:1;9995:6;9991:14;9984:46;9867:170;:::o;10043:366::-;10185:3;10206:67;10270:2;10265:3;10206:67;:::i;:::-;10199:74;;10282:93;10371:3;10282:93;:::i;:::-;10400:2;10395:3;10391:12;10384:19;;10043:366;;;:::o;10415:419::-;10581:4;10619:2;10608:9;10604:18;10596:26;;10668:9;10662:4;10658:20;10654:1;10643:9;10639:17;10632:47;10696:131;10822:4;10696:131;:::i;:::-;10688:139;;10415:419;;;:::o;10840:180::-;10980:32;10976:1;10968:6;10964:14;10957:56;10840:180;:::o;11026:366::-;11168:3;11189:67;11253:2;11248:3;11189:67;:::i;:::-;11182:74;;11265:93;11354:3;11265:93;:::i;:::-;11383:2;11378:3;11374:12;11367:19;;11026:366;;;:::o;11398:419::-;11564:4;11602:2;11591:9;11587:18;11579:26;;11651:9;11645:4;11641:20;11637:1;11626:9;11622:17;11615:47;11679:131;11805:4;11679:131;:::i;:::-;11671:139;;11398:419;;;:::o;11823:180::-;11871:77;11868:1;11861:88;11968:4;11965:1;11958:15;11992:4;11989:1;11982:15;12009:180;12057:77;12054:1;12047:88;12154:4;12151:1;12144:15;12178:4;12175:1;12168:15;12195:143;12252:5;12283:6;12277:13;12268:22;;12299:33;12326:5;12299:33;:::i;:::-;12195:143;;;;:::o;12344:351::-;12414:6;12463:2;12451:9;12442:7;12438:23;12434:32;12431:119;;;12469:79;;:::i;:::-;12431:119;12589:1;12614:64;12670:7;12661:6;12650:9;12646:22;12614:64;:::i;:::-;12604:74;;12560:128;12344:351;;;;:::o;12701:332::-;12822:4;12860:2;12849:9;12845:18;12837:26;;12873:71;12941:1;12930:9;12926:17;12917:6;12873:71;:::i;:::-;12954:72;13022:2;13011:9;13007:18;12998:6;12954:72;:::i;:::-;12701:332;;;;;:::o;13039:137::-;13093:5;13124:6;13118:13;13109:22;;13140:30;13164:5;13140:30;:::i;:::-;13039:137;;;;:::o;13182:345::-;13249:6;13298:2;13286:9;13277:7;13273:23;13269:32;13266:119;;;13304:79;;:::i;:::-;13266:119;13424:1;13449:61;13502:7;13493:6;13482:9;13478:22;13449:61;:::i;:::-;13439:71;;13395:125;13182:345;;;;:::o;13533:85::-;13578:7;13607:5;13596:16;;13533:85;;;:::o;13624:60::-;13652:3;13673:5;13666:12;;13624:60;;;:::o;13690:158::-;13748:9;13781:61;13799:42;13808:32;13834:5;13808:32;:::i;:::-;13799:42;:::i;:::-;13781:61;:::i;:::-;13768:74;;13690:158;;;:::o;13854:147::-;13949:45;13988:5;13949:45;:::i;:::-;13944:3;13937:58;13854:147;;:::o;14007:114::-;14074:6;14108:5;14102:12;14092:22;;14007:114;;;:::o;14127:184::-;14226:11;14260:6;14255:3;14248:19;14300:4;14295:3;14291:14;14276:29;;14127:184;;;;:::o;14317:132::-;14384:4;14407:3;14399:11;;14437:4;14432:3;14428:14;14420:22;;14317:132;;;:::o;14455:108::-;14532:24;14550:5;14532:24;:::i;:::-;14527:3;14520:37;14455:108;;:::o;14569:179::-;14638:10;14659:46;14701:3;14693:6;14659:46;:::i;:::-;14737:4;14732:3;14728:14;14714:28;;14569:179;;;;:::o;14754:113::-;14824:4;14856;14851:3;14847:14;14839:22;;14754:113;;;:::o;14903:732::-;15022:3;15051:54;15099:5;15051:54;:::i;:::-;15121:86;15200:6;15195:3;15121:86;:::i;:::-;15114:93;;15231:56;15281:5;15231:56;:::i;:::-;15310:7;15341:1;15326:284;15351:6;15348:1;15345:13;15326:284;;;15427:6;15421:13;15454:63;15513:3;15498:13;15454:63;:::i;:::-;15447:70;;15540:60;15593:6;15540:60;:::i;:::-;15530:70;;15386:224;15373:1;15370;15366:9;15361:14;;15326:284;;;15330:14;15626:3;15619:10;;15027:608;;;14903:732;;;;:::o;15641:831::-;15904:4;15942:3;15931:9;15927:19;15919:27;;15956:71;16024:1;16013:9;16009:17;16000:6;15956:71;:::i;:::-;16037:80;16113:2;16102:9;16098:18;16089:6;16037:80;:::i;:::-;16164:9;16158:4;16154:20;16149:2;16138:9;16134:18;16127:48;16192:108;16295:4;16286:6;16192:108;:::i;:::-;16184:116;;16310:72;16378:2;16367:9;16363:18;16354:6;16310:72;:::i;:::-;16392:73;16460:3;16449:9;16445:19;16436:6;16392:73;:::i;:::-;15641:831;;;;;;;;:::o;16478:225::-;16618:34;16614:1;16606:6;16602:14;16595:58;16687:8;16682:2;16674:6;16670:15;16663:33;16478:225;:::o;16709:366::-;16851:3;16872:67;16936:2;16931:3;16872:67;:::i;:::-;16865:74;;16948:93;17037:3;16948:93;:::i;:::-;17066:2;17061:3;17057:12;17050:19;;16709:366;;;:::o;17081:419::-;17247:4;17285:2;17274:9;17270:18;17262:26;;17334:9;17328:4;17324:20;17320:1;17309:9;17305:17;17298:47;17362:131;17488:4;17362:131;:::i;:::-;17354:139;;17081:419;;;:::o;17506:223::-;17646:34;17642:1;17634:6;17630:14;17623:58;17715:6;17710:2;17702:6;17698:15;17691:31;17506:223;:::o;17735:366::-;17877:3;17898:67;17962:2;17957:3;17898:67;:::i;:::-;17891:74;;17974:93;18063:3;17974:93;:::i;:::-;18092:2;18087:3;18083:12;18076:19;;17735:366;;;:::o;18107:419::-;18273:4;18311:2;18300:9;18296:18;18288:26;;18360:9;18354:4;18350:20;18346:1;18335:9;18331:17;18324:47;18388:131;18514:4;18388:131;:::i;:::-;18380:139;;18107:419;;;:::o;18532:221::-;18672:34;18668:1;18660:6;18656:14;18649:58;18741:4;18736:2;18728:6;18724:15;18717:29;18532:221;:::o;18759:366::-;18901:3;18922:67;18986:2;18981:3;18922:67;:::i;:::-;18915:74;;18998:93;19087:3;18998:93;:::i;:::-;19116:2;19111:3;19107:12;19100:19;;18759:366;;;:::o;19131:419::-;19297:4;19335:2;19324:9;19320:18;19312:26;;19384:9;19378:4;19374:20;19370:1;19359:9;19355:17;19348:47;19412:131;19538:4;19412:131;:::i;:::-;19404:139;;19131:419;;;:::o;19556:182::-;19696:34;19692:1;19684:6;19680:14;19673:58;19556:182;:::o;19744:366::-;19886:3;19907:67;19971:2;19966:3;19907:67;:::i;:::-;19900:74;;19983:93;20072:3;19983:93;:::i;:::-;20101:2;20096:3;20092:12;20085:19;;19744:366;;;:::o;20116:419::-;20282:4;20320:2;20309:9;20305:18;20297:26;;20369:9;20363:4;20359:20;20355:1;20344:9;20340:17;20333:47;20397:131;20523:4;20397:131;:::i;:::-;20389:139;;20116:419;;;:::o;20541:178::-;20681:30;20677:1;20669:6;20665:14;20658:54;20541:178;:::o;20725:366::-;20867:3;20888:67;20952:2;20947:3;20888:67;:::i;:::-;20881:74;;20964:93;21053:3;20964:93;:::i;:::-;21082:2;21077:3;21073:12;21066:19;;20725:366;;;:::o;21097:419::-;21263:4;21301:2;21290:9;21286:18;21278:26;;21350:9;21344:4;21340:20;21336:1;21325:9;21321:17;21314:47;21378:131;21504:4;21378:131;:::i;:::-;21370:139;;21097:419;;;:::o;21522:224::-;21662:34;21658:1;21650:6;21646:14;21639:58;21731:7;21726:2;21718:6;21714:15;21707:32;21522:224;:::o;21752:366::-;21894:3;21915:67;21979:2;21974:3;21915:67;:::i;:::-;21908:74;;21991:93;22080:3;21991:93;:::i;:::-;22109:2;22104:3;22100:12;22093:19;;21752:366;;;:::o;22124:419::-;22290:4;22328:2;22317:9;22313:18;22305:26;;22377:9;22371:4;22367:20;22363:1;22352:9;22348:17;22341:47;22405:131;22531:4;22405:131;:::i;:::-;22397:139;;22124:419;;;:::o;22549:222::-;22689:34;22685:1;22677:6;22673:14;22666:58;22758:5;22753:2;22745:6;22741:15;22734:30;22549:222;:::o;22777:366::-;22919:3;22940:67;23004:2;22999:3;22940:67;:::i;:::-;22933:74;;23016:93;23105:3;23016:93;:::i;:::-;23134:2;23129:3;23125:12;23118:19;;22777:366;;;:::o;23149:419::-;23315:4;23353:2;23342:9;23338:18;23330:26;;23402:9;23396:4;23392:20;23388:1;23377:9;23373:17;23366:47;23430:131;23556:4;23430:131;:::i;:::-;23422:139;;23149:419;;;:::o;23574:236::-;23714:34;23710:1;23702:6;23698:14;23691:58;23783:19;23778:2;23770:6;23766:15;23759:44;23574:236;:::o;23816:366::-;23958:3;23979:67;24043:2;24038:3;23979:67;:::i;:::-;23972:74;;24055:93;24144:3;24055:93;:::i;:::-;24173:2;24168:3;24164:12;24157:19;;23816:366;;;:::o;24188:419::-;24354:4;24392:2;24381:9;24377:18;24369:26;;24441:9;24435:4;24431:20;24427:1;24416:9;24412:17;24405:47;24469:131;24595:4;24469:131;:::i;:::-;24461:139;;24188:419;;;:::o;24613:172::-;24753:24;24749:1;24741:6;24737:14;24730:48;24613:172;:::o;24791:366::-;24933:3;24954:67;25018:2;25013:3;24954:67;:::i;:::-;24947:74;;25030:93;25119:3;25030:93;:::i;:::-;25148:2;25143:3;25139:12;25132:19;;24791:366;;;:::o;25163:419::-;25329:4;25367:2;25356:9;25352:18;25344:26;;25416:9;25410:4;25406:20;25402:1;25391:9;25387:17;25380:47;25444:131;25570:4;25444:131;:::i;:::-;25436:139;;25163:419;;;:::o;25588:161::-;25728:13;25724:1;25716:6;25712:14;25705:37;25588:161;:::o;25755:366::-;25897:3;25918:67;25982:2;25977:3;25918:67;:::i;:::-;25911:74;;25994:93;26083:3;25994:93;:::i;:::-;26112:2;26107:3;26103:12;26096:19;;25755:366;;;:::o;26127:419::-;26293:4;26331:2;26320:9;26316:18;26308:26;;26380:9;26374:4;26370:20;26366:1;26355:9;26351:17;26344:47;26408:131;26534:4;26408:131;:::i;:::-;26400:139;;26127:419;;;:::o;26552:410::-;26592:7;26615:20;26633:1;26615:20;:::i;:::-;26610:25;;26649:20;26667:1;26649:20;:::i;:::-;26644:25;;26704:1;26701;26697:9;26726:30;26744:11;26726:30;:::i;:::-;26715:41;;26905:1;26896:7;26892:15;26889:1;26886:22;26866:1;26859:9;26839:83;26816:139;;26935:18;;:::i;:::-;26816:139;26600:362;26552:410;;;;:::o;26968:180::-;27016:77;27013:1;27006:88;27113:4;27110:1;27103:15;27137:4;27134:1;27127:15;27154:185;27194:1;27211:20;27229:1;27211:20;:::i;:::-;27206:25;;27245:20;27263:1;27245:20;:::i;:::-;27240:25;;27284:1;27274:35;;27289:18;;:::i;:::-;27274:35;27331:1;27328;27324:9;27319:14;;27154:185;;;;:::o;27345:220::-;27485:34;27481:1;27473:6;27469:14;27462:58;27554:3;27549:2;27541:6;27537:15;27530:28;27345:220;:::o;27571:366::-;27713:3;27734:67;27798:2;27793:3;27734:67;:::i;:::-;27727:74;;27810:93;27899:3;27810:93;:::i;:::-;27928:2;27923:3;27919:12;27912:19;;27571:366;;;:::o;27943:419::-;28109:4;28147:2;28136:9;28132:18;28124:26;;28196:9;28190:4;28186:20;28182:1;28171:9;28167:17;28160:47;28224:131;28350:4;28224:131;:::i;:::-;28216:139;;27943:419;;;:::o;28368:221::-;28508:34;28504:1;28496:6;28492:14;28485:58;28577:4;28572:2;28564:6;28560:15;28553:29;28368:221;:::o;28595:366::-;28737:3;28758:67;28822:2;28817:3;28758:67;:::i;:::-;28751:74;;28834:93;28923:3;28834:93;:::i;:::-;28952:2;28947:3;28943:12;28936:19;;28595:366;;;:::o;28967:419::-;29133:4;29171:2;29160:9;29156:18;29148:26;;29220:9;29214:4;29210:20;29206:1;29195:9;29191:17;29184:47;29248:131;29374:4;29248:131;:::i;:::-;29240:139;;28967:419;;;:::o;29392:166::-;29532:18;29528:1;29520:6;29516:14;29509:42;29392:166;:::o;29564:366::-;29706:3;29727:67;29791:2;29786:3;29727:67;:::i;:::-;29720:74;;29803:93;29892:3;29803:93;:::i;:::-;29921:2;29916:3;29912:12;29905:19;;29564:366;;;:::o;29936:419::-;30102:4;30140:2;30129:9;30125:18;30117:26;;30189:9;30183:4;30179:20;30175:1;30164:9;30160:17;30153:47;30217:131;30343:4;30217:131;:::i;:::-;30209:139;;29936:419;;;:::o;30361:225::-;30501:34;30497:1;30489:6;30485:14;30478:58;30570:8;30565:2;30557:6;30553:15;30546:33;30361:225;:::o;30592:366::-;30734:3;30755:67;30819:2;30814:3;30755:67;:::i;:::-;30748:74;;30831:93;30920:3;30831:93;:::i;:::-;30949:2;30944:3;30940:12;30933:19;;30592:366;;;:::o;30964:419::-;31130:4;31168:2;31157:9;31153:18;31145:26;;31217:9;31211:4;31207:20;31203:1;31192:9;31188:17;31181:47;31245:131;31371:4;31245:131;:::i;:::-;31237:139;;30964:419;;;:::o;31389:170::-;31529:22;31525:1;31517:6;31513:14;31506:46;31389:170;:::o;31565:366::-;31707:3;31728:67;31792:2;31787:3;31728:67;:::i;:::-;31721:74;;31804:93;31893:3;31804:93;:::i;:::-;31922:2;31917:3;31913:12;31906:19;;31565:366;;;:::o;31937:419::-;32103:4;32141:2;32130:9;32126:18;32118:26;;32190:9;32184:4;32180:20;32176:1;32165:9;32161:17;32154:47;32218:131;32344:4;32218:131;:::i;:::-;32210:139;;31937:419;;;:::o

Swarm Source

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