ETH Price: $3,264.94 (+0.53%)
Gas: 3 Gwei

Token

For Fawkes Sake (FFS)
 

Overview

Max Total Supply

100,000,000,000 FFS

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
436,121,786.6758675953125 FFS

Value
$0.00
0x619b423E3116AE05FD4350BDEbc32CF87489f644
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:
FFS

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-03
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.17;

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 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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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

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

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

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

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

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

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

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

/**
 * @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}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

        _afterTokenTransfer(address(0), account, amount);
    }

   
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}


contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}


contract FFS is ERC20, Ownable, LockToken {

    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) public automatedMarketMakerPairs;

    // Blacklist bots
    mapping(address => bool) public _isBlacklisted;

    uint256 public maxTransactionAmount = 100000000 * (10**18);
    uint256 public swapTokensAtAmount = 40000000 * (10**18);
    uint256 public maxWalletToken = 100000000 * (10**18);
   
    uint256 public liquidityBuyFee = 1; // on buy
    uint256 public teamBuyFee = 1; // only on buy
    uint256 public marketingBuyFee = 1; // on buy
    uint256 public liquiditySellFee = 2; // on sell 
    uint256 public marketingSellFee = 1; // on sell
    uint256 public burnSellFee = 3; // only on sell

    uint256 public marketingTokens;
    uint256 public liquidityTokens;
    uint256 public teamTokens;
 
    address payable private marketingWallet = payable(0x564995BE974167a4159a7fb6b63161BC4b9E5Ebc);
    address payable private teamWallet = payable(0x85548615F02Ee3a3ed65429c0eab5dE522598bca);
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
  
    // exlcude from fees
    mapping (address => bool) private _isExcludedFromFees;
    
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapEthForTokens(uint256 amountIn, address[] path);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event MaxWalletAmountUpdated(uint256 prevValue, uint256 newValue);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("For Fawkes Sake", "FFS") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;


        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(teamWallet, true);
        excludeFromFees(address(this), true);

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        /*
            internal function  that is only called here,
            and CANNOT be called ever again
        */
        _createTokens(owner(), 100000000000 * (10**18));
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) open(from, to) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            require(amount <= maxTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }

        if (automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }
    
       
        if(!inSwapAndLiquify && automatedMarketMakerPairs[to] && 
            swapAndLiquifyEnabled && 
            (marketingTokens >= swapTokensAtAmount ||
            liquidityTokens >= swapTokensAtAmount ||
            teamTokens >= swapTokensAtAmount))

            {
                swapAndLiquify();
        }
             

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 marketingShare;
            uint256 liquidityShare;
            uint256 teamShare;
            uint256 burnShare;
            
            if(automatedMarketMakerPairs[from]) {
                
                if(teamBuyFee > 0) {
                    teamShare = amount.mul(teamBuyFee).div(100);
                    teamTokens += teamShare;
                    super._transfer(from, address(this), teamShare);
                }

                if(liquidityBuyFee > 0) {
                    liquidityShare = amount.mul(liquidityBuyFee).div(100);
                    liquidityTokens += liquidityShare;
                    super._transfer(from, address(this), liquidityShare);
                }

                 if(marketingBuyFee > 0) {
                    marketingShare = amount.mul(marketingBuyFee).div(100);
                    marketingTokens += marketingShare;
                    super._transfer(from, address(this), marketingShare);
                }

            }

            if(automatedMarketMakerPairs[to]) {
               
                if(marketingSellFee > 0) {
                    marketingShare = amount.mul(marketingSellFee).div(100);
                    marketingTokens += marketingShare;
                    super._transfer(from, address(this), marketingShare);
                }

                if(liquiditySellFee > 0) {
                    liquidityShare = amount.mul(liquiditySellFee).div(100);
                    liquidityTokens += liquidityShare;
                    super._transfer(from, address(this), liquidityShare);
                }

                if(burnSellFee > 0) {
                    burnShare = amount.mul(burnSellFee).div(100);
                    super._transfer(from, deadWallet, burnShare);
                }

            }

            amount = amount.sub(marketingShare.add(liquidityShare).add(teamShare).add(burnShare));

        }

        super._transfer(from, to, amount);

    }

    function swapAndLiquify() private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(liquidityTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            // split the contract balance into halves
            uint256 half = swapTokensAtAmount.div(2);
            uint256 otherHalf = swapTokensAtAmount.sub(half);

            // capture the contract's current ETH balance.
            // this is so that we can capture exactly the amount of ETH that the
            // swap creates, and not make the liquidity event include any ETH that
            // has been manually sent to the contract
            uint256 initialBalance = address(this).balance;

            // swap tokens for ETH
            swapTokensForEth(half, address(this));

            // how much ETH did we just swap into?
            uint256 newBalance = address(this).balance.sub(initialBalance);

            // add liquidity to uniswap
            addLiquidity(otherHalf, newBalance);
            emit SwapAndLiquify(half, newBalance, otherHalf);
            liquidityTokens -= swapTokensAtAmount;
        }

        if(teamTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            swapTokensForEth(swapTokensAtAmount, teamWallet);
            teamTokens -= swapTokensAtAmount;
        }

        if(marketingTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            swapTokensForEth(swapTokensAtAmount, address(this));
            marketingWallet.transfer(address(this).balance);
            marketingTokens -= swapTokensAtAmount;
        }
          
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

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

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            _to,
            block.timestamp
        );
        
    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

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

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function updateBuyFee(uint256 _liqFee, uint256 _teamFee, uint256 _markFee) public onlyOwner() {
        require(_liqFee.add(_teamFee).add(_markFee) <= 6, "tax too high");
        liquidityBuyFee = _liqFee;
        teamBuyFee = _teamFee;
        marketingBuyFee = _markFee;
    }

    function updateSellFee(uint256 _liqFee, uint256 _markFee, uint256 _burnFee) public onlyOwner() {
        require(_liqFee.add(_markFee).add(_burnFee) <= 6, "tax too high");
        liquiditySellFee = _liqFee;
        marketingSellFee = _markFee;
        burnSellFee = _burnFee;
    }

    function blacklistBots(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function updateWallets(address payable _markWallet, address payable _teamWallet) public onlyOwner {  
        marketingWallet = _markWallet;
        teamWallet = _teamWallet;
    }

    function setMaxTransactionAmount(uint256 _maxTxAmount) public onlyOwner {
        maxTransactionAmount = _maxTxAmount;
        require(maxTransactionAmount >= totalSupply().div(400), "value too low");
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
        swapTokensAtAmount = newLimit;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setMaxWalletToken(uint256 _newValue) external onlyOwner {
        uint256 prevValue = maxWalletToken;
  	    maxWalletToken = _newValue;
        require(maxWalletToken >= totalSupply().div(400), "value too low");
        emit MaxWalletAmountUpdated(prevValue, _newValue);
  	}

    receive() external payable {

  	}
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","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":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamTokens","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_markWallet","type":"address"},{"internalType":"address payable","name":"_teamWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600560146101000a81548160ff0219169083151502179055506a52b7d2dcc80cd2e4000000600a556a2116545850052128000000600b556a52b7d2dcc80cd2e4000000600c556001600d556001600e556001600f5560026010556001601155600360125573564995be974167a4159a7fb6b63161bc4b9e5ebc601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507385548615f02ee3a3ed65429c0eab5de522598bca601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601860156101000a81548160ff0219169083151502179055503480156200017f57600080fd5b506040518060400160405280600f81526020017f466f72204661776b65732053616b6500000000000000000000000000000000008152506040518060400160405280600381526020017f46465300000000000000000000000000000000000000000000000000000000008152508160039081620001fd919062000dba565b5080600490816200020f919062000dba565b5050506200023262000226620005c160201b60201c565b620005c960201b60201c565b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f919062000f0b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fd919062000f0b565b6040518363ffffffff1660e01b81526004016200041c92919062000f4e565b6020604051808303816000875af11580156200043c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000462919062000f0b565b905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620004fb620004ed6200068f60201b60201c565b6001620006b960201b60201c565b62000530601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006b960201b60201c565b62000565601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006b960201b60201c565b62000578306001620006b960201b60201c565b6200058b8160016200088860201b60201c565b620005b96200059f6200068f60201b60201c565b6c01431e0fae6d7217caa0000000620009be60201b60201c565b505062001272565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006c9620005c160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006ef6200068f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000748576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073f9062000fdc565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620007dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d49062001074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200087c9190620010b3565b60405180910390a25050565b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036200091d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009149062001146565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2790620011b8565b60405180910390fd5b62000a446000838362000b3660201b60201c565b806002600082825462000a58919062001209565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000aaf919062001209565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b16919062001255565b60405180910390a362000b326000838362000b3b60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bc257607f821691505b60208210810362000bd85762000bd762000b7a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c03565b62000c4e868362000c03565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c9b62000c9562000c8f8462000c66565b62000c70565b62000c66565b9050919050565b6000819050919050565b62000cb78362000c7a565b62000ccf62000cc68262000ca2565b84845462000c10565b825550505050565b600090565b62000ce662000cd7565b62000cf381848462000cac565b505050565b5b8181101562000d1b5762000d0f60008262000cdc565b60018101905062000cf9565b5050565b601f82111562000d6a5762000d348162000bde565b62000d3f8462000bf3565b8101602085101562000d4f578190505b62000d6762000d5e8562000bf3565b83018262000cf8565b50505b505050565b600082821c905092915050565b600062000d8f6000198460080262000d6f565b1980831691505092915050565b600062000daa838362000d7c565b9150826002028217905092915050565b62000dc58262000b40565b67ffffffffffffffff81111562000de15762000de062000b4b565b5b62000ded825462000ba9565b62000dfa82828562000d1f565b600060209050601f83116001811462000e32576000841562000e1d578287015190505b62000e29858262000d9c565b86555062000e99565b601f19841662000e428662000bde565b60005b8281101562000e6c5784890151825560018201915060208501945060208101905062000e45565b8683101562000e8c578489015162000e88601f89168262000d7c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed38262000ea6565b9050919050565b62000ee58162000ec6565b811462000ef157600080fd5b50565b60008151905062000f058162000eda565b92915050565b60006020828403121562000f245762000f2362000ea1565b5b600062000f348482850162000ef4565b91505092915050565b62000f488162000ec6565b82525050565b600060408201905062000f65600083018562000f3d565b62000f74602083018462000f3d565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fc460208362000f7b565b915062000fd18262000f8c565b602082019050919050565b6000602082019050818103600083015262000ff78162000fb5565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006200105c602a8362000f7b565b9150620010698262000ffe565b604082019050919050565b600060208201905081810360008301526200108f816200104d565b9050919050565b60008115159050919050565b620010ad8162001096565b82525050565b6000602082019050620010ca6000830184620010a2565b92915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006200112e60388362000f7b565b91506200113b82620010d0565b604082019050919050565b6000602082019050818103600083015262001161816200111f565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011a0601f8362000f7b565b9150620011ad8262001168565b602082019050919050565b60006020820190508181036000830152620011d38162001191565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012168262000c66565b9150620012238362000c66565b92508282019050808211156200123e576200123d620011da565b5b92915050565b6200124f8162000c66565b82525050565b60006020820190506200126c600083018462001244565b92915050565b608051614c30620012956000396000818161113e01526117040152614c306000f3fe60806040526004361061028c5760003560e01c80637e7613771161015a578063c0246668116100c1578063e2f456051161007a578063e2f4560514610a05578063e6c75f7114610a30578063e7f444b314610a5b578063e8ba854f14610a86578063f2fde38b14610aaf578063fb201b1d14610ad857610293565b8063c0246668146108f5578063c3e3c7bc1461091e578063c49b9a8014610949578063c8c8ebe414610972578063ccb613581461099d578063dd62ed3e146109c857610293565b80639a7a23d6116101135780639a7a23d6146107c3578063a457c2d7146107ec578063a6d4ec3214610829578063a9059cbb14610852578063aba88f021461088f578063b62496f5146108b857610293565b80637e761377146106c357806385141a77146106ee5780638b27306d146107195780638da5cb5b1461074457806391d55f411461076f57806395d89b411461079857610293565b806323b872dd116101fe5780634b8ce602116101b75780634b8ce602146105b35780634fbee193146105de57806365b8dbc01461061b578063680789521461064457806370a082311461066f578063715018a6146106ac57610293565b806323b872dd1461048d578063313ce567146104ca57806339509351146104f557806347535d7b1461053257806349bd5a5e1461055d5780634a74bb021461058857610293565b806312bf71561161025057806312bf71561461037d5780631694505e146103a657806318160ddd146103d15780631cdd3be3146103fc5780631d38ff96146104395780631e293c101461046457610293565b806306fdde0314610298578063095ea7b3146102c3578063099d0d301461030057806309e89af71461032b5780630b6bb6f51461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610aef565b6040516102ba91906136e0565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906137aa565b610b81565b6040516102f79190613805565b60405180910390f35b34801561030c57600080fd5b50610315610b9f565b604051610322919061382f565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d919061384a565b610ba5565b005b34801561036057600080fd5b5061037b600480360381019061037691906139bf565b610c2b565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613a08565b610d42565b005b3480156103b257600080fd5b506103bb610e40565b6040516103c89190613aba565b60405180910390f35b3480156103dd57600080fd5b506103e6610e66565b6040516103f3919061382f565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e9190613ad5565b610e70565b6040516104309190613805565b60405180910390f35b34801561044557600080fd5b5061044e610e90565b60405161045b919061382f565b60405180910390f35b34801561047057600080fd5b5061048b6004803603810190610486919061384a565b610e96565b005b34801561049957600080fd5b506104b460048036038101906104af9190613b02565b610f7c565b6040516104c19190613805565b60405180910390f35b3480156104d657600080fd5b506104df611074565b6040516104ec9190613b71565b60405180910390f35b34801561050157600080fd5b5061051c600480360381019061051791906137aa565b61107d565b6040516105299190613805565b60405180910390f35b34801561053e57600080fd5b50610547611129565b6040516105549190613805565b60405180910390f35b34801561056957600080fd5b5061057261113c565b60405161057f9190613b9b565b60405180910390f35b34801561059457600080fd5b5061059d611160565b6040516105aa9190613805565b60405180910390f35b3480156105bf57600080fd5b506105c8611173565b6040516105d5919061382f565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613ad5565b611179565b6040516106129190613805565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d9190613ad5565b6111cf565b005b34801561065057600080fd5b5061065961139b565b604051610666919061382f565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613ad5565b6113a1565b6040516106a3919061382f565b60405180910390f35b3480156106b857600080fd5b506106c16113e9565b005b3480156106cf57600080fd5b506106d8611471565b6040516106e5919061382f565b60405180910390f35b3480156106fa57600080fd5b50610703611477565b6040516107109190613b9b565b60405180910390f35b34801561072557600080fd5b5061072e61149d565b60405161073b919061382f565b60405180910390f35b34801561075057600080fd5b506107596114a3565b6040516107669190613b9b565b60405180910390f35b34801561077b57600080fd5b506107966004803603810190610791919061384a565b6114cd565b005b3480156107a457600080fd5b506107ad6115f4565b6040516107ba91906136e0565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613be2565b611686565b005b3480156107f857600080fd5b50610813600480360381019061080e91906137aa565b61179e565b6040516108209190613805565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613a08565b611889565b005b34801561085e57600080fd5b50610879600480360381019061087491906137aa565b611987565b6040516108869190613805565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190613be2565b6119a5565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613ad5565b611a7c565b6040516108ec9190613805565b60405180910390f35b34801561090157600080fd5b5061091c60048036038101906109179190613be2565b611a9c565b005b34801561092a57600080fd5b50610933611c53565b604051610940919061382f565b60405180910390f35b34801561095557600080fd5b50610970600480360381019061096b9190613c22565b611c59565b005b34801561097e57600080fd5b50610987611d29565b604051610994919061382f565b60405180910390f35b3480156109a957600080fd5b506109b2611d2f565b6040516109bf919061382f565b60405180910390f35b3480156109d457600080fd5b506109ef60048036038101906109ea9190613c4f565b611d35565b6040516109fc919061382f565b60405180910390f35b348015610a1157600080fd5b50610a1a611dbc565b604051610a27919061382f565b60405180910390f35b348015610a3c57600080fd5b50610a45611dc2565b604051610a52919061382f565b60405180910390f35b348015610a6757600080fd5b50610a70611dc8565b604051610a7d919061382f565b60405180910390f35b348015610a9257600080fd5b50610aad6004803603810190610aa89190613ccd565b611dce565b005b348015610abb57600080fd5b50610ad66004803603810190610ad19190613ad5565b611ed0565b005b348015610ae457600080fd5b50610aed611fc7565b005b606060038054610afe90613d3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90613d3c565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b5050505050905090565b6000610b95610b8e612060565b8484612068565b6001905092915050565b60105481565b610bad612060565b73ffffffffffffffffffffffffffffffffffffffff16610bcb6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613db9565b60405180910390fd5b80600b8190555050565b610c33612060565b73ffffffffffffffffffffffffffffffffffffffff16610c516114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613db9565b60405180910390fd5b60005b81518160ff161015610d3e57600160066000848460ff1681518110610cd257610cd1613dd9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d3690613e37565b915050610caa565b5050565b610d4a612060565b73ffffffffffffffffffffffffffffffffffffffff16610d686114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613db9565b60405180910390fd5b6006610de582610dd7858761223190919063ffffffff16565b61223190919063ffffffff16565b1115610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613eac565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600e5481565b610e9e612060565b73ffffffffffffffffffffffffffffffffffffffff16610ebc6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990613db9565b60405180910390fd5b80600a81905550610f35610190610f27610e66565b61224790919063ffffffff16565b600a541015610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613f18565b60405180910390fd5b50565b6000610f8984848461225d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fd4612060565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90613faa565b60405180910390fd5b61106885611060612060565b858403612068565b60019150509392505050565b60006012905090565b600061111f61108a612060565b848460016000611098612060565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111a9190613fca565b612068565b6001905092915050565b600560149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601860159054906101000a900460ff1681565b60145481565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111d7612060565b73ffffffffffffffffffffffffffffffffffffffff166111f56114a3565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613db9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290614070565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f1612060565b73ffffffffffffffffffffffffffffffffffffffff1661140f6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613db9565b60405180910390fd5b61146f6000612c13565b565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114d5612060565b73ffffffffffffffffffffffffffffffffffffffff166114f36114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090613db9565b60405180910390fd5b6000600c54905081600c81905550611573610190611565610e66565b61224790919063ffffffff16565b600c5410156115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90613f18565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e7381836040516115e8929190614090565b60405180910390a15050565b60606004805461160390613d3c565b80601f016020809104026020016040519081016040528092919081815260200182805461162f90613d3c565b801561167c5780601f106116515761010080835404028352916020019161167c565b820191906000526020600020905b81548152906001019060200180831161165f57829003601f168201915b5050505050905090565b61168e612060565b73ffffffffffffffffffffffffffffffffffffffff166116ac6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613db9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790614151565b60405180910390fd5b61179a8282612cd9565b5050565b600080600160006117ad612060565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906141e3565b60405180910390fd5b61187e611875612060565b85858403612068565b600191505092915050565b611891612060565b73ffffffffffffffffffffffffffffffffffffffff166118af6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613db9565b60405180910390fd5b600661192c8261191e858761223190919063ffffffff16565b61223190919063ffffffff16565b111561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613eac565b60405180910390fd5b826010819055508160118190555080601281905550505050565b600061199b611994612060565b848461225d565b6001905092915050565b6119ad612060565b73ffffffffffffffffffffffffffffffffffffffff166119cb6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613db9565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60086020528060005260406000206000915054906101000a900460ff1681565b611aa4612060565b73ffffffffffffffffffffffffffffffffffffffff16611ac26114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90613db9565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190614275565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c479190613805565b60405180910390a25050565b60155481565b611c61612060565b73ffffffffffffffffffffffffffffffffffffffff16611c7f6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90613db9565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d1e9190613805565b60405180910390a150565b600a5481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600c5481565b60115481565b611dd6612060565b73ffffffffffffffffffffffffffffffffffffffff16611df46114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190613db9565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611ed8612060565b73ffffffffffffffffffffffffffffffffffffffff16611ef66114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614307565b60405180910390fd5b611fc481612c13565b50565b611fcf612060565b73ffffffffffffffffffffffffffffffffffffffff16611fed6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90613db9565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90614399565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d9061442b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612224919061382f565b60405180910390a3505050565b6000818361223f9190613fca565b905092915050565b60008183612255919061447a565b905092915050565b8282600560149054906101000a900460ff16806122c35750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123175750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d906144f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90614589565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b9061461b565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124d85750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90614687565b60405180910390fd5b600083036125305761252b85856000612e0c565b612c0c565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125d45750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261f57600a5483111561261e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261590614719565b60405180910390fd5b5b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126c25750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127185750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277c576000612728856113a1565b9050600c5484826127399190613fca565b111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906147ab565b60405180910390fd5b505b601860149054906101000a900460ff161580156127e25750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156127fa5750601860159054906101000a900460ff165b80156128285750600b546013541015806128185750600b5460145410155b806128275750600b5460155410155b5b156128365761283561308b565b5b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128da5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057600080600080600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a46576000600e5411156129915761296a606461295c600e548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b9150816015600082825461297e9190613fca565b92505081905550612990893084612e0c565b5b6000600d5411156129eb576129c460646129b6600d548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b925082601460008282546129d89190613fca565b925050819055506129ea893085612e0c565b5b6000600f541115612a4557612a1e6064612a10600f548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b93508360136000828254612a329190613fca565b92505081905550612a44893086612e0c565b5b5b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bb05760006011541115612af257612acb6064612abd6011548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b93508360136000828254612adf9190613fca565b92505081905550612af1893086612e0c565b5b60006010541115612b4c57612b256064612b176010548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b92508260146000828254612b399190613fca565b92505081905550612b4b893085612e0c565b5b60006012541115612baf57612b7f6064612b716012548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b9050612bae89601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e0c565b5b5b612bf9612bea82612bdc85612bce888a61223190919063ffffffff16565b61223190919063ffffffff16565b61223190919063ffffffff16565b886132d190919063ffffffff16565b9650505050505b612c0b858585612e0c565b5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d629061483d565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614589565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee19061461b565b60405180910390fd5b612ef58383836132e7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f72906148cf565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461300e9190613fca565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613072919061382f565b60405180910390a36130858484846132ec565b50505050565b6001601860146101000a81548160ff02191690831515021790555060006130b1306113a1565b9050600b54601454101580156130c95750600b548110155b1561318c5760006130e66002600b5461224790919063ffffffff16565b905060006130ff82600b546132d190919063ffffffff16565b9050600047905061311083306132f1565b600061312582476132d190919063ffffffff16565b9050613131838261356b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613164939291906148ef565b60405180910390a1600b54601460008282546131809190614926565b92505081905550505050505b600b54601554101580156131a25750600b548110155b156131f1576131d5600b54601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166132f1565b600b54601560008282546131e99190614926565b925050819055505b600b54601354101580156132075750600b548110155b1561329d57613218600b54306132f1565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613280573d6000803e3d6000fd5b50600b54601360008282546132959190614926565b925050819055505b506000601860146101000a81548160ff021916908315150217905550565b600081836132c9919061495a565b905092915050565b600081836132df9190614926565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561330e5761330d61387c565b5b60405190808252806020026020018201604052801561333c5781602001602082028036833780820191505090505b509050308160008151811061335457613353613dd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341f91906149b1565b8160018151811061343357613432613dd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508261349a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d35565b10156134d0576134cf30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612068565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401613534959493929190614ad7565b600060405180830381600087803b15801561354e57600080fd5b505af1158015613562573d6000803e3d6000fd5b50505050505050565b61359830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612068565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135e46114a3565b426040518863ffffffff1660e01b815260040161360696959493929190614b31565b60606040518083038185885af1158015613624573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136499190614ba7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561368a57808201518184015260208101905061366f565b60008484015250505050565b6000601f19601f8301169050919050565b60006136b282613650565b6136bc818561365b565b93506136cc81856020860161366c565b6136d581613696565b840191505092915050565b600060208201905081810360008301526136fa81846136a7565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061374182613716565b9050919050565b61375181613736565b811461375c57600080fd5b50565b60008135905061376e81613748565b92915050565b6000819050919050565b61378781613774565b811461379257600080fd5b50565b6000813590506137a48161377e565b92915050565b600080604083850312156137c1576137c061370c565b5b60006137cf8582860161375f565b92505060206137e085828601613795565b9150509250929050565b60008115159050919050565b6137ff816137ea565b82525050565b600060208201905061381a60008301846137f6565b92915050565b61382981613774565b82525050565b60006020820190506138446000830184613820565b92915050565b6000602082840312156138605761385f61370c565b5b600061386e84828501613795565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138b482613696565b810181811067ffffffffffffffff821117156138d3576138d261387c565b5b80604052505050565b60006138e6613702565b90506138f282826138ab565b919050565b600067ffffffffffffffff8211156139125761391161387c565b5b602082029050602081019050919050565b600080fd5b600061393b613936846138f7565b6138dc565b9050808382526020820190506020840283018581111561395e5761395d613923565b5b835b818110156139875780613973888261375f565b845260208401935050602081019050613960565b5050509392505050565b600082601f8301126139a6576139a5613877565b5b81356139b6848260208601613928565b91505092915050565b6000602082840312156139d5576139d461370c565b5b600082013567ffffffffffffffff8111156139f3576139f2613711565b5b6139ff84828501613991565b91505092915050565b600080600060608486031215613a2157613a2061370c565b5b6000613a2f86828701613795565b9350506020613a4086828701613795565b9250506040613a5186828701613795565b9150509250925092565b6000819050919050565b6000613a80613a7b613a7684613716565b613a5b565b613716565b9050919050565b6000613a9282613a65565b9050919050565b6000613aa482613a87565b9050919050565b613ab481613a99565b82525050565b6000602082019050613acf6000830184613aab565b92915050565b600060208284031215613aeb57613aea61370c565b5b6000613af98482850161375f565b91505092915050565b600080600060608486031215613b1b57613b1a61370c565b5b6000613b298682870161375f565b9350506020613b3a8682870161375f565b9250506040613b4b86828701613795565b9150509250925092565b600060ff82169050919050565b613b6b81613b55565b82525050565b6000602082019050613b866000830184613b62565b92915050565b613b9581613736565b82525050565b6000602082019050613bb06000830184613b8c565b92915050565b613bbf816137ea565b8114613bca57600080fd5b50565b600081359050613bdc81613bb6565b92915050565b60008060408385031215613bf957613bf861370c565b5b6000613c078582860161375f565b9250506020613c1885828601613bcd565b9150509250929050565b600060208284031215613c3857613c3761370c565b5b6000613c4684828501613bcd565b91505092915050565b60008060408385031215613c6657613c6561370c565b5b6000613c748582860161375f565b9250506020613c858582860161375f565b9150509250929050565b6000613c9a82613716565b9050919050565b613caa81613c8f565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce361370c565b5b6000613cf285828601613cb8565b9250506020613d0385828601613cb8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5457607f821691505b602082108103613d6757613d66613d0d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613da360208361365b565b9150613dae82613d6d565b602082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e4282613b55565b915060ff8203613e5557613e54613e08565b5b600182019050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613e96600c8361365b565b9150613ea182613e60565b602082019050919050565b60006020820190508181036000830152613ec581613e89565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000613f02600d8361365b565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f9460288361365b565b9150613f9f82613f38565b604082019050919050565b60006020820190508181036000830152613fc381613f87565b9050919050565b6000613fd582613774565b9150613fe083613774565b9250828201905080821115613ff857613ff7613e08565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061405a60238361365b565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b60006040820190506140a56000830185613820565b6140b26020830184613820565b9392505050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b600061413b60458361365b565b9150614146826140b9565b606082019050919050565b6000602082019050818103600083015261416a8161412e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006141cd60258361365b565b91506141d882614171565b604082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600061425f602a8361365b565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142f160268361365b565b91506142fc82614295565b604082019050919050565b60006020820190508181036000830152614320816142e4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061438360248361365b565b915061438e82614327565b604082019050919050565b600060208201905081810360008301526143b281614376565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061441560228361365b565b9150614420826143b9565b604082019050919050565b6000602082019050818103600083015261444481614408565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061448582613774565b915061449083613774565b9250826144a05761449f61444b565b5b828204905092915050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b60006144e160088361365b565b91506144ec826144ab565b602082019050919050565b60006020820190508181036000830152614510816144d4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061457360258361365b565b915061457e82614517565b604082019050919050565b600060208201905081810360008301526145a281614566565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061460560238361365b565b9150614610826145a9565b604082019050919050565b60006020820190508181036000830152614634816145f8565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061467160138361365b565b915061467c8261463b565b602082019050919050565b600060208201905081810360008301526146a081614664565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000614703602c8361365b565b915061470e826146a7565b604082019050919050565b60006020820190508181036000830152614732816146f6565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061479560248361365b565b91506147a082614739565b604082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061482760388361365b565b9150614832826147cb565b604082019050919050565b600060208201905081810360008301526148568161481a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148b960268361365b565b91506148c48261485d565b604082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b60006060820190506149046000830186613820565b6149116020830185613820565b61491e6040830184613820565b949350505050565b600061493182613774565b915061493c83613774565b925082820390508181111561495457614953613e08565b5b92915050565b600061496582613774565b915061497083613774565b925082820261497e81613774565b9150828204841483151761499557614994613e08565b5b5092915050565b6000815190506149ab81613748565b92915050565b6000602082840312156149c7576149c661370c565b5b60006149d58482850161499c565b91505092915050565b6000819050919050565b6000614a036149fe6149f9846149de565b613a5b565b613774565b9050919050565b614a13816149e8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a4e81613736565b82525050565b6000614a608383614a45565b60208301905092915050565b6000602082019050919050565b6000614a8482614a19565b614a8e8185614a24565b9350614a9983614a35565b8060005b83811015614aca578151614ab18882614a54565b9750614abc83614a6c565b925050600181019050614a9d565b5085935050505092915050565b600060a082019050614aec6000830188613820565b614af96020830187614a0a565b8181036040830152614b0b8186614a79565b9050614b1a6060830185613b8c565b614b276080830184613820565b9695505050505050565b600060c082019050614b466000830189613b8c565b614b536020830188613820565b614b606040830187614a0a565b614b6d6060830186614a0a565b614b7a6080830185613b8c565b614b8760a0830184613820565b979650505050505050565b600081519050614ba18161377e565b92915050565b600080600060608486031215614bc057614bbf61370c565b5b6000614bce86828701614b92565b9350506020614bdf86828701614b92565b9250506040614bf086828701614b92565b915050925092509256fea26469706673582212209fd6db2d94602e68ed4b27aa0481bcc89ae6d1959e3a7bc284f8d7fd8f9f0a8664736f6c63430008110033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80637e7613771161015a578063c0246668116100c1578063e2f456051161007a578063e2f4560514610a05578063e6c75f7114610a30578063e7f444b314610a5b578063e8ba854f14610a86578063f2fde38b14610aaf578063fb201b1d14610ad857610293565b8063c0246668146108f5578063c3e3c7bc1461091e578063c49b9a8014610949578063c8c8ebe414610972578063ccb613581461099d578063dd62ed3e146109c857610293565b80639a7a23d6116101135780639a7a23d6146107c3578063a457c2d7146107ec578063a6d4ec3214610829578063a9059cbb14610852578063aba88f021461088f578063b62496f5146108b857610293565b80637e761377146106c357806385141a77146106ee5780638b27306d146107195780638da5cb5b1461074457806391d55f411461076f57806395d89b411461079857610293565b806323b872dd116101fe5780634b8ce602116101b75780634b8ce602146105b35780634fbee193146105de57806365b8dbc01461061b578063680789521461064457806370a082311461066f578063715018a6146106ac57610293565b806323b872dd1461048d578063313ce567146104ca57806339509351146104f557806347535d7b1461053257806349bd5a5e1461055d5780634a74bb021461058857610293565b806312bf71561161025057806312bf71561461037d5780631694505e146103a657806318160ddd146103d15780631cdd3be3146103fc5780631d38ff96146104395780631e293c101461046457610293565b806306fdde0314610298578063095ea7b3146102c3578063099d0d301461030057806309e89af71461032b5780630b6bb6f51461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610aef565b6040516102ba91906136e0565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906137aa565b610b81565b6040516102f79190613805565b60405180910390f35b34801561030c57600080fd5b50610315610b9f565b604051610322919061382f565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d919061384a565b610ba5565b005b34801561036057600080fd5b5061037b600480360381019061037691906139bf565b610c2b565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613a08565b610d42565b005b3480156103b257600080fd5b506103bb610e40565b6040516103c89190613aba565b60405180910390f35b3480156103dd57600080fd5b506103e6610e66565b6040516103f3919061382f565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e9190613ad5565b610e70565b6040516104309190613805565b60405180910390f35b34801561044557600080fd5b5061044e610e90565b60405161045b919061382f565b60405180910390f35b34801561047057600080fd5b5061048b6004803603810190610486919061384a565b610e96565b005b34801561049957600080fd5b506104b460048036038101906104af9190613b02565b610f7c565b6040516104c19190613805565b60405180910390f35b3480156104d657600080fd5b506104df611074565b6040516104ec9190613b71565b60405180910390f35b34801561050157600080fd5b5061051c600480360381019061051791906137aa565b61107d565b6040516105299190613805565b60405180910390f35b34801561053e57600080fd5b50610547611129565b6040516105549190613805565b60405180910390f35b34801561056957600080fd5b5061057261113c565b60405161057f9190613b9b565b60405180910390f35b34801561059457600080fd5b5061059d611160565b6040516105aa9190613805565b60405180910390f35b3480156105bf57600080fd5b506105c8611173565b6040516105d5919061382f565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613ad5565b611179565b6040516106129190613805565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d9190613ad5565b6111cf565b005b34801561065057600080fd5b5061065961139b565b604051610666919061382f565b60405180910390f35b34801561067b57600080fd5b5061069660048036038101906106919190613ad5565b6113a1565b6040516106a3919061382f565b60405180910390f35b3480156106b857600080fd5b506106c16113e9565b005b3480156106cf57600080fd5b506106d8611471565b6040516106e5919061382f565b60405180910390f35b3480156106fa57600080fd5b50610703611477565b6040516107109190613b9b565b60405180910390f35b34801561072557600080fd5b5061072e61149d565b60405161073b919061382f565b60405180910390f35b34801561075057600080fd5b506107596114a3565b6040516107669190613b9b565b60405180910390f35b34801561077b57600080fd5b506107966004803603810190610791919061384a565b6114cd565b005b3480156107a457600080fd5b506107ad6115f4565b6040516107ba91906136e0565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e59190613be2565b611686565b005b3480156107f857600080fd5b50610813600480360381019061080e91906137aa565b61179e565b6040516108209190613805565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613a08565b611889565b005b34801561085e57600080fd5b50610879600480360381019061087491906137aa565b611987565b6040516108869190613805565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190613be2565b6119a5565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613ad5565b611a7c565b6040516108ec9190613805565b60405180910390f35b34801561090157600080fd5b5061091c60048036038101906109179190613be2565b611a9c565b005b34801561092a57600080fd5b50610933611c53565b604051610940919061382f565b60405180910390f35b34801561095557600080fd5b50610970600480360381019061096b9190613c22565b611c59565b005b34801561097e57600080fd5b50610987611d29565b604051610994919061382f565b60405180910390f35b3480156109a957600080fd5b506109b2611d2f565b6040516109bf919061382f565b60405180910390f35b3480156109d457600080fd5b506109ef60048036038101906109ea9190613c4f565b611d35565b6040516109fc919061382f565b60405180910390f35b348015610a1157600080fd5b50610a1a611dbc565b604051610a27919061382f565b60405180910390f35b348015610a3c57600080fd5b50610a45611dc2565b604051610a52919061382f565b60405180910390f35b348015610a6757600080fd5b50610a70611dc8565b604051610a7d919061382f565b60405180910390f35b348015610a9257600080fd5b50610aad6004803603810190610aa89190613ccd565b611dce565b005b348015610abb57600080fd5b50610ad66004803603810190610ad19190613ad5565b611ed0565b005b348015610ae457600080fd5b50610aed611fc7565b005b606060038054610afe90613d3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90613d3c565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b5050505050905090565b6000610b95610b8e612060565b8484612068565b6001905092915050565b60105481565b610bad612060565b73ffffffffffffffffffffffffffffffffffffffff16610bcb6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613db9565b60405180910390fd5b80600b8190555050565b610c33612060565b73ffffffffffffffffffffffffffffffffffffffff16610c516114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613db9565b60405180910390fd5b60005b81518160ff161015610d3e57600160066000848460ff1681518110610cd257610cd1613dd9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d3690613e37565b915050610caa565b5050565b610d4a612060565b73ffffffffffffffffffffffffffffffffffffffff16610d686114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db590613db9565b60405180910390fd5b6006610de582610dd7858761223190919063ffffffff16565b61223190919063ffffffff16565b1115610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613eac565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600e5481565b610e9e612060565b73ffffffffffffffffffffffffffffffffffffffff16610ebc6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990613db9565b60405180910390fd5b80600a81905550610f35610190610f27610e66565b61224790919063ffffffff16565b600a541015610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613f18565b60405180910390fd5b50565b6000610f8984848461225d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fd4612060565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90613faa565b60405180910390fd5b61106885611060612060565b858403612068565b60019150509392505050565b60006012905090565b600061111f61108a612060565b848460016000611098612060565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111a9190613fca565b612068565b6001905092915050565b600560149054906101000a900460ff1681565b7f000000000000000000000000660f1842335cc51a18ba297107caaa049cb5073981565b601860159054906101000a900460ff1681565b60145481565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111d7612060565b73ffffffffffffffffffffffffffffffffffffffff166111f56114a3565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613db9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290614070565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f1612060565b73ffffffffffffffffffffffffffffffffffffffff1661140f6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613db9565b60405180910390fd5b61146f6000612c13565b565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114d5612060565b73ffffffffffffffffffffffffffffffffffffffff166114f36114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090613db9565b60405180910390fd5b6000600c54905081600c81905550611573610190611565610e66565b61224790919063ffffffff16565b600c5410156115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90613f18565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e7381836040516115e8929190614090565b60405180910390a15050565b60606004805461160390613d3c565b80601f016020809104026020016040519081016040528092919081815260200182805461162f90613d3c565b801561167c5780601f106116515761010080835404028352916020019161167c565b820191906000526020600020905b81548152906001019060200180831161165f57829003601f168201915b5050505050905090565b61168e612060565b73ffffffffffffffffffffffffffffffffffffffff166116ac6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990613db9565b60405180910390fd5b7f000000000000000000000000660f1842335cc51a18ba297107caaa049cb5073973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178790614151565b60405180910390fd5b61179a8282612cd9565b5050565b600080600160006117ad612060565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906141e3565b60405180910390fd5b61187e611875612060565b85858403612068565b600191505092915050565b611891612060565b73ffffffffffffffffffffffffffffffffffffffff166118af6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90613db9565b60405180910390fd5b600661192c8261191e858761223190919063ffffffff16565b61223190919063ffffffff16565b111561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196490613eac565b60405180910390fd5b826010819055508160118190555080601281905550505050565b600061199b611994612060565b848461225d565b6001905092915050565b6119ad612060565b73ffffffffffffffffffffffffffffffffffffffff166119cb6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1890613db9565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60086020528060005260406000206000915054906101000a900460ff1681565b611aa4612060565b73ffffffffffffffffffffffffffffffffffffffff16611ac26114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90613db9565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190614275565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c479190613805565b60405180910390a25050565b60155481565b611c61612060565b73ffffffffffffffffffffffffffffffffffffffff16611c7f6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90613db9565b60405180910390fd5b80601860156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d1e9190613805565b60405180910390a150565b600a5481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600c5481565b60115481565b611dd6612060565b73ffffffffffffffffffffffffffffffffffffffff16611df46114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4190613db9565b60405180910390fd5b81601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611ed8612060565b73ffffffffffffffffffffffffffffffffffffffff16611ef66114a3565b73ffffffffffffffffffffffffffffffffffffffff1614611f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4390613db9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290614307565b60405180910390fd5b611fc481612c13565b50565b611fcf612060565b73ffffffffffffffffffffffffffffffffffffffff16611fed6114a3565b73ffffffffffffffffffffffffffffffffffffffff1614612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90613db9565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90614399565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d9061442b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612224919061382f565b60405180910390a3505050565b6000818361223f9190613fca565b905092915050565b60008183612255919061447a565b905092915050565b8282600560149054906101000a900460ff16806122c35750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123175750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d906144f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90614589565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b9061461b565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124d85750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90614687565b60405180910390fd5b600083036125305761252b85856000612e0c565b612c0c565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125d45750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561261f57600a5483111561261e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261590614719565b60405180910390fd5b5b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126c25750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127185750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561277c576000612728856113a1565b9050600c5484826127399190613fca565b111561277a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612771906147ab565b60405180910390fd5b505b601860149054906101000a900460ff161580156127e25750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156127fa5750601860159054906101000a900460ff165b80156128285750600b546013541015806128185750600b5460145410155b806128275750600b5460155410155b5b156128365761283561308b565b5b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128da5750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c0057600080600080600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a46576000600e5411156129915761296a606461295c600e548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b9150816015600082825461297e9190613fca565b92505081905550612990893084612e0c565b5b6000600d5411156129eb576129c460646129b6600d548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b925082601460008282546129d89190613fca565b925050819055506129ea893085612e0c565b5b6000600f541115612a4557612a1e6064612a10600f548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b93508360136000828254612a329190613fca565b92505081905550612a44893086612e0c565b5b5b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612bb05760006011541115612af257612acb6064612abd6011548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b93508360136000828254612adf9190613fca565b92505081905550612af1893086612e0c565b5b60006010541115612b4c57612b256064612b176010548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b92508260146000828254612b399190613fca565b92505081905550612b4b893085612e0c565b5b60006012541115612baf57612b7f6064612b716012548a6132bb90919063ffffffff16565b61224790919063ffffffff16565b9050612bae89601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612e0c565b5b5b612bf9612bea82612bdc85612bce888a61223190919063ffffffff16565b61223190919063ffffffff16565b61223190919063ffffffff16565b886132d190919063ffffffff16565b9650505050505b612c0b858585612e0c565b5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d629061483d565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614589565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee19061461b565b60405180910390fd5b612ef58383836132e7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f72906148cf565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461300e9190613fca565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613072919061382f565b60405180910390a36130858484846132ec565b50505050565b6001601860146101000a81548160ff02191690831515021790555060006130b1306113a1565b9050600b54601454101580156130c95750600b548110155b1561318c5760006130e66002600b5461224790919063ffffffff16565b905060006130ff82600b546132d190919063ffffffff16565b9050600047905061311083306132f1565b600061312582476132d190919063ffffffff16565b9050613131838261356b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613164939291906148ef565b60405180910390a1600b54601460008282546131809190614926565b92505081905550505050505b600b54601554101580156131a25750600b548110155b156131f1576131d5600b54601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166132f1565b600b54601560008282546131e99190614926565b925050819055505b600b54601354101580156132075750600b548110155b1561329d57613218600b54306132f1565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015613280573d6000803e3d6000fd5b50600b54601360008282546132959190614926565b925050819055505b506000601860146101000a81548160ff021916908315150217905550565b600081836132c9919061495a565b905092915050565b600081836132df9190614926565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561330e5761330d61387c565b5b60405190808252806020026020018201604052801561333c5781602001602082028036833780820191505090505b509050308160008151811061335457613353613dd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341f91906149b1565b8160018151811061343357613432613dd9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508261349a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611d35565b10156134d0576134cf30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612068565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401613534959493929190614ad7565b600060405180830381600087803b15801561354e57600080fd5b505af1158015613562573d6000803e3d6000fd5b50505050505050565b61359830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612068565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135e46114a3565b426040518863ffffffff1660e01b815260040161360696959493929190614b31565b60606040518083038185885af1158015613624573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136499190614ba7565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561368a57808201518184015260208101905061366f565b60008484015250505050565b6000601f19601f8301169050919050565b60006136b282613650565b6136bc818561365b565b93506136cc81856020860161366c565b6136d581613696565b840191505092915050565b600060208201905081810360008301526136fa81846136a7565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061374182613716565b9050919050565b61375181613736565b811461375c57600080fd5b50565b60008135905061376e81613748565b92915050565b6000819050919050565b61378781613774565b811461379257600080fd5b50565b6000813590506137a48161377e565b92915050565b600080604083850312156137c1576137c061370c565b5b60006137cf8582860161375f565b92505060206137e085828601613795565b9150509250929050565b60008115159050919050565b6137ff816137ea565b82525050565b600060208201905061381a60008301846137f6565b92915050565b61382981613774565b82525050565b60006020820190506138446000830184613820565b92915050565b6000602082840312156138605761385f61370c565b5b600061386e84828501613795565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138b482613696565b810181811067ffffffffffffffff821117156138d3576138d261387c565b5b80604052505050565b60006138e6613702565b90506138f282826138ab565b919050565b600067ffffffffffffffff8211156139125761391161387c565b5b602082029050602081019050919050565b600080fd5b600061393b613936846138f7565b6138dc565b9050808382526020820190506020840283018581111561395e5761395d613923565b5b835b818110156139875780613973888261375f565b845260208401935050602081019050613960565b5050509392505050565b600082601f8301126139a6576139a5613877565b5b81356139b6848260208601613928565b91505092915050565b6000602082840312156139d5576139d461370c565b5b600082013567ffffffffffffffff8111156139f3576139f2613711565b5b6139ff84828501613991565b91505092915050565b600080600060608486031215613a2157613a2061370c565b5b6000613a2f86828701613795565b9350506020613a4086828701613795565b9250506040613a5186828701613795565b9150509250925092565b6000819050919050565b6000613a80613a7b613a7684613716565b613a5b565b613716565b9050919050565b6000613a9282613a65565b9050919050565b6000613aa482613a87565b9050919050565b613ab481613a99565b82525050565b6000602082019050613acf6000830184613aab565b92915050565b600060208284031215613aeb57613aea61370c565b5b6000613af98482850161375f565b91505092915050565b600080600060608486031215613b1b57613b1a61370c565b5b6000613b298682870161375f565b9350506020613b3a8682870161375f565b9250506040613b4b86828701613795565b9150509250925092565b600060ff82169050919050565b613b6b81613b55565b82525050565b6000602082019050613b866000830184613b62565b92915050565b613b9581613736565b82525050565b6000602082019050613bb06000830184613b8c565b92915050565b613bbf816137ea565b8114613bca57600080fd5b50565b600081359050613bdc81613bb6565b92915050565b60008060408385031215613bf957613bf861370c565b5b6000613c078582860161375f565b9250506020613c1885828601613bcd565b9150509250929050565b600060208284031215613c3857613c3761370c565b5b6000613c4684828501613bcd565b91505092915050565b60008060408385031215613c6657613c6561370c565b5b6000613c748582860161375f565b9250506020613c858582860161375f565b9150509250929050565b6000613c9a82613716565b9050919050565b613caa81613c8f565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce361370c565b5b6000613cf285828601613cb8565b9250506020613d0385828601613cb8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5457607f821691505b602082108103613d6757613d66613d0d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613da360208361365b565b9150613dae82613d6d565b602082019050919050565b60006020820190508181036000830152613dd281613d96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e4282613b55565b915060ff8203613e5557613e54613e08565b5b600182019050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613e96600c8361365b565b9150613ea182613e60565b602082019050919050565b60006020820190508181036000830152613ec581613e89565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000613f02600d8361365b565b9150613f0d82613ecc565b602082019050919050565b60006020820190508181036000830152613f3181613ef5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f9460288361365b565b9150613f9f82613f38565b604082019050919050565b60006020820190508181036000830152613fc381613f87565b9050919050565b6000613fd582613774565b9150613fe083613774565b9250828201905080821115613ff857613ff7613e08565b5b92915050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061405a60238361365b565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b60006040820190506140a56000830185613820565b6140b26020830184613820565b9392505050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b600061413b60458361365b565b9150614146826140b9565b606082019050919050565b6000602082019050818103600083015261416a8161412e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006141cd60258361365b565b91506141d882614171565b604082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600061425f602a8361365b565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142f160268361365b565b91506142fc82614295565b604082019050919050565b60006020820190508181036000830152614320816142e4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061438360248361365b565b915061438e82614327565b604082019050919050565b600060208201905081810360008301526143b281614376565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061441560228361365b565b9150614420826143b9565b604082019050919050565b6000602082019050818103600083015261444481614408565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061448582613774565b915061449083613774565b9250826144a05761449f61444b565b5b828204905092915050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b60006144e160088361365b565b91506144ec826144ab565b602082019050919050565b60006020820190508181036000830152614510816144d4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061457360258361365b565b915061457e82614517565b604082019050919050565b600060208201905081810360008301526145a281614566565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061460560238361365b565b9150614610826145a9565b604082019050919050565b60006020820190508181036000830152614634816145f8565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b600061467160138361365b565b915061467c8261463b565b602082019050919050565b600060208201905081810360008301526146a081614664565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b6000614703602c8361365b565b915061470e826146a7565b604082019050919050565b60006020820190508181036000830152614732816146f6565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b600061479560248361365b565b91506147a082614739565b604082019050919050565b600060208201905081810360008301526147c481614788565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061482760388361365b565b9150614832826147cb565b604082019050919050565b600060208201905081810360008301526148568161481a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148b960268361365b565b91506148c48261485d565b604082019050919050565b600060208201905081810360008301526148e8816148ac565b9050919050565b60006060820190506149046000830186613820565b6149116020830185613820565b61491e6040830184613820565b949350505050565b600061493182613774565b915061493c83613774565b925082820390508181111561495457614953613e08565b5b92915050565b600061496582613774565b915061497083613774565b925082820261497e81613774565b9150828204841483151761499557614994613e08565b5b5092915050565b6000815190506149ab81613748565b92915050565b6000602082840312156149c7576149c661370c565b5b60006149d58482850161499c565b91505092915050565b6000819050919050565b6000614a036149fe6149f9846149de565b613a5b565b613774565b9050919050565b614a13816149e8565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a4e81613736565b82525050565b6000614a608383614a45565b60208301905092915050565b6000602082019050919050565b6000614a8482614a19565b614a8e8185614a24565b9350614a9983614a35565b8060005b83811015614aca578151614ab18882614a54565b9750614abc83614a6c565b925050600181019050614a9d565b5085935050505092915050565b600060a082019050614aec6000830188613820565b614af96020830187614a0a565b8181036040830152614b0b8186614a79565b9050614b1a6060830185613b8c565b614b276080830184613820565b9695505050505050565b600060c082019050614b466000830189613b8c565b614b536020830188613820565b614b606040830187614a0a565b614b6d6060830186614a0a565b614b7a6080830185613b8c565b614b8760a0830184613820565b979650505050505050565b600081519050614ba18161377e565b92915050565b600080600060608486031215614bc057614bbf61370c565b5b6000614bce86828701614b92565b9350506020614bdf86828701614b92565b9250506040614bf086828701614b92565b915050925092509256fea26469706673582212209fd6db2d94602e68ed4b27aa0481bcc89ae6d1959e3a7bc284f8d7fd8f9f0a8664736f6c63430008110033

Deployed Bytecode Sourcemap

38552:12651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6870:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9037:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39222:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50416:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38357:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48992:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38638:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7990:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38823:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39120:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49897:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9688:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7832:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10589:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37937:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38686:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39803:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39421:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50544:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48099:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39171:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8161:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1879:94;;;;;;;;;;;;;:::i;:::-;;39329:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39688:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39384:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1228:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50860:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7089:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48414:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11307:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49283:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8501:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49578:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38733:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50118:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39458:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50681:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38878:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39069:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8739:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38943:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39005:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39276:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49706:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2128:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38277:72;;;;;;;;;;;;;:::i;:::-;;6870:100;6924:13;6957:5;6950:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6870:100;:::o;9037:169::-;9120:4;9137:39;9146:12;:10;:12::i;:::-;9160:7;9169:6;9137:8;:39::i;:::-;9194:4;9187:11;;9037:169;;;;:::o;39222:35::-;;;;:::o;50416:116::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50516:8:::1;50495:18;:29;;;;50416:116:::0;:::o;38357:186::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38444:7:::1;38440:96;38461:6;:13;38457:1;:17;;;38440:96;;;38520:4;38496:10;:21;38507:6;38514:1;38507:9;;;;;;;;;;:::i;:::-;;;;;;;;38496:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38476:3;;;;;:::i;:::-;;;;38440:96;;;;38357:186:::0;:::o;48992:283::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49144:1:::1;49105:35;49131:8;49105:21;49117:8;49105:7;:11;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;:40;;49097:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49191:7;49173:15;:25;;;;49222:8;49209:10;:21;;;;49259:8;49241:15;:26;;;;48992:283:::0;;;:::o;38638:41::-;;;;;;;;;;;;;:::o;7990:108::-;8051:7;8078:12;;8071:19;;7990:108;:::o;38823:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;39120:29::-;;;;:::o;49897:209::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50003:12:::1;49980:20;:35;;;;50058:22;50076:3;50058:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;50034:20;;:46;;50026:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49897:209:::0;:::o;9688:492::-;9828:4;9845:36;9855:6;9863:9;9874:6;9845:9;:36::i;:::-;9894:24;9921:11;:19;9933:6;9921:19;;;;;;;;;;;;;;;:33;9941:12;:10;:12::i;:::-;9921:33;;;;;;;;;;;;;;;;9894:60;;9993:6;9973:16;:26;;9965:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;10080:57;10089:6;10097:12;:10;:12::i;:::-;10130:6;10111:16;:25;10080:8;:57::i;:::-;10168:4;10161:11;;;9688:492;;;;;:::o;7832:93::-;7890:5;7915:2;7908:9;;7832:93;:::o;10589:215::-;10677:4;10694:80;10703:12;:10;:12::i;:::-;10717:7;10763:10;10726:11;:25;10738:12;:10;:12::i;:::-;10726:25;;;;;;;;;;;;;;;:34;10752:7;10726:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10694:8;:80::i;:::-;10792:4;10785:11;;10589:215;;;;:::o;37937:26::-;;;;;;;;;;;;;:::o;38686:38::-;;;:::o;39803:40::-;;;;;;;;;;;;;:::o;39421:30::-;;;;:::o;50544:125::-;50609:4;50633:19;:28;50653:7;50633:28;;;;;;;;;;;;;;;;;;;;;;;;;50626:35;;50544:125;;;:::o;48099:307::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48208:15:::1;;;;;;;;;;;48186:38;;:10;:38;;::::0;48178:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48322:15;;;;;;;;;;;48280:59;;48302:10;48280:59;;;;;;;;;;;;48387:10;48350:15;;:48;;;;;;;;;;;;;;;;;;48099:307:::0;:::o;39171:34::-;;;;:::o;8161:127::-;8235:7;8262:9;:18;8272:7;8262:18;;;;;;;;;;;;;;;;8255:25;;8161:127;;;:::o;1879:94::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1944:21:::1;1962:1;1944:9;:21::i;:::-;1879:94::o:0;39329:30::-;;;;:::o;39688:70::-;;;;;;;;;;;;;:::o;39384:30::-;;;;:::o;1228:87::-;1274:7;1301:6;;;;;;;;;;;1294:13;;1228:87;:::o;50860:290::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50936:17:::1;50956:14;;50936:34;;50997:9;50980:14;:26;;;;51043:22;51061:3;51043:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;51025:14;;:40;;51017:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51099:44;51122:9;51133;51099:44;;;;;;;:::i;:::-;;;;;;;;50925:225;50860:290:::0;:::o;7089:104::-;7145:13;7178:7;7171:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7089:104;:::o;48414:254::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48521:13:::1;48513:21;;:4;:21;;::::0;48505:103:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48619:41;48648:4;48654:5;48619:28;:41::i;:::-;48414:254:::0;;:::o;11307:413::-;11400:4;11417:24;11444:11;:25;11456:12;:10;:12::i;:::-;11444:25;;;;;;;;;;;;;;;:34;11470:7;11444:34;;;;;;;;;;;;;;;;11417:61;;11517:15;11497:16;:35;;11489:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11610:67;11619:12;:10;:12::i;:::-;11633:7;11661:15;11642:16;:34;11610:8;:67::i;:::-;11708:4;11701:11;;;11307:413;;;;:::o;49283:287::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49436:1:::1;49397:35;49423:8;49397:21;49409:8;49397:7;:11;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;:40;;49389:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49484:7;49465:16;:26;;;;49521:8;49502:16;:27;;;;49554:8;49540:11;:22;;;;49283:287:::0;;;:::o;8501:175::-;8587:4;8604:42;8614:12;:10;:12::i;:::-;8628:9;8639:6;8604:9;:42::i;:::-;8664:4;8657:11;;8501:175;;;;:::o;49578:120::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49685:5:::1;49659:14;:23;49674:7;49659:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;49578:120:::0;;:::o;38733:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;50118:290::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50243:8:::1;50211:40;;:19;:28;50231:7;50211:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;50203:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;50340:8;50309:19;:28;50329:7;50309:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;50382:7;50366:34;;;50391:8;50366:34;;;;;;:::i;:::-;;;;;;;;50118:290:::0;;:::o;39458:25::-;;;;:::o;50681:171::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50782:8:::1;50758:21;;:32;;;;;;;;;;;;;;;;;;50806:38;50835:8;50806:38;;;;;;:::i;:::-;;;;;;;;50681:171:::0;:::o;38878:58::-;;;;:::o;39069:34::-;;;;:::o;8739:151::-;8828:7;8855:11;:18;8867:5;8855:18;;;;;;;;;;;;;;;:27;8874:7;8855:27;;;;;;;;;;;;;;;;8848:34;;8739:151;;;;:::o;38943:55::-;;;;:::o;39005:52::-;;;;:::o;39276:35::-;;;;:::o;49706:183::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49835:11:::1;49817:15;;:29;;;;;;;;;;;;;;;;;;49870:11;49857:10;;:24;;;;;;;;;;;;;;;;;;49706:183:::0;;:::o;2128:192::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:1:::1;2217:22;;:8;:22;;::::0;2209:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:19;2303:8;2293:9;:19::i;:::-;2128:192:::0;:::o;38277:72::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38337:4:::1;38328:6;;:13;;;;;;;;;;;;;;;;;;38277:72::o:0;102:98::-;155:7;182:10;175:17;;102:98;:::o;14080:380::-;14233:1;14216:19;;:5;:19;;;14208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14314:1;14295:21;;:7;:21;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14398:6;14368:11;:18;14380:5;14368:18;;;;;;;;;;;;;;;:27;14387:7;14368:27;;;;;;;;;;;;;;;:36;;;;14436:7;14420:32;;14429:5;14420:32;;;14445:6;14420:32;;;;;;:::i;:::-;;;;;;;;14080:380;;;:::o;25794:98::-;25852:7;25883:1;25879;:5;;;;:::i;:::-;25872:12;;25794:98;;;;:::o;26931:::-;26989:7;27020:1;27016;:5;;;;:::i;:::-;27009:12;;26931:98;;;;:::o;41680:3482::-;41780:4;41786:2;38079:6;;;;;;;;;;;:26;;;;38089:10;:16;38100:4;38089:16;;;;;;;;;;;;;;;;;;;;;;;;;38079:26;:44;;;;38109:10;:14;38120:2;38109:14;;;;;;;;;;;;;;;;;;;;;;;;;38079:44;38071:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41843:1:::1;41827:18;;:4;:18;;::::0;41819:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41920:1;41906:16;;:2;:16;;::::0;41898:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41982:14;:20;41997:4;41982:20;;;;;;;;;;;;;;;;;;;;;;;;;41981:21;:44;;;;;42007:14;:18;42022:2;42007:18;;;;;;;;;;;;;;;;;;;;;;;;;42006:19;41981:44;41973:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42075:1;42065:6;:11:::0;42062:92:::1;;42093:28;42109:4;42115:2;42119:1;42093:15;:28::i;:::-;42136:7;;42062:92;42170:19;:25;42190:4;42170:25;;;;;;;;;;;;;;;;;;;;;;;;;42169:26;:54;;;;;42200:19;:23;42220:2;42200:23;;;;;;;;;;;;;;;;;;;;;;;;;42199:24;42169:54;42166:172;;;42257:20;;42247:6;:30;;42239:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42166:172;42354:25;:31;42380:4;42354:31;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;42390:19;:25;42410:4;42390:25;;;;;;;;;;;;;;;;;;;;;;;;;42389:26;42354:61;:89;;;;;42420:19;:23;42440:2;42420:23;;;;;;;;;;;;;;;;;;;;;;;;;42419:24;42354:89;42350:285;;;42460:32;42495:13;42505:2;42495:9;:13::i;:::-;42460:48;;42568:14;;42558:6;42531:24;:33;;;;:::i;:::-;:51;;42523:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42445:190;42350:285;42664:16;;;;;;;;;;;42663:17;:50;;;;;42684:25;:29;42710:2;42684:29;;;;;;;;;;;;;;;;;;;;;;;;;42663:50;:89;;;;;42731:21;;;;;;;;;;;42663:89;:249;;;;;42790:18;;42771:15;;:37;;:91;;;;42844:18;;42825:15;;:37;;42771:91;:140;;;;42893:18;;42879:10;;:32;;42771:140;42663:249;42660:316;;;42948:16;:14;:16::i;:::-;42660:316;43093:19;:25;43113:4;43093:25;;;;;;;;;;;;;;;;;;;;;;;;;43092:26;:54;;;;;43123:19;:23;43143:2;43123:23;;;;;;;;;;;;;;;;;;;;;;;;;43122:24;43092:54;43089:2018;;;43163:22;43200::::0;43237:17:::1;43269::::0;43318:25:::1;:31;43344:4;43318:31;;;;;;;;;;;;;;;;;;;;;;;;;43315:854;;;43404:1;43391:10;;:14;43388:221;;;43442:31;43469:3;43442:22;43453:10;;43442:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;43430:43;;43510:9;43496:10;;:23;;;;;;;:::i;:::-;;;;;;;;43542:47;43558:4;43572;43579:9;43542:15;:47::i;:::-;43388:221;43650:1;43632:15;;:19;43629:251;;;43693:36;43725:3;43693:27;43704:15;;43693:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;43676:53;;43771:14;43752:15;;:33;;;;;;;:::i;:::-;;;;;;;;43808:52;43824:4;43838;43845:14;43808:15;:52::i;:::-;43629:251;43922:1;43904:15;;:19;43901:251;;;43965:36;43997:3;43965:27;43976:15;;43965:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;43948:53;;44043:14;44024:15;;:33;;;;;;;:::i;:::-;;;;;;;;44080:52;44096:4;44110;44117:14;44080:15;:52::i;:::-;43901:251;43315:854;44188:25;:29;44214:2;44188:29;;;;;;;;;;;;;;;;;;;;;;;;;44185:807;;;44277:1;44258:16;;:20;44255:253;;;44320:37;44353:3;44320:28;44331:16;;44320:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;44303:54;;44399:14;44380:15;;:33;;;;;;;:::i;:::-;;;;;;;;44436:52;44452:4;44466;44473:14;44436:15;:52::i;:::-;44255:253;44550:1;44531:16;;:20;44528:253;;;44593:37;44626:3;44593:28;44604:16;;44593:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;44576:54;;44672:14;44653:15;;:33;;;;;;;:::i;:::-;;;;;;;;44709:52;44725:4;44739;44746:14;44709:15;:52::i;:::-;44528:253;44818:1;44804:11;;:15;44801:174;;;44856:32;44884:3;44856:23;44867:11;;44856:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44844:44;;44911;44927:4;44933:10;;;;;;;;;;;44945:9;44911:15;:44::i;:::-;44801:174;44185:807;45017:76;45028:64;45082:9;45028:49;45067:9;45028:34;45047:14;45028;:18;;:34;;;;:::i;:::-;:38;;:49;;;;:::i;:::-;:53;;:64;;;;:::i;:::-;45017:6;:10;;:76;;;;:::i;:::-;45008:85;;43148:1959;;;;43089:2018;45119:33;45135:4;45141:2;45145:6;45119:15;:33::i;:::-;38147:1;41680:3482:::0;;;;;:::o;2328:173::-;2384:16;2403:6;;;;;;;;;;;2384:25;;2429:8;2420:6;;:17;;;;;;;;;;;;;;;;;;2484:8;2453:40;;2474:8;2453:40;;;;;;;;;;;;2373:128;2328:173;:::o;48676:306::-;48802:5;48767:40;;:25;:31;48793:4;48767:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;48759:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;48913:5;48879:25;:31;48905:4;48879:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;48968:5;48934:40;;48962:4;48934:40;;;;;;;;;;;;48676:306;;:::o;12210:733::-;12368:1;12350:20;;:6;:20;;;12342:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12452:1;12431:23;;:9;:23;;;12423:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12507:47;12528:6;12536:9;12547:6;12507:20;:47::i;:::-;12567:21;12591:9;:17;12601:6;12591:17;;;;;;;;;;;;;;;;12567:41;;12644:6;12627:13;:23;;12619:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12765:6;12749:13;:22;12729:9;:17;12739:6;12729:17;;;;;;;;;;;;;;;:42;;;;12817:6;12793:9;:20;12803:9;12793:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12858:9;12841:35;;12850:6;12841:35;;;12869:6;12841:35;;;;;;:::i;:::-;;;;;;;;12889:46;12909:6;12917:9;12928:6;12889:19;:46::i;:::-;12331:612;12210:733;;;:::o;45170:1697::-;40507:4;40488:16;;:23;;;;;;;;;;;;;;;;;;45227:28:::1;45258:24;45276:4;45258:9;:24::i;:::-;45227:55;;45315:18;;45296:15;;:37;;:83;;;;;45361:18;;45337:20;:42;;45296:83;45293:1046;;;45451:12;45466:25;45489:1;45466:18;;:22;;:25;;;;:::i;:::-;45451:40;;45506:17;45526:28;45549:4;45526:18;;:22;;:28;;;;:::i;:::-;45506:48;;45852:22;45877:21;45852:46;;45951:37;45968:4;45982;45951:16;:37::i;:::-;46057:18;46078:41;46104:14;46078:21;:25;;:41;;;;:::i;:::-;46057:62;;46177:35;46190:9;46201:10;46177:12;:35::i;:::-;46232:43;46247:4;46253:10;46265:9;46232:43;;;;;;;;:::i;:::-;;;;;;;;46309:18;;46290:15;;:37;;;;;;;:::i;:::-;;;;;;;;45381:958;;;;45293:1046;46368:18;;46354:10;;:32;;:78;;;;;46414:18;;46390:20;:42;;46354:78;46351:205;;;46449:48;46466:18;;46486:10;;;;;;;;;;;46449:16;:48::i;:::-;46526:18;;46512:10;;:32;;;;;;;:::i;:::-;;;;;;;;46351:205;46590:18;;46571:15;;:37;;:83;;;;;46636:18;;46612:20;:42;;46571:83;46568:280;;;46671:51;46688:18;;46716:4;46671:16;:51::i;:::-;46737:15;;;;;;;;;;;:24;;:47;46762:21;46737:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46818:18;;46799:15;;:37;;;;;;;:::i;:::-;;;;;;;;46568:280;45216:1651;40553:5:::0;40534:16;;:24;;;;;;;;;;;;;;;;;;45170:1697::o;26532:98::-;26590:7;26621:1;26617;:5;;;;:::i;:::-;26610:12;;26532:98;;;;:::o;26175:::-;26233:7;26264:1;26260;:5;;;;:::i;:::-;26253:12;;26175:98;;;;:::o;15060:125::-;;;;:::o;15789:124::-;;;;:::o;47396:695::-;47535:21;47573:1;47559:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47535:40;;47604:4;47586;47591:1;47586:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47630:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47620:4;47625:1;47620:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47721:11;47668:50;47686:4;47701:15;;;;;;;;;;;47668:9;:50::i;:::-;:64;47665:156;;;47747:62;47764:4;47779:15;;;;;;;;;;;47806:1;47797:11;47747:8;:62::i;:::-;47665:156;47859:15;;;;;;;;;;;:66;;;47940:11;47966:1;48010:4;48029:3;48047:15;47859:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47464:627;47396:695;;:::o;46875:513::-;47023:62;47040:4;47055:15;;;;;;;;;;;47073:11;47023:8;:62::i;:::-;47128:15;;;;;;;;;;;:31;;;47167:9;47200:4;47220:11;47246:1;47289;47332:7;:5;:7::i;:::-;47354:15;47128:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46875:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446: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:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:117::-;4242:1;4239;4232:12;4256:180;4304:77;4301:1;4294:88;4401:4;4398:1;4391:15;4425:4;4422:1;4415:15;4442:281;4525:27;4547:4;4525:27;:::i;:::-;4517:6;4513:40;4655:6;4643:10;4640:22;4619:18;4607:10;4604:34;4601:62;4598:88;;;4666:18;;:::i;:::-;4598:88;4706:10;4702:2;4695:22;4485:238;4442:281;;:::o;4729:129::-;4763:6;4790:20;;:::i;:::-;4780:30;;4819:33;4847:4;4839:6;4819:33;:::i;:::-;4729:129;;;:::o;4864:311::-;4941:4;5031:18;5023:6;5020:30;5017:56;;;5053:18;;:::i;:::-;5017:56;5103:4;5095:6;5091:17;5083:25;;5163:4;5157;5153:15;5145:23;;4864:311;;;:::o;5181:117::-;5290:1;5287;5280:12;5321:710;5417:5;5442:81;5458:64;5515:6;5458:64;:::i;:::-;5442:81;:::i;:::-;5433:90;;5543:5;5572:6;5565:5;5558:21;5606:4;5599:5;5595:16;5588:23;;5659:4;5651:6;5647:17;5639:6;5635:30;5688:3;5680:6;5677:15;5674:122;;;5707:79;;:::i;:::-;5674:122;5822:6;5805:220;5839:6;5834:3;5831:15;5805:220;;;5914:3;5943:37;5976:3;5964:10;5943:37;:::i;:::-;5938:3;5931:50;6010:4;6005:3;6001:14;5994:21;;5881:144;5865:4;5860:3;5856:14;5849:21;;5805:220;;;5809:21;5423:608;;5321:710;;;;;:::o;6054:370::-;6125:5;6174:3;6167:4;6159:6;6155:17;6151:27;6141:122;;6182:79;;:::i;:::-;6141:122;6299:6;6286:20;6324:94;6414:3;6406:6;6399:4;6391:6;6387:17;6324:94;:::i;:::-;6315:103;;6131:293;6054:370;;;;:::o;6430:539::-;6514:6;6563:2;6551:9;6542:7;6538:23;6534:32;6531:119;;;6569:79;;:::i;:::-;6531:119;6717:1;6706:9;6702:17;6689:31;6747:18;6739:6;6736:30;6733:117;;;6769:79;;:::i;:::-;6733:117;6874:78;6944:7;6935:6;6924:9;6920:22;6874:78;:::i;:::-;6864:88;;6660:302;6430:539;;;;:::o;6975:619::-;7052:6;7060;7068;7117:2;7105:9;7096:7;7092:23;7088:32;7085:119;;;7123:79;;:::i;:::-;7085:119;7243:1;7268:53;7313:7;7304:6;7293:9;7289:22;7268:53;:::i;:::-;7258:63;;7214:117;7370:2;7396:53;7441:7;7432:6;7421:9;7417:22;7396:53;:::i;:::-;7386:63;;7341:118;7498:2;7524:53;7569:7;7560:6;7549:9;7545:22;7524:53;:::i;:::-;7514:63;;7469:118;6975:619;;;;;:::o;7600:60::-;7628:3;7649:5;7642:12;;7600:60;;;:::o;7666:142::-;7716:9;7749:53;7767:34;7776:24;7794:5;7776:24;:::i;:::-;7767:34;:::i;:::-;7749:53;:::i;:::-;7736:66;;7666:142;;;:::o;7814:126::-;7864:9;7897:37;7928:5;7897:37;:::i;:::-;7884:50;;7814:126;;;:::o;7946:153::-;8023:9;8056:37;8087:5;8056:37;:::i;:::-;8043:50;;7946:153;;;:::o;8105:185::-;8219:64;8277:5;8219:64;:::i;:::-;8214:3;8207:77;8105:185;;:::o;8296:276::-;8416:4;8454:2;8443:9;8439:18;8431:26;;8467:98;8562:1;8551:9;8547:17;8538:6;8467:98;:::i;:::-;8296:276;;;;:::o;8578:329::-;8637:6;8686:2;8674:9;8665:7;8661:23;8657:32;8654:119;;;8692:79;;:::i;:::-;8654:119;8812:1;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8783:117;8578:329;;;;:::o;8913:619::-;8990:6;8998;9006;9055:2;9043:9;9034:7;9030:23;9026:32;9023:119;;;9061:79;;:::i;:::-;9023:119;9181:1;9206:53;9251:7;9242:6;9231:9;9227:22;9206:53;:::i;:::-;9196:63;;9152:117;9308:2;9334:53;9379:7;9370:6;9359:9;9355:22;9334:53;:::i;:::-;9324:63;;9279:118;9436:2;9462:53;9507:7;9498:6;9487:9;9483:22;9462:53;:::i;:::-;9452:63;;9407:118;8913:619;;;;;:::o;9538:86::-;9573:7;9613:4;9606:5;9602:16;9591:27;;9538:86;;;:::o;9630:112::-;9713:22;9729:5;9713:22;:::i;:::-;9708:3;9701:35;9630:112;;:::o;9748:214::-;9837:4;9875:2;9864:9;9860:18;9852:26;;9888:67;9952:1;9941:9;9937:17;9928:6;9888:67;:::i;:::-;9748:214;;;;:::o;9968:118::-;10055:24;10073:5;10055:24;:::i;:::-;10050:3;10043:37;9968:118;;:::o;10092:222::-;10185:4;10223:2;10212:9;10208:18;10200:26;;10236:71;10304:1;10293:9;10289:17;10280:6;10236:71;:::i;:::-;10092:222;;;;:::o;10320:116::-;10390:21;10405:5;10390:21;:::i;:::-;10383:5;10380:32;10370:60;;10426:1;10423;10416:12;10370:60;10320:116;:::o;10442:133::-;10485:5;10523:6;10510:20;10501:29;;10539:30;10563:5;10539:30;:::i;:::-;10442:133;;;;:::o;10581:468::-;10646:6;10654;10703:2;10691:9;10682:7;10678:23;10674:32;10671:119;;;10709:79;;:::i;:::-;10671:119;10829:1;10854:53;10899:7;10890:6;10879:9;10875:22;10854:53;:::i;:::-;10844:63;;10800:117;10956:2;10982:50;11024:7;11015:6;11004:9;11000:22;10982:50;:::i;:::-;10972:60;;10927:115;10581:468;;;;;:::o;11055:323::-;11111:6;11160:2;11148:9;11139:7;11135:23;11131:32;11128:119;;;11166:79;;:::i;:::-;11128:119;11286:1;11311:50;11353:7;11344:6;11333:9;11329:22;11311:50;:::i;:::-;11301:60;;11257:114;11055:323;;;;:::o;11384:474::-;11452:6;11460;11509:2;11497:9;11488:7;11484:23;11480:32;11477:119;;;11515:79;;:::i;:::-;11477:119;11635:1;11660:53;11705:7;11696:6;11685:9;11681:22;11660:53;:::i;:::-;11650:63;;11606:117;11762:2;11788:53;11833:7;11824:6;11813:9;11809:22;11788:53;:::i;:::-;11778:63;;11733:118;11384:474;;;;;:::o;11864:104::-;11909:7;11938:24;11956:5;11938:24;:::i;:::-;11927:35;;11864:104;;;:::o;11974:138::-;12055:32;12081:5;12055:32;:::i;:::-;12048:5;12045:43;12035:71;;12102:1;12099;12092:12;12035:71;11974:138;:::o;12118:155::-;12172:5;12210:6;12197:20;12188:29;;12226:41;12261:5;12226:41;:::i;:::-;12118:155;;;;:::o;12279:506::-;12363:6;12371;12420:2;12408:9;12399:7;12395:23;12391:32;12388:119;;;12426:79;;:::i;:::-;12388:119;12546:1;12571:61;12624:7;12615:6;12604:9;12600:22;12571:61;:::i;:::-;12561:71;;12517:125;12681:2;12707:61;12760:7;12751:6;12740:9;12736:22;12707:61;:::i;:::-;12697:71;;12652:126;12279:506;;;;;:::o;12791:180::-;12839:77;12836:1;12829:88;12936:4;12933:1;12926:15;12960:4;12957:1;12950:15;12977:320;13021:6;13058:1;13052:4;13048:12;13038:22;;13105:1;13099:4;13095:12;13126:18;13116:81;;13182:4;13174:6;13170:17;13160:27;;13116:81;13244:2;13236:6;13233:14;13213:18;13210:38;13207:84;;13263:18;;:::i;:::-;13207:84;13028:269;12977:320;;;:::o;13303:182::-;13443:34;13439:1;13431:6;13427:14;13420:58;13303:182;:::o;13491:366::-;13633:3;13654:67;13718:2;13713:3;13654:67;:::i;:::-;13647:74;;13730:93;13819:3;13730:93;:::i;:::-;13848:2;13843:3;13839:12;13832:19;;13491:366;;;:::o;13863:419::-;14029:4;14067:2;14056:9;14052:18;14044:26;;14116:9;14110:4;14106:20;14102:1;14091:9;14087:17;14080:47;14144:131;14270:4;14144:131;:::i;:::-;14136:139;;13863:419;;;:::o;14288:180::-;14336:77;14333:1;14326:88;14433:4;14430:1;14423:15;14457:4;14454:1;14447:15;14474:180;14522:77;14519:1;14512:88;14619:4;14616:1;14609:15;14643:4;14640:1;14633:15;14660:167;14697:3;14720:22;14736:5;14720:22;:::i;:::-;14711:31;;14764:4;14757:5;14754:15;14751:41;;14772:18;;:::i;:::-;14751:41;14819:1;14812:5;14808:13;14801:20;;14660:167;;;:::o;14833:162::-;14973:14;14969:1;14961:6;14957:14;14950:38;14833:162;:::o;15001:366::-;15143:3;15164:67;15228:2;15223:3;15164:67;:::i;:::-;15157:74;;15240:93;15329:3;15240:93;:::i;:::-;15358:2;15353:3;15349:12;15342:19;;15001:366;;;:::o;15373:419::-;15539:4;15577:2;15566:9;15562:18;15554:26;;15626:9;15620:4;15616:20;15612:1;15601:9;15597:17;15590:47;15654:131;15780:4;15654:131;:::i;:::-;15646:139;;15373:419;;;:::o;15798:163::-;15938:15;15934:1;15926:6;15922:14;15915:39;15798:163;:::o;15967:366::-;16109:3;16130:67;16194:2;16189:3;16130:67;:::i;:::-;16123:74;;16206:93;16295:3;16206:93;:::i;:::-;16324:2;16319:3;16315:12;16308:19;;15967:366;;;:::o;16339:419::-;16505:4;16543:2;16532:9;16528:18;16520:26;;16592:9;16586:4;16582:20;16578:1;16567:9;16563:17;16556:47;16620:131;16746:4;16620:131;:::i;:::-;16612:139;;16339:419;;;:::o;16764:227::-;16904:34;16900:1;16892:6;16888:14;16881:58;16973:10;16968:2;16960:6;16956:15;16949:35;16764:227;:::o;16997:366::-;17139:3;17160:67;17224:2;17219:3;17160:67;:::i;:::-;17153:74;;17236:93;17325:3;17236:93;:::i;:::-;17354:2;17349:3;17345:12;17338:19;;16997:366;;;:::o;17369:419::-;17535:4;17573:2;17562:9;17558:18;17550:26;;17622:9;17616:4;17612:20;17608:1;17597:9;17593:17;17586:47;17650:131;17776:4;17650:131;:::i;:::-;17642:139;;17369:419;;;:::o;17794:191::-;17834:3;17853:20;17871:1;17853:20;:::i;:::-;17848:25;;17887:20;17905:1;17887:20;:::i;:::-;17882:25;;17930:1;17927;17923:9;17916:16;;17951:3;17948:1;17945:10;17942:36;;;17958:18;;:::i;:::-;17942:36;17794:191;;;;:::o;17991:222::-;18131:34;18127:1;18119:6;18115:14;18108:58;18200:5;18195:2;18187:6;18183:15;18176:30;17991:222;:::o;18219:366::-;18361:3;18382:67;18446:2;18441:3;18382:67;:::i;:::-;18375:74;;18458:93;18547:3;18458:93;:::i;:::-;18576:2;18571:3;18567:12;18560:19;;18219:366;;;:::o;18591:419::-;18757:4;18795:2;18784:9;18780:18;18772:26;;18844:9;18838:4;18834:20;18830:1;18819:9;18815:17;18808:47;18872:131;18998:4;18872:131;:::i;:::-;18864:139;;18591:419;;;:::o;19016:332::-;19137:4;19175:2;19164:9;19160:18;19152:26;;19188:71;19256:1;19245:9;19241:17;19232:6;19188:71;:::i;:::-;19269:72;19337:2;19326:9;19322:18;19313:6;19269:72;:::i;:::-;19016:332;;;;;:::o;19354:293::-;19494:34;19490:1;19482:6;19478:14;19471:58;19563:34;19558:2;19550:6;19546:15;19539:59;19632:7;19627:2;19619:6;19615:15;19608:32;19354:293;:::o;19653:366::-;19795:3;19816:67;19880:2;19875:3;19816:67;:::i;:::-;19809:74;;19892:93;19981:3;19892:93;:::i;:::-;20010:2;20005:3;20001:12;19994:19;;19653:366;;;:::o;20025:419::-;20191:4;20229:2;20218:9;20214:18;20206:26;;20278:9;20272:4;20268:20;20264:1;20253:9;20249:17;20242:47;20306:131;20432:4;20306:131;:::i;:::-;20298:139;;20025:419;;;:::o;20450:224::-;20590:34;20586:1;20578:6;20574:14;20567:58;20659:7;20654:2;20646:6;20642:15;20635:32;20450:224;:::o;20680:366::-;20822:3;20843:67;20907:2;20902:3;20843:67;:::i;:::-;20836:74;;20919:93;21008:3;20919:93;:::i;:::-;21037:2;21032:3;21028:12;21021:19;;20680:366;;;:::o;21052:419::-;21218:4;21256:2;21245:9;21241:18;21233:26;;21305:9;21299:4;21295:20;21291:1;21280:9;21276:17;21269:47;21333:131;21459:4;21333:131;:::i;:::-;21325:139;;21052:419;;;:::o;21477:229::-;21617:34;21613:1;21605:6;21601:14;21594:58;21686:12;21681:2;21673:6;21669:15;21662:37;21477:229;:::o;21712:366::-;21854:3;21875:67;21939:2;21934:3;21875:67;:::i;:::-;21868:74;;21951:93;22040:3;21951:93;:::i;:::-;22069:2;22064:3;22060:12;22053:19;;21712:366;;;:::o;22084:419::-;22250:4;22288:2;22277:9;22273:18;22265:26;;22337:9;22331:4;22327:20;22323:1;22312:9;22308:17;22301:47;22365:131;22491:4;22365:131;:::i;:::-;22357:139;;22084:419;;;:::o;22509:225::-;22649:34;22645:1;22637:6;22633:14;22626:58;22718:8;22713:2;22705:6;22701:15;22694:33;22509:225;:::o;22740:366::-;22882:3;22903:67;22967:2;22962:3;22903:67;:::i;:::-;22896:74;;22979:93;23068:3;22979:93;:::i;:::-;23097:2;23092:3;23088:12;23081:19;;22740:366;;;:::o;23112:419::-;23278:4;23316:2;23305:9;23301:18;23293:26;;23365:9;23359:4;23355:20;23351:1;23340:9;23336:17;23329:47;23393:131;23519:4;23393:131;:::i;:::-;23385:139;;23112:419;;;:::o;23537:223::-;23677:34;23673:1;23665:6;23661:14;23654:58;23746:6;23741:2;23733:6;23729:15;23722:31;23537:223;:::o;23766:366::-;23908:3;23929:67;23993:2;23988:3;23929:67;:::i;:::-;23922:74;;24005:93;24094:3;24005:93;:::i;:::-;24123:2;24118:3;24114:12;24107:19;;23766:366;;;:::o;24138:419::-;24304:4;24342:2;24331:9;24327:18;24319:26;;24391:9;24385:4;24381:20;24377:1;24366:9;24362:17;24355:47;24419:131;24545:4;24419:131;:::i;:::-;24411:139;;24138:419;;;:::o;24563:221::-;24703:34;24699:1;24691:6;24687:14;24680:58;24772:4;24767:2;24759:6;24755:15;24748:29;24563:221;:::o;24790:366::-;24932:3;24953:67;25017:2;25012:3;24953:67;:::i;:::-;24946:74;;25029:93;25118:3;25029:93;:::i;:::-;25147:2;25142:3;25138:12;25131:19;;24790:366;;;:::o;25162:419::-;25328:4;25366:2;25355:9;25351:18;25343:26;;25415:9;25409:4;25405:20;25401:1;25390:9;25386:17;25379:47;25443:131;25569:4;25443:131;:::i;:::-;25435:139;;25162:419;;;:::o;25587:180::-;25635:77;25632:1;25625:88;25732:4;25729:1;25722:15;25756:4;25753:1;25746:15;25773:185;25813:1;25830:20;25848:1;25830:20;:::i;:::-;25825:25;;25864:20;25882:1;25864:20;:::i;:::-;25859:25;;25903:1;25893:35;;25908:18;;:::i;:::-;25893:35;25950:1;25947;25943:9;25938:14;;25773:185;;;;:::o;25964:158::-;26104:10;26100:1;26092:6;26088:14;26081:34;25964:158;:::o;26128:365::-;26270:3;26291:66;26355:1;26350:3;26291:66;:::i;:::-;26284:73;;26366:93;26455:3;26366:93;:::i;:::-;26484:2;26479:3;26475:12;26468:19;;26128:365;;;:::o;26499:419::-;26665:4;26703:2;26692:9;26688:18;26680:26;;26752:9;26746:4;26742:20;26738:1;26727:9;26723:17;26716:47;26780:131;26906:4;26780:131;:::i;:::-;26772:139;;26499:419;;;:::o;26924:224::-;27064:34;27060:1;27052:6;27048:14;27041:58;27133:7;27128:2;27120:6;27116:15;27109:32;26924:224;:::o;27154:366::-;27296:3;27317:67;27381:2;27376:3;27317:67;:::i;:::-;27310:74;;27393:93;27482:3;27393:93;:::i;:::-;27511:2;27506:3;27502:12;27495:19;;27154:366;;;:::o;27526:419::-;27692:4;27730:2;27719:9;27715:18;27707:26;;27779:9;27773:4;27769:20;27765:1;27754:9;27750:17;27743:47;27807:131;27933:4;27807:131;:::i;:::-;27799:139;;27526:419;;;:::o;27951:222::-;28091:34;28087:1;28079:6;28075:14;28068:58;28160:5;28155:2;28147:6;28143:15;28136:30;27951:222;:::o;28179:366::-;28321:3;28342:67;28406:2;28401:3;28342:67;:::i;:::-;28335:74;;28418:93;28507:3;28418:93;:::i;:::-;28536:2;28531:3;28527:12;28520:19;;28179:366;;;:::o;28551:419::-;28717:4;28755:2;28744:9;28740:18;28732:26;;28804:9;28798:4;28794:20;28790:1;28779:9;28775:17;28768:47;28832:131;28958:4;28832:131;:::i;:::-;28824:139;;28551:419;;;:::o;28976:169::-;29116:21;29112:1;29104:6;29100:14;29093:45;28976:169;:::o;29151:366::-;29293:3;29314:67;29378:2;29373:3;29314:67;:::i;:::-;29307:74;;29390:93;29479:3;29390:93;:::i;:::-;29508:2;29503:3;29499:12;29492:19;;29151:366;;;:::o;29523:419::-;29689:4;29727:2;29716:9;29712:18;29704:26;;29776:9;29770:4;29766:20;29762:1;29751:9;29747:17;29740:47;29804:131;29930:4;29804:131;:::i;:::-;29796:139;;29523:419;;;:::o;29948:231::-;30088:34;30084:1;30076:6;30072:14;30065:58;30157:14;30152:2;30144:6;30140:15;30133:39;29948:231;:::o;30185:366::-;30327:3;30348:67;30412:2;30407:3;30348:67;:::i;:::-;30341:74;;30424:93;30513:3;30424:93;:::i;:::-;30542:2;30537:3;30533:12;30526:19;;30185:366;;;:::o;30557:419::-;30723:4;30761:2;30750:9;30746:18;30738:26;;30810:9;30804:4;30800:20;30796:1;30785:9;30781:17;30774:47;30838:131;30964:4;30838:131;:::i;:::-;30830:139;;30557:419;;;:::o;30982:223::-;31122:34;31118:1;31110:6;31106:14;31099:58;31191:6;31186:2;31178:6;31174:15;31167:31;30982:223;:::o;31211:366::-;31353:3;31374:67;31438:2;31433:3;31374:67;:::i;:::-;31367:74;;31450:93;31539:3;31450:93;:::i;:::-;31568:2;31563:3;31559:12;31552:19;;31211:366;;;:::o;31583:419::-;31749:4;31787:2;31776:9;31772:18;31764:26;;31836:9;31830:4;31826:20;31822:1;31811:9;31807:17;31800:47;31864:131;31990:4;31864:131;:::i;:::-;31856:139;;31583:419;;;:::o;32008:243::-;32148:34;32144:1;32136:6;32132:14;32125:58;32217:26;32212:2;32204:6;32200:15;32193:51;32008:243;:::o;32257:366::-;32399:3;32420:67;32484:2;32479:3;32420:67;:::i;:::-;32413:74;;32496:93;32585:3;32496:93;:::i;:::-;32614:2;32609:3;32605:12;32598:19;;32257:366;;;:::o;32629:419::-;32795:4;32833:2;32822:9;32818:18;32810:26;;32882:9;32876:4;32872:20;32868:1;32857:9;32853:17;32846:47;32910:131;33036:4;32910:131;:::i;:::-;32902:139;;32629:419;;;:::o;33054:225::-;33194:34;33190:1;33182:6;33178:14;33171:58;33263:8;33258:2;33250:6;33246:15;33239:33;33054:225;:::o;33285:366::-;33427:3;33448:67;33512:2;33507:3;33448:67;:::i;:::-;33441:74;;33524:93;33613:3;33524:93;:::i;:::-;33642:2;33637:3;33633:12;33626:19;;33285:366;;;:::o;33657:419::-;33823:4;33861:2;33850:9;33846:18;33838:26;;33910:9;33904:4;33900:20;33896:1;33885:9;33881:17;33874:47;33938:131;34064:4;33938:131;:::i;:::-;33930:139;;33657:419;;;:::o;34082:442::-;34231:4;34269:2;34258:9;34254:18;34246:26;;34282:71;34350:1;34339:9;34335:17;34326:6;34282:71;:::i;:::-;34363:72;34431:2;34420:9;34416:18;34407:6;34363:72;:::i;:::-;34445;34513:2;34502:9;34498:18;34489:6;34445:72;:::i;:::-;34082:442;;;;;;:::o;34530:194::-;34570:4;34590:20;34608:1;34590:20;:::i;:::-;34585:25;;34624:20;34642:1;34624:20;:::i;:::-;34619:25;;34668:1;34665;34661:9;34653:17;;34692:1;34686:4;34683:11;34680:37;;;34697:18;;:::i;:::-;34680:37;34530:194;;;;:::o;34730:410::-;34770:7;34793:20;34811:1;34793:20;:::i;:::-;34788:25;;34827:20;34845:1;34827:20;:::i;:::-;34822:25;;34882:1;34879;34875:9;34904:30;34922:11;34904:30;:::i;:::-;34893:41;;35083:1;35074:7;35070:15;35067:1;35064:22;35044:1;35037:9;35017:83;34994:139;;35113:18;;:::i;:::-;34994:139;34778:362;34730:410;;;;:::o;35146:143::-;35203:5;35234:6;35228:13;35219:22;;35250:33;35277:5;35250:33;:::i;:::-;35146:143;;;;:::o;35295:351::-;35365:6;35414:2;35402:9;35393:7;35389:23;35385:32;35382:119;;;35420:79;;:::i;:::-;35382:119;35540:1;35565:64;35621:7;35612:6;35601:9;35597:22;35565:64;:::i;:::-;35555:74;;35511:128;35295:351;;;;:::o;35652:85::-;35697:7;35726:5;35715:16;;35652:85;;;:::o;35743:158::-;35801:9;35834:61;35852:42;35861:32;35887:5;35861:32;:::i;:::-;35852:42;:::i;:::-;35834:61;:::i;:::-;35821:74;;35743:158;;;:::o;35907:147::-;36002:45;36041:5;36002:45;:::i;:::-;35997:3;35990:58;35907:147;;:::o;36060:114::-;36127:6;36161:5;36155:12;36145:22;;36060:114;;;:::o;36180:184::-;36279:11;36313:6;36308:3;36301:19;36353:4;36348:3;36344:14;36329:29;;36180:184;;;;:::o;36370:132::-;36437:4;36460:3;36452:11;;36490:4;36485:3;36481:14;36473:22;;36370:132;;;:::o;36508:108::-;36585:24;36603:5;36585:24;:::i;:::-;36580:3;36573:37;36508:108;;:::o;36622:179::-;36691:10;36712:46;36754:3;36746:6;36712:46;:::i;:::-;36790:4;36785:3;36781:14;36767:28;;36622:179;;;;:::o;36807:113::-;36877:4;36909;36904:3;36900:14;36892:22;;36807:113;;;:::o;36956:732::-;37075:3;37104:54;37152:5;37104:54;:::i;:::-;37174:86;37253:6;37248:3;37174:86;:::i;:::-;37167:93;;37284:56;37334:5;37284:56;:::i;:::-;37363:7;37394:1;37379:284;37404:6;37401:1;37398:13;37379:284;;;37480:6;37474:13;37507:63;37566:3;37551:13;37507:63;:::i;:::-;37500:70;;37593:60;37646:6;37593:60;:::i;:::-;37583:70;;37439:224;37426:1;37423;37419:9;37414:14;;37379:284;;;37383:14;37679:3;37672:10;;37080:608;;;36956:732;;;;:::o;37694:831::-;37957:4;37995:3;37984:9;37980:19;37972:27;;38009:71;38077:1;38066:9;38062:17;38053:6;38009:71;:::i;:::-;38090:80;38166:2;38155:9;38151:18;38142:6;38090:80;:::i;:::-;38217:9;38211:4;38207:20;38202:2;38191:9;38187:18;38180:48;38245:108;38348:4;38339:6;38245:108;:::i;:::-;38237:116;;38363:72;38431:2;38420:9;38416:18;38407:6;38363:72;:::i;:::-;38445:73;38513:3;38502:9;38498:19;38489:6;38445:73;:::i;:::-;37694:831;;;;;;;;:::o;38531:807::-;38780:4;38818:3;38807:9;38803:19;38795:27;;38832:71;38900:1;38889:9;38885:17;38876:6;38832:71;:::i;:::-;38913:72;38981:2;38970:9;38966:18;38957:6;38913:72;:::i;:::-;38995:80;39071:2;39060:9;39056:18;39047:6;38995:80;:::i;:::-;39085;39161:2;39150:9;39146:18;39137:6;39085:80;:::i;:::-;39175:73;39243:3;39232:9;39228:19;39219:6;39175:73;:::i;:::-;39258;39326:3;39315:9;39311:19;39302:6;39258:73;:::i;:::-;38531:807;;;;;;;;;:::o;39344:143::-;39401:5;39432:6;39426:13;39417:22;;39448:33;39475:5;39448:33;:::i;:::-;39344:143;;;;:::o;39493:663::-;39581:6;39589;39597;39646:2;39634:9;39625:7;39621:23;39617:32;39614:119;;;39652:79;;:::i;:::-;39614:119;39772:1;39797:64;39853:7;39844:6;39833:9;39829:22;39797:64;:::i;:::-;39787:74;;39743:128;39910:2;39936:64;39992:7;39983:6;39972:9;39968:22;39936:64;:::i;:::-;39926:74;;39881:129;40049:2;40075:64;40131:7;40122:6;40111:9;40107:22;40075:64;:::i;:::-;40065:74;;40020:129;39493:663;;;;;:::o

Swarm Source

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