ETH Price: $3,319.71 (-3.33%)
Gas: 21 Gwei

Token

Bee Tools (BUZZ)
 

Overview

Max Total Supply

100,000,000 BUZZ

Holders

494

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,000 BUZZ

Value
$0.00
0xF5dd83180669255D64686921eA525F0096b95f23
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:
BeeTools

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.23;


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

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/**
 * @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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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 _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

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

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

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

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

////// src/IUniswapV2Factory.sol

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract BeeTools is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address private marketingWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 private launchedAt;
    uint256 private launchedTime;
    uint256 private changeBlocks;

    uint256 public buyTotalFees;
    uint256 public sellTotalFees;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(uint256 => uint256) private swapInBlock;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    mapping(address => bool) private automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor(address _addressWallet) ERC20("Bee Tools", "BUZZ") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000 * 1e18;


        maxTransactionAmount = 1_000_000 * 1e18;
        maxWallet = 1_000_000 * 1e18;
        swapTokensAtAmount = totalSupply / 500;

        marketingWallet = _addressWallet;

        buyTotalFees = 4;
        sellTotalFees = 4;

        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply.div(100).mul(30));
        _mint(marketingWallet, totalSupply.div(100).mul(70));
    }

    receive() external payable {}

    function openTrading(uint256 _changeBlocks, uint256 _changeFees) external onlyOwner {
        changeBlocks = _changeBlocks;
        buyTotalFees = _changeFees;
        sellTotalFees = _changeFees;
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 10,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function manualswap(uint256 amount) external {
      require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

    function manualsend() external {
        bool success;
        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(
        uint256 _marketingFee
    ) external onlyOwner {
            buyTotalFees = _marketingFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _marketingFee
    ) external onlyOwner {
        sellTotalFees = _marketingFee;
        require(sellTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function walletDrop(address[] calldata addresses, uint256[] calldata amounts) external {
          require(addresses.length > 0 && amounts.length == addresses.length);
          address from = msg.sender;

          for (uint i = 0; i < addresses.length; i++) {

            _transfer(from, addresses[i], amounts[i] * (10**18));
          }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

        uint256 blockNum = block.number;

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
              if
                ((launchedAt + changeBlocks) >= blockNum)
              {
                maxTransactionAmount = 100_000_000 * 1e18;
                maxWallet =  100_000_000 * 1e18;

              } else if(blockNum > (launchedAt + changeBlocks))
              {
                maxTransactionAmount = 1_000_000 * 1e18;
                maxWallet =  1_000_000 * 1e18;

                buyTotalFees = 31;

                sellTotalFees = 31;
              }

                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance * 20 >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            (swapInBlock[blockNum] < 2) &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            ++swapInBlock[blockNum];

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount) {
            contractBalance = swapTokensAtAmount;
        }


        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_addressWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_changeBlocks","type":"uint256"},{"internalType":"uint256","name":"_changeFees","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"walletDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a5f6101000a81548160ff0219169083151502179055505f600a60016101000a81548160ff0219169083151502179055505f600a60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040516200563038038062005630833981810160405281019062000084919062000b40565b6040518060400160405280600981526020017f42656520546f6f6c7300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42555a5a00000000000000000000000000000000000000000000000000000000815250816003908162000101919062000dd4565b50806004908162000113919062000dd4565b505050620001366200012a6200058560201b60201c565b6200058c60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001618160016200064f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000205919062000b40565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000291919062000b40565b6040518363ffffffff1660e01b8152600401620002b092919062000ec9565b6020604051808303815f875af1158015620002cd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f3919062000b40565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033b60a05160016200064f60201b60201c565b6200035060a05160016200073660201b60201c565b5f6a52b7d2dcc80cd2e4000000905069d3c21bcecceda100000060078190555069d3c21bcecceda10000006009819055506101f48162000391919062000f4e565b6008819055508260065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600e819055506004600f8190555062000409620003fb620007d460201b60201c565b6001620007fc60201b60201c565b6200043d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007fc60201b60201c565b62000450306001620007fc60201b60201c565b6200046561dead6001620007fc60201b60201c565b6200048762000479620007d460201b60201c565b60016200064f60201b60201c565b620004bb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200064f60201b60201c565b620004ce3060016200064f60201b60201c565b620004e361dead60016200064f60201b60201c565b6200051f3362000513601e620005046064866200093360201b90919060201c565b6200094a60201b90919060201c565b6200096160201b60201c565b6200057c60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620005706046620005616064866200093360201b90919060201c565b6200094a60201b90919060201c565b6200096160201b60201c565b50505062001158565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200065f6200058560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000685620007d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d59062000fe3565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200080c6200058560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000832620007d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200088b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008829062000fe3565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200092791906200101f565b60405180910390a25050565b5f818362000942919062000f4e565b905092915050565b5f81836200095991906200103a565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c990620010d2565b60405180910390fd5b620009e55f838362000ad160201b60201c565b8060025f828254620009f89190620010f2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a4c9190620010f2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab291906200113d565b60405180910390a362000acd5f838362000ad660201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000b0a8262000adf565b9050919050565b62000b1c8162000afe565b811462000b27575f80fd5b50565b5f8151905062000b3a8162000b11565b92915050565b5f6020828403121562000b585762000b5762000adb565b5b5f62000b678482850162000b2a565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bec57607f821691505b60208210810362000c025762000c0162000ba7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c29565b62000c72868362000c29565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000cbc62000cb662000cb08462000c8a565b62000c93565b62000c8a565b9050919050565b5f819050919050565b62000cd78362000c9c565b62000cef62000ce68262000cc3565b84845462000c35565b825550505050565b5f90565b62000d0562000cf7565b62000d1281848462000ccc565b505050565b5b8181101562000d395762000d2d5f8262000cfb565b60018101905062000d18565b5050565b601f82111562000d885762000d528162000c08565b62000d5d8462000c1a565b8101602085101562000d6d578190505b62000d8562000d7c8562000c1a565b83018262000d17565b50505b505050565b5f82821c905092915050565b5f62000daa5f198460080262000d8d565b1980831691505092915050565b5f62000dc4838362000d99565b9150826002028217905092915050565b62000ddf8262000b70565b67ffffffffffffffff81111562000dfb5762000dfa62000b7a565b5b62000e07825462000bd4565b62000e1482828562000d3d565b5f60209050601f83116001811462000e4a575f841562000e35578287015190505b62000e41858262000db7565b86555062000eb0565b601f19841662000e5a8662000c08565b5f5b8281101562000e835784890151825560018201915060208501945060208101905062000e5c565b8683101562000ea3578489015162000e9f601f89168262000d99565b8355505b6001600288020188555050505b505050505050565b62000ec38162000afe565b82525050565b5f60408201905062000ede5f83018562000eb8565b62000eed602083018462000eb8565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f5a8262000c8a565b915062000f678362000c8a565b92508262000f7a5762000f7962000ef4565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000fcb60208362000f85565b915062000fd88262000f95565b602082019050919050565b5f6020820190508181035f83015262000ffc8162000fbd565b9050919050565b5f8115159050919050565b620010198162001003565b82525050565b5f602082019050620010345f8301846200100e565b92915050565b5f620010468262000c8a565b9150620010538362000c8a565b9250828202620010638162000c8a565b915082820484148315176200107d576200107c62000f21565b5b5092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010ba601f8362000f85565b9150620010c78262001084565b602082019050919050565b5f6020820190508181035f830152620010eb81620010ac565b9050919050565b5f620010fe8262000c8a565b91506200110b8362000c8a565b925082820190508082111562001126576200112562000f21565b5b92915050565b620011378162000c8a565b82525050565b5f602082019050620011525f8301846200112c565b92915050565b60805160a05161449a620011965f395f8181610d5c01526113d001525f81816109d601528181612add01528181612bbc0152612be3015261449a5ff3fe60806040526004361061023e575f3560e01c8063881dce601161012d578063c18bc195116100aa578063e2f456051161006e578063e2f456051461085b578063e7a919f914610885578063eba4c333146108ad578063f2fde38b146108d5578063f8b45b05146108fd57610245565b8063c18bc19514610767578063c8c8ebe41461078f578063d257b34f146107b9578063d85ba063146107f5578063dd62ed3e1461081f57610245565b8063a457c2d7116100f1578063a457c2d714610675578063a9059cbb146106b1578063aacebbe3146106ed578063bbc0c74214610715578063c02466681461073f57610245565b8063881dce60146105a95780638da5cb5b146105d1578063924de9b7146105fb57806395d89b41146106235780639a7a23d61461064d57610245565b806349bd5a5e116101bb57806370a082311161017f57806370a08231146104dd578063715018a61461051957806371fc46881461052f578063751039fc146105575780637571336a1461058157610245565b806349bd5a5e1461041f5780634a62bb65146104495780636a486a8e146104735780636ddd17131461049d5780636fc3eaec146104c757610245565b8063212845e711610202578063212845e71461032b57806323b872dd1461035357806327c8f8351461038f578063313ce567146103b957806339509351146103e357610245565b806306fdde0314610249578063095ea7b3146102735780631694505e146102af57806318160ddd146102d9578063203e727e1461030357610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d610927565b60405161026a919061310c565b60405180910390f35b34801561027e575f80fd5b50610299600480360381019061029491906131c1565b6109b7565b6040516102a69190613219565b60405180910390f35b3480156102ba575f80fd5b506102c36109d4565b6040516102d0919061328d565b60405180910390f35b3480156102e4575f80fd5b506102ed6109f8565b6040516102fa91906132b5565b60405180910390f35b34801561030e575f80fd5b50610329600480360381019061032491906132ce565b610a01565b005b348015610336575f80fd5b50610351600480360381019061034c91906133af565b610b10565b005b34801561035e575f80fd5b506103796004803603810190610374919061342d565b610bb3565b6040516103869190613219565b60405180910390f35b34801561039a575f80fd5b506103a3610ca5565b6040516103b0919061348c565b60405180910390f35b3480156103c4575f80fd5b506103cd610cab565b6040516103da91906134c0565b60405180910390f35b3480156103ee575f80fd5b50610409600480360381019061040491906131c1565b610cb3565b6040516104169190613219565b60405180910390f35b34801561042a575f80fd5b50610433610d5a565b604051610440919061348c565b60405180910390f35b348015610454575f80fd5b5061045d610d7e565b60405161046a9190613219565b60405180910390f35b34801561047e575f80fd5b50610487610d90565b60405161049491906132b5565b60405180910390f35b3480156104a8575f80fd5b506104b1610d96565b6040516104be9190613219565b60405180910390f35b3480156104d2575f80fd5b506104db610da9565b005b3480156104e8575f80fd5b5061050360048036038101906104fe91906134d9565b610e37565b60405161051091906132b5565b60405180910390f35b348015610524575f80fd5b5061052d610e7c565b005b34801561053a575f80fd5b50610555600480360381019061055091906132ce565b610f03565b005b348015610562575f80fd5b5061056b610fcf565b6040516105789190613219565b60405180910390f35b34801561058c575f80fd5b506105a760048036038101906105a2919061352e565b61106c565b005b3480156105b4575f80fd5b506105cf60048036038101906105ca91906132ce565b611140565b005b3480156105dc575f80fd5b506105e5611201565b6040516105f2919061348c565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c919061356c565b611229565b005b34801561062e575f80fd5b506106376112c2565b604051610644919061310c565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e919061352e565b611352565b005b348015610680575f80fd5b5061069b600480360381019061069691906131c1565b61146a565b6040516106a89190613219565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d291906131c1565b611550565b6040516106e49190613219565b60405180910390f35b3480156106f8575f80fd5b50610713600480360381019061070e91906134d9565b61156d565b005b348015610720575f80fd5b506107296116a7565b6040516107369190613219565b60405180910390f35b34801561074a575f80fd5b506107656004803603810190610760919061352e565b6116ba565b005b348015610772575f80fd5b5061078d600480360381019061078891906132ce565b6117dc565b005b34801561079a575f80fd5b506107a36118eb565b6040516107b091906132b5565b60405180910390f35b3480156107c4575f80fd5b506107df60048036038101906107da91906132ce565b6118f1565b6040516107ec9190613219565b60405180910390f35b348015610800575f80fd5b50610809611a44565b60405161081691906132b5565b60405180910390f35b34801561082a575f80fd5b5061084560048036038101906108409190613597565b611a4a565b60405161085291906132b5565b60405180910390f35b348015610866575f80fd5b5061086f611acc565b60405161087c91906132b5565b60405180910390f35b348015610890575f80fd5b506108ab60048036038101906108a691906135d5565b611ad2565b005b3480156108b8575f80fd5b506108d360048036038101906108ce91906132ce565b611bab565b005b3480156108e0575f80fd5b506108fb60048036038101906108f691906134d9565b611c77565b005b348015610908575f80fd5b50610911611d6d565b60405161091e91906132b5565b60405180910390f35b60606003805461093690613640565b80601f016020809104026020016040519081016040528092919081815260200182805461096290613640565b80156109ad5780601f10610984576101008083540402835291602001916109ad565b820191905f5260205f20905b81548152906001019060200180831161099057829003601f168201915b5050505050905090565b5f6109ca6109c3611d73565b8484611d7a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610a09611d73565b73ffffffffffffffffffffffffffffffffffffffff16610a27611201565b73ffffffffffffffffffffffffffffffffffffffff1614610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a74906136ba565b60405180910390fd5b670de0b6b3a76400006103e86001610a936109f8565b610a9d9190613705565b610aa79190613773565b610ab19190613773565b811015610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613813565b60405180910390fd5b670de0b6b3a764000081610b079190613705565b60078190555050565b5f84849050118015610b2757508383905082829050145b610b2f575f80fd5b5f3390505f5b85859050811015610bab57610b9e82878784818110610b5757610b56613831565b5b9050602002016020810190610b6c91906134d9565b670de0b6b3a7640000878786818110610b8857610b87613831565b5b90506020020135610b999190613705565b611f3d565b8080600101915050610b35565b505050505050565b5f610bbf848484611f3d565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c06611d73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906138ce565b60405180910390fd5b610c9985610c91611d73565b858403611d7a565b60019150509392505050565b61dead81565b5f6012905090565b5f610d50610cbf611d73565b848460015f610ccc611d73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610d4b91906138ec565b611d7a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5f9054906101000a900460ff1681565b600f5481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610def9061394c565b5f6040518083038185875af1925050503d805f8114610e29576040519150601f19603f3d011682016040523d82523d5f602084013e610e2e565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e84611d73565b73ffffffffffffffffffffffffffffffffffffffff16610ea2611201565b73ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef906136ba565b60405180910390fd5b610f015f61297d565b565b610f0b611d73565b73ffffffffffffffffffffffffffffffffffffffff16610f29611201565b73ffffffffffffffffffffffffffffffffffffffff1614610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906136ba565b60405180910390fd5b80600e819055506014600e541115610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906139aa565b60405180910390fd5b50565b5f610fd8611d73565b73ffffffffffffffffffffffffffffffffffffffff16610ff6611201565b73ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906136ba565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b611074611d73565b73ffffffffffffffffffffffffffffffffffffffff16611092611201565b73ffffffffffffffffffffffffffffffffffffffff16146110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df906136ba565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611180611d73565b73ffffffffffffffffffffffffffffffffffffffff161461119f575f80fd5b6111a830610e37565b81111580156111b657505f81115b6111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec90613a12565b60405180910390fd5b6111fe81612a40565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611231611d73565b73ffffffffffffffffffffffffffffffffffffffff1661124f611201565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906136ba565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6060600480546112d190613640565b80601f01602080910402602001604051908101604052809291908181526020018280546112fd90613640565b80156113485780601f1061131f57610100808354040283529160200191611348565b820191905f5260205f20905b81548152906001019060200180831161132b57829003601f168201915b5050505050905090565b61135a611d73565b73ffffffffffffffffffffffffffffffffffffffff16611378611201565b73ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906136ba565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390613aa0565b60405180910390fd5b6114668282612c73565b5050565b5f8060015f611477611d73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890613b2e565b60405180910390fd5b61154561153c611d73565b85858403611d7a565b600191505092915050565b5f61156361155c611d73565b8484611f3d565b6001905092915050565b611575611d73565b73ffffffffffffffffffffffffffffffffffffffff16611593611201565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e0906136ba565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60019054906101000a900460ff1681565b6116c2611d73565b73ffffffffffffffffffffffffffffffffffffffff166116e0611201565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d906136ba565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117d09190613219565b60405180910390a25050565b6117e4611d73565b73ffffffffffffffffffffffffffffffffffffffff16611802611201565b73ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f906136ba565b60405180910390fd5b670de0b6b3a76400006103e8600561186e6109f8565b6118789190613705565b6118829190613773565b61188c9190613773565b8110156118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613bbc565b60405180910390fd5b670de0b6b3a7640000816118e29190613705565b60098190555050565b60075481565b5f6118fa611d73565b73ffffffffffffffffffffffffffffffffffffffff16611918611201565b73ffffffffffffffffffffffffffffffffffffffff161461196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906136ba565b60405180910390fd5b620186a0600161197c6109f8565b6119869190613705565b6119909190613773565b8210156119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990613c4a565b60405180910390fd5b600a60056119de6109f8565b6119e89190613705565b6119f29190613773565b821115611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613cd8565b60405180910390fd5b8160088190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611ada611d73565b73ffffffffffffffffffffffffffffffffffffffff16611af8611201565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b45906136ba565b60405180910390fd5b81600d8190555080600e8190555080600f819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600b8190555042600c819055505050565b611bb3611d73565b73ffffffffffffffffffffffffffffffffffffffff16611bd1611201565b73ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906136ba565b60405180910390fd5b80600f819055506014600f541115611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b906139aa565b60405180910390fd5b50565b611c7f611d73565b73ffffffffffffffffffffffffffffffffffffffff16611c9d611201565b73ffffffffffffffffffffffffffffffffffffffff1614611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906136ba565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613d66565b60405180910390fd5b611d6a8161297d565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90613df4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90613e82565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f3091906132b5565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290613f10565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090613f9e565b60405180910390fd5b5f81036120305761202b83835f612d11565b612978565b5f439050600a5f9054906101000a900460ff16156125a257612050611201565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156120be575061208e611201565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120f657505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612130575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121495750600560149054906101000a900460ff16155b156125a15780600d54600b5461215f91906138ec565b1061218d576a52b7d2dcc80cd2e40000006007819055506a52b7d2dcc80cd2e40000006009819055506121d8565b600d54600b5461219d91906138ec565b8111156121d75769d3c21bcecceda100000060078190555069d3c21bcecceda1000000600981905550601f600e81905550601f600f819055505b5b600a60019054906101000a900460ff166122c75760105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612287575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614006565b60405180910390fd5b5b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612364575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561240b576007548211156123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590614094565b60405180910390fd5b6009546123ba84610e37565b836123c591906138ec565b1115612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd906140fc565b60405180910390fd5b6125a0565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124a8575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124f7576007548211156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e99061418a565b60405180910390fd5b61259f565b60125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661259e5760095461255184610e37565b8361255c91906138ec565b111561259d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612594906140fc565b60405180910390fd5b5b5b5b5b5b5f6125ac30610e37565b90505f6008546014836125bf9190613705565b101590508080156125dc5750600a60029054906101000a900460ff165b80156125f55750600560149054906101000a900460ff16155b80156126125750600260115f8581526020019081526020015f2054105b8015612665575060135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126b8575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561270b575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612772576001600560146101000a81548160ff021916908315150217905550612733612f86565b60115f8481526020019081526020015f205f8154612750906141a8565b919050819055505f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612821575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561282a575f90505b5f81156129675760135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561288857505f600f54115b156128bc576128b560646128a7600f548961304e90919063ffffffff16565b61306390919063ffffffff16565b9050612944565b60135f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561291357505f600e54115b15612943576129406064612932600e548961304e90919063ffffffff16565b61306390919063ffffffff16565b90505b5b5f81111561295857612957883083612d11565b5b808661296491906141ef565b95505b612972888888612d11565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612a5c57612a5b614222565b5b604051908082528060200260200182016040528015612a8a5781602001602082028036833780820191505090505b50905030815f81518110612aa157612aa0613831565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b689190614263565b81600181518110612b7c57612b7b613831565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612be1307f000000000000000000000000000000000000000000000000000000000000000084611d7a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612c4295949392919061437e565b5f604051808303815f87803b158015612c59575f80fd5b505af1158015612c6b573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7690613f10565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490613f9e565b60405180910390fd5b612df8838383613078565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614446565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612f0991906138ec565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f6d91906132b5565b60405180910390a3612f8084848461307d565b50505050565b5f612f9030610e37565b90505f808203612fa157505061304c565b600854821115612fb15760085491505b5f829050612fbe81612a40565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130039061394c565b5f6040518083038185875af1925050503d805f811461303d576040519150601f19603f3d011682016040523d82523d5f602084013e613042565b606091505b5050809250505050505b565b5f818361305b9190613705565b905092915050565b5f81836130709190613773565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156130b957808201518184015260208101905061309e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6130de82613082565b6130e8818561308c565b93506130f881856020860161309c565b613101816130c4565b840191505092915050565b5f6020820190508181035f83015261312481846130d4565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61315d82613134565b9050919050565b61316d81613153565b8114613177575f80fd5b50565b5f8135905061318881613164565b92915050565b5f819050919050565b6131a08161318e565b81146131aa575f80fd5b50565b5f813590506131bb81613197565b92915050565b5f80604083850312156131d7576131d661312c565b5b5f6131e48582860161317a565b92505060206131f5858286016131ad565b9150509250929050565b5f8115159050919050565b613213816131ff565b82525050565b5f60208201905061322c5f83018461320a565b92915050565b5f819050919050565b5f61325561325061324b84613134565b613232565b613134565b9050919050565b5f6132668261323b565b9050919050565b5f6132778261325c565b9050919050565b6132878161326d565b82525050565b5f6020820190506132a05f83018461327e565b92915050565b6132af8161318e565b82525050565b5f6020820190506132c85f8301846132a6565b92915050565b5f602082840312156132e3576132e261312c565b5b5f6132f0848285016131ad565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261331a576133196132f9565b5b8235905067ffffffffffffffff811115613337576133366132fd565b5b60208301915083602082028301111561335357613352613301565b5b9250929050565b5f8083601f84011261336f5761336e6132f9565b5b8235905067ffffffffffffffff81111561338c5761338b6132fd565b5b6020830191508360208202830111156133a8576133a7613301565b5b9250929050565b5f805f80604085870312156133c7576133c661312c565b5b5f85013567ffffffffffffffff8111156133e4576133e3613130565b5b6133f087828801613305565b9450945050602085013567ffffffffffffffff81111561341357613412613130565b5b61341f8782880161335a565b925092505092959194509250565b5f805f606084860312156134445761344361312c565b5b5f6134518682870161317a565b93505060206134628682870161317a565b9250506040613473868287016131ad565b9150509250925092565b61348681613153565b82525050565b5f60208201905061349f5f83018461347d565b92915050565b5f60ff82169050919050565b6134ba816134a5565b82525050565b5f6020820190506134d35f8301846134b1565b92915050565b5f602082840312156134ee576134ed61312c565b5b5f6134fb8482850161317a565b91505092915050565b61350d816131ff565b8114613517575f80fd5b50565b5f8135905061352881613504565b92915050565b5f80604083850312156135445761354361312c565b5b5f6135518582860161317a565b92505060206135628582860161351a565b9150509250929050565b5f602082840312156135815761358061312c565b5b5f61358e8482850161351a565b91505092915050565b5f80604083850312156135ad576135ac61312c565b5b5f6135ba8582860161317a565b92505060206135cb8582860161317a565b9150509250929050565b5f80604083850312156135eb576135ea61312c565b5b5f6135f8858286016131ad565b9250506020613609858286016131ad565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061365757607f821691505b60208210810361366a57613669613613565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136a460208361308c565b91506136af82613670565b602082019050919050565b5f6020820190508181035f8301526136d181613698565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61370f8261318e565b915061371a8361318e565b92508282026137288161318e565b9150828204841483151761373f5761373e6136d8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61377d8261318e565b91506137888361318e565b92508261379857613797613746565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6137fd602f8361308c565b9150613808826137a3565b604082019050919050565b5f6020820190508181035f83015261382a816137f1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6138b860288361308c565b91506138c38261385e565b604082019050919050565b5f6020820190508181035f8301526138e5816138ac565b9050919050565b5f6138f68261318e565b91506139018361318e565b9250828201905080821115613919576139186136d8565b5b92915050565b5f81905092915050565b50565b5f6139375f8361391f565b915061394282613929565b5f82019050919050565b5f6139568261392c565b9150819050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f613994601d8361308c565b915061399f82613960565b602082019050919050565b5f6020820190508181035f8301526139c181613988565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6139fc600c8361308c565b9150613a07826139c8565b602082019050919050565b5f6020820190508181035f830152613a29816139f0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613a8a60398361308c565b9150613a9582613a30565b604082019050919050565b5f6020820190508181035f830152613ab781613a7e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613b1860258361308c565b9150613b2382613abe565b604082019050919050565b5f6020820190508181035f830152613b4581613b0c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613ba660248361308c565b9150613bb182613b4c565b604082019050919050565b5f6020820190508181035f830152613bd381613b9a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613c3460358361308c565b9150613c3f82613bda565b604082019050919050565b5f6020820190508181035f830152613c6181613c28565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613cc260348361308c565b9150613ccd82613c68565b604082019050919050565b5f6020820190508181035f830152613cef81613cb6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613d5060268361308c565b9150613d5b82613cf6565b604082019050919050565b5f6020820190508181035f830152613d7d81613d44565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dde60248361308c565b9150613de982613d84565b604082019050919050565b5f6020820190508181035f830152613e0b81613dd2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e6c60228361308c565b9150613e7782613e12565b604082019050919050565b5f6020820190508181035f830152613e9981613e60565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613efa60258361308c565b9150613f0582613ea0565b604082019050919050565b5f6020820190508181035f830152613f2781613eee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f8860238361308c565b9150613f9382613f2e565b604082019050919050565b5f6020820190508181035f830152613fb581613f7c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613ff060168361308c565b9150613ffb82613fbc565b602082019050919050565b5f6020820190508181035f83015261401d81613fe4565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61407e60358361308c565b915061408982614024565b604082019050919050565b5f6020820190508181035f8301526140ab81614072565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6140e660138361308c565b91506140f1826140b2565b602082019050919050565b5f6020820190508181035f830152614113816140da565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61417460368361308c565b915061417f8261411a565b604082019050919050565b5f6020820190508181035f8301526141a181614168565b9050919050565b5f6141b28261318e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141e4576141e36136d8565b5b600182019050919050565b5f6141f98261318e565b91506142048361318e565b925082820390508181111561421c5761421b6136d8565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061425d81613164565b92915050565b5f602082840312156142785761427761312c565b5b5f6142858482850161424f565b91505092915050565b5f819050919050565b5f6142b16142ac6142a78461428e565b613232565b61318e565b9050919050565b6142c181614297565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6142f981613153565b82525050565b5f61430a83836142f0565b60208301905092915050565b5f602082019050919050565b5f61432c826142c7565b61433681856142d1565b9350614341836142e1565b805f5b8381101561437157815161435888826142ff565b975061436383614316565b925050600181019050614344565b5085935050505092915050565b5f60a0820190506143915f8301886132a6565b61439e60208301876142b8565b81810360408301526143b08186614322565b90506143bf606083018561347d565b6143cc60808301846132a6565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61443060268361308c565b915061443b826143d6565b604082019050919050565b5f6020820190508181035f83015261445d81614424565b905091905056fea2646970667358221220eed26faf928187acfe41927dc86a8ca135615f38cd878c25bd64f7f2b5f193ab64736f6c63430008170033000000000000000000000000fb1d465684b0b4bc836ca1bc90eb6b96b6a37fd6

Deployed Bytecode

0x60806040526004361061023e575f3560e01c8063881dce601161012d578063c18bc195116100aa578063e2f456051161006e578063e2f456051461085b578063e7a919f914610885578063eba4c333146108ad578063f2fde38b146108d5578063f8b45b05146108fd57610245565b8063c18bc19514610767578063c8c8ebe41461078f578063d257b34f146107b9578063d85ba063146107f5578063dd62ed3e1461081f57610245565b8063a457c2d7116100f1578063a457c2d714610675578063a9059cbb146106b1578063aacebbe3146106ed578063bbc0c74214610715578063c02466681461073f57610245565b8063881dce60146105a95780638da5cb5b146105d1578063924de9b7146105fb57806395d89b41146106235780639a7a23d61461064d57610245565b806349bd5a5e116101bb57806370a082311161017f57806370a08231146104dd578063715018a61461051957806371fc46881461052f578063751039fc146105575780637571336a1461058157610245565b806349bd5a5e1461041f5780634a62bb65146104495780636a486a8e146104735780636ddd17131461049d5780636fc3eaec146104c757610245565b8063212845e711610202578063212845e71461032b57806323b872dd1461035357806327c8f8351461038f578063313ce567146103b957806339509351146103e357610245565b806306fdde0314610249578063095ea7b3146102735780631694505e146102af57806318160ddd146102d9578063203e727e1461030357610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d610927565b60405161026a919061310c565b60405180910390f35b34801561027e575f80fd5b50610299600480360381019061029491906131c1565b6109b7565b6040516102a69190613219565b60405180910390f35b3480156102ba575f80fd5b506102c36109d4565b6040516102d0919061328d565b60405180910390f35b3480156102e4575f80fd5b506102ed6109f8565b6040516102fa91906132b5565b60405180910390f35b34801561030e575f80fd5b50610329600480360381019061032491906132ce565b610a01565b005b348015610336575f80fd5b50610351600480360381019061034c91906133af565b610b10565b005b34801561035e575f80fd5b506103796004803603810190610374919061342d565b610bb3565b6040516103869190613219565b60405180910390f35b34801561039a575f80fd5b506103a3610ca5565b6040516103b0919061348c565b60405180910390f35b3480156103c4575f80fd5b506103cd610cab565b6040516103da91906134c0565b60405180910390f35b3480156103ee575f80fd5b50610409600480360381019061040491906131c1565b610cb3565b6040516104169190613219565b60405180910390f35b34801561042a575f80fd5b50610433610d5a565b604051610440919061348c565b60405180910390f35b348015610454575f80fd5b5061045d610d7e565b60405161046a9190613219565b60405180910390f35b34801561047e575f80fd5b50610487610d90565b60405161049491906132b5565b60405180910390f35b3480156104a8575f80fd5b506104b1610d96565b6040516104be9190613219565b60405180910390f35b3480156104d2575f80fd5b506104db610da9565b005b3480156104e8575f80fd5b5061050360048036038101906104fe91906134d9565b610e37565b60405161051091906132b5565b60405180910390f35b348015610524575f80fd5b5061052d610e7c565b005b34801561053a575f80fd5b50610555600480360381019061055091906132ce565b610f03565b005b348015610562575f80fd5b5061056b610fcf565b6040516105789190613219565b60405180910390f35b34801561058c575f80fd5b506105a760048036038101906105a2919061352e565b61106c565b005b3480156105b4575f80fd5b506105cf60048036038101906105ca91906132ce565b611140565b005b3480156105dc575f80fd5b506105e5611201565b6040516105f2919061348c565b60405180910390f35b348015610606575f80fd5b50610621600480360381019061061c919061356c565b611229565b005b34801561062e575f80fd5b506106376112c2565b604051610644919061310c565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e919061352e565b611352565b005b348015610680575f80fd5b5061069b600480360381019061069691906131c1565b61146a565b6040516106a89190613219565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d291906131c1565b611550565b6040516106e49190613219565b60405180910390f35b3480156106f8575f80fd5b50610713600480360381019061070e91906134d9565b61156d565b005b348015610720575f80fd5b506107296116a7565b6040516107369190613219565b60405180910390f35b34801561074a575f80fd5b506107656004803603810190610760919061352e565b6116ba565b005b348015610772575f80fd5b5061078d600480360381019061078891906132ce565b6117dc565b005b34801561079a575f80fd5b506107a36118eb565b6040516107b091906132b5565b60405180910390f35b3480156107c4575f80fd5b506107df60048036038101906107da91906132ce565b6118f1565b6040516107ec9190613219565b60405180910390f35b348015610800575f80fd5b50610809611a44565b60405161081691906132b5565b60405180910390f35b34801561082a575f80fd5b5061084560048036038101906108409190613597565b611a4a565b60405161085291906132b5565b60405180910390f35b348015610866575f80fd5b5061086f611acc565b60405161087c91906132b5565b60405180910390f35b348015610890575f80fd5b506108ab60048036038101906108a691906135d5565b611ad2565b005b3480156108b8575f80fd5b506108d360048036038101906108ce91906132ce565b611bab565b005b3480156108e0575f80fd5b506108fb60048036038101906108f691906134d9565b611c77565b005b348015610908575f80fd5b50610911611d6d565b60405161091e91906132b5565b60405180910390f35b60606003805461093690613640565b80601f016020809104026020016040519081016040528092919081815260200182805461096290613640565b80156109ad5780601f10610984576101008083540402835291602001916109ad565b820191905f5260205f20905b81548152906001019060200180831161099057829003601f168201915b5050505050905090565b5f6109ca6109c3611d73565b8484611d7a565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610a09611d73565b73ffffffffffffffffffffffffffffffffffffffff16610a27611201565b73ffffffffffffffffffffffffffffffffffffffff1614610a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a74906136ba565b60405180910390fd5b670de0b6b3a76400006103e86001610a936109f8565b610a9d9190613705565b610aa79190613773565b610ab19190613773565b811015610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613813565b60405180910390fd5b670de0b6b3a764000081610b079190613705565b60078190555050565b5f84849050118015610b2757508383905082829050145b610b2f575f80fd5b5f3390505f5b85859050811015610bab57610b9e82878784818110610b5757610b56613831565b5b9050602002016020810190610b6c91906134d9565b670de0b6b3a7640000878786818110610b8857610b87613831565b5b90506020020135610b999190613705565b611f3d565b8080600101915050610b35565b505050505050565b5f610bbf848484611f3d565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610c06611d73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906138ce565b60405180910390fd5b610c9985610c91611d73565b858403611d7a565b60019150509392505050565b61dead81565b5f6012905090565b5f610d50610cbf611d73565b848460015f610ccc611d73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610d4b91906138ec565b611d7a565b6001905092915050565b7f000000000000000000000000655b02c5b6c62062a1fd1ac025283b3653fde5c481565b600a5f9054906101000a900460ff1681565b600f5481565b600a60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610def9061394c565b5f6040518083038185875af1925050503d805f8114610e29576040519150601f19603f3d011682016040523d82523d5f602084013e610e2e565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e84611d73565b73ffffffffffffffffffffffffffffffffffffffff16610ea2611201565b73ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef906136ba565b60405180910390fd5b610f015f61297d565b565b610f0b611d73565b73ffffffffffffffffffffffffffffffffffffffff16610f29611201565b73ffffffffffffffffffffffffffffffffffffffff1614610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f76906136ba565b60405180910390fd5b80600e819055506014600e541115610fcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc3906139aa565b60405180910390fd5b50565b5f610fd8611d73565b73ffffffffffffffffffffffffffffffffffffffff16610ff6611201565b73ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906136ba565b60405180910390fd5b5f600a5f6101000a81548160ff0219169083151502179055506001905090565b611074611d73565b73ffffffffffffffffffffffffffffffffffffffff16611092611201565b73ffffffffffffffffffffffffffffffffffffffff16146110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df906136ba565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611180611d73565b73ffffffffffffffffffffffffffffffffffffffff161461119f575f80fd5b6111a830610e37565b81111580156111b657505f81115b6111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec90613a12565b60405180910390fd5b6111fe81612a40565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611231611d73565b73ffffffffffffffffffffffffffffffffffffffff1661124f611201565b73ffffffffffffffffffffffffffffffffffffffff16146112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c906136ba565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6060600480546112d190613640565b80601f01602080910402602001604051908101604052809291908181526020018280546112fd90613640565b80156113485780601f1061131f57610100808354040283529160200191611348565b820191905f5260205f20905b81548152906001019060200180831161132b57829003601f168201915b5050505050905090565b61135a611d73565b73ffffffffffffffffffffffffffffffffffffffff16611378611201565b73ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c5906136ba565b60405180910390fd5b7f000000000000000000000000655b02c5b6c62062a1fd1ac025283b3653fde5c473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390613aa0565b60405180910390fd5b6114668282612c73565b5050565b5f8060015f611477611d73565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890613b2e565b60405180910390fd5b61154561153c611d73565b85858403611d7a565b600191505092915050565b5f61156361155c611d73565b8484611f3d565b6001905092915050565b611575611d73565b73ffffffffffffffffffffffffffffffffffffffff16611593611201565b73ffffffffffffffffffffffffffffffffffffffff16146115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e0906136ba565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60019054906101000a900460ff1681565b6116c2611d73565b73ffffffffffffffffffffffffffffffffffffffff166116e0611201565b73ffffffffffffffffffffffffffffffffffffffff1614611736576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172d906136ba565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117d09190613219565b60405180910390a25050565b6117e4611d73565b73ffffffffffffffffffffffffffffffffffffffff16611802611201565b73ffffffffffffffffffffffffffffffffffffffff1614611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f906136ba565b60405180910390fd5b670de0b6b3a76400006103e8600561186e6109f8565b6118789190613705565b6118829190613773565b61188c9190613773565b8110156118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613bbc565b60405180910390fd5b670de0b6b3a7640000816118e29190613705565b60098190555050565b60075481565b5f6118fa611d73565b73ffffffffffffffffffffffffffffffffffffffff16611918611201565b73ffffffffffffffffffffffffffffffffffffffff161461196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906136ba565b60405180910390fd5b620186a0600161197c6109f8565b6119869190613705565b6119909190613773565b8210156119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990613c4a565b60405180910390fd5b600a60056119de6109f8565b6119e89190613705565b6119f29190613773565b821115611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613cd8565b60405180910390fd5b8160088190555060019050919050565b600e5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b611ada611d73565b73ffffffffffffffffffffffffffffffffffffffff16611af8611201565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b45906136ba565b60405180910390fd5b81600d8190555080600e8190555080600f819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600b8190555042600c819055505050565b611bb3611d73565b73ffffffffffffffffffffffffffffffffffffffff16611bd1611201565b73ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906136ba565b60405180910390fd5b80600f819055506014600f541115611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b906139aa565b60405180910390fd5b50565b611c7f611d73565b73ffffffffffffffffffffffffffffffffffffffff16611c9d611201565b73ffffffffffffffffffffffffffffffffffffffff1614611cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cea906136ba565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613d66565b60405180910390fd5b611d6a8161297d565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90613df4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4d90613e82565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f3091906132b5565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290613f10565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201090613f9e565b60405180910390fd5b5f81036120305761202b83835f612d11565b612978565b5f439050600a5f9054906101000a900460ff16156125a257612050611201565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156120be575061208e611201565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120f657505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612130575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121495750600560149054906101000a900460ff16155b156125a15780600d54600b5461215f91906138ec565b1061218d576a52b7d2dcc80cd2e40000006007819055506a52b7d2dcc80cd2e40000006009819055506121d8565b600d54600b5461219d91906138ec565b8111156121d75769d3c21bcecceda100000060078190555069d3c21bcecceda1000000600981905550601f600e81905550601f600f819055505b5b600a60019054906101000a900460ff166122c75760105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612287575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614006565b60405180910390fd5b5b60135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612364575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561240b576007548211156123ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a590614094565b60405180910390fd5b6009546123ba84610e37565b836123c591906138ec565b1115612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd906140fc565b60405180910390fd5b6125a0565b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124a8575060125f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124f7576007548211156124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e99061418a565b60405180910390fd5b61259f565b60125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661259e5760095461255184610e37565b8361255c91906138ec565b111561259d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612594906140fc565b60405180910390fd5b5b5b5b5b5b5f6125ac30610e37565b90505f6008546014836125bf9190613705565b101590508080156125dc5750600a60029054906101000a900460ff165b80156125f55750600560149054906101000a900460ff16155b80156126125750600260115f8581526020019081526020015f2054105b8015612665575060135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156126b8575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561270b575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612772576001600560146101000a81548160ff021916908315150217905550612733612f86565b60115f8481526020019081526020015f205f8154612750906141a8565b919050819055505f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612821575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561282a575f90505b5f81156129675760135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561288857505f600f54115b156128bc576128b560646128a7600f548961304e90919063ffffffff16565b61306390919063ffffffff16565b9050612944565b60135f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561291357505f600e54115b15612943576129406064612932600e548961304e90919063ffffffff16565b61306390919063ffffffff16565b90505b5b5f81111561295857612957883083612d11565b5b808661296491906141ef565b95505b612972888888612d11565b50505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff811115612a5c57612a5b614222565b5b604051908082528060200260200182016040528015612a8a5781602001602082028036833780820191505090505b50905030815f81518110612aa157612aa0613831565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b689190614263565b81600181518110612b7c57612b7b613831565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612be1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d7a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612c4295949392919061437e565b5f604051808303815f87803b158015612c59575f80fd5b505af1158015612c6b573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7690613f10565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490613f9e565b60405180910390fd5b612df8838383613078565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290614446565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612f0991906138ec565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f6d91906132b5565b60405180910390a3612f8084848461307d565b50505050565b5f612f9030610e37565b90505f808203612fa157505061304c565b600854821115612fb15760085491505b5f829050612fbe81612a40565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516130039061394c565b5f6040518083038185875af1925050503d805f811461303d576040519150601f19603f3d011682016040523d82523d5f602084013e613042565b606091505b5050809250505050505b565b5f818361305b9190613705565b905092915050565b5f81836130709190613773565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156130b957808201518184015260208101905061309e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6130de82613082565b6130e8818561308c565b93506130f881856020860161309c565b613101816130c4565b840191505092915050565b5f6020820190508181035f83015261312481846130d4565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61315d82613134565b9050919050565b61316d81613153565b8114613177575f80fd5b50565b5f8135905061318881613164565b92915050565b5f819050919050565b6131a08161318e565b81146131aa575f80fd5b50565b5f813590506131bb81613197565b92915050565b5f80604083850312156131d7576131d661312c565b5b5f6131e48582860161317a565b92505060206131f5858286016131ad565b9150509250929050565b5f8115159050919050565b613213816131ff565b82525050565b5f60208201905061322c5f83018461320a565b92915050565b5f819050919050565b5f61325561325061324b84613134565b613232565b613134565b9050919050565b5f6132668261323b565b9050919050565b5f6132778261325c565b9050919050565b6132878161326d565b82525050565b5f6020820190506132a05f83018461327e565b92915050565b6132af8161318e565b82525050565b5f6020820190506132c85f8301846132a6565b92915050565b5f602082840312156132e3576132e261312c565b5b5f6132f0848285016131ad565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261331a576133196132f9565b5b8235905067ffffffffffffffff811115613337576133366132fd565b5b60208301915083602082028301111561335357613352613301565b5b9250929050565b5f8083601f84011261336f5761336e6132f9565b5b8235905067ffffffffffffffff81111561338c5761338b6132fd565b5b6020830191508360208202830111156133a8576133a7613301565b5b9250929050565b5f805f80604085870312156133c7576133c661312c565b5b5f85013567ffffffffffffffff8111156133e4576133e3613130565b5b6133f087828801613305565b9450945050602085013567ffffffffffffffff81111561341357613412613130565b5b61341f8782880161335a565b925092505092959194509250565b5f805f606084860312156134445761344361312c565b5b5f6134518682870161317a565b93505060206134628682870161317a565b9250506040613473868287016131ad565b9150509250925092565b61348681613153565b82525050565b5f60208201905061349f5f83018461347d565b92915050565b5f60ff82169050919050565b6134ba816134a5565b82525050565b5f6020820190506134d35f8301846134b1565b92915050565b5f602082840312156134ee576134ed61312c565b5b5f6134fb8482850161317a565b91505092915050565b61350d816131ff565b8114613517575f80fd5b50565b5f8135905061352881613504565b92915050565b5f80604083850312156135445761354361312c565b5b5f6135518582860161317a565b92505060206135628582860161351a565b9150509250929050565b5f602082840312156135815761358061312c565b5b5f61358e8482850161351a565b91505092915050565b5f80604083850312156135ad576135ac61312c565b5b5f6135ba8582860161317a565b92505060206135cb8582860161317a565b9150509250929050565b5f80604083850312156135eb576135ea61312c565b5b5f6135f8858286016131ad565b9250506020613609858286016131ad565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061365757607f821691505b60208210810361366a57613669613613565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136a460208361308c565b91506136af82613670565b602082019050919050565b5f6020820190508181035f8301526136d181613698565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61370f8261318e565b915061371a8361318e565b92508282026137288161318e565b9150828204841483151761373f5761373e6136d8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61377d8261318e565b91506137888361318e565b92508261379857613797613746565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f6137fd602f8361308c565b9150613808826137a3565b604082019050919050565b5f6020820190508181035f83015261382a816137f1565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6138b860288361308c565b91506138c38261385e565b604082019050919050565b5f6020820190508181035f8301526138e5816138ac565b9050919050565b5f6138f68261318e565b91506139018361318e565b9250828201905080821115613919576139186136d8565b5b92915050565b5f81905092915050565b50565b5f6139375f8361391f565b915061394282613929565b5f82019050919050565b5f6139568261392c565b9150819050919050565b7f4d757374206b656570206665657320617420323025206f72206c6573730000005f82015250565b5f613994601d8361308c565b915061399f82613960565b602082019050919050565b5f6020820190508181035f8301526139c181613988565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6139fc600c8361308c565b9150613a07826139c8565b602082019050919050565b5f6020820190508181035f830152613a29816139f0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f613a8a60398361308c565b9150613a9582613a30565b604082019050919050565b5f6020820190508181035f830152613ab781613a7e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613b1860258361308c565b9150613b2382613abe565b604082019050919050565b5f6020820190508181035f830152613b4581613b0c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613ba660248361308c565b9150613bb182613b4c565b604082019050919050565b5f6020820190508181035f830152613bd381613b9a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f613c3460358361308c565b9150613c3f82613bda565b604082019050919050565b5f6020820190508181035f830152613c6181613c28565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f613cc260348361308c565b9150613ccd82613c68565b604082019050919050565b5f6020820190508181035f830152613cef81613cb6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613d5060268361308c565b9150613d5b82613cf6565b604082019050919050565b5f6020820190508181035f830152613d7d81613d44565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613dde60248361308c565b9150613de982613d84565b604082019050919050565b5f6020820190508181035f830152613e0b81613dd2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e6c60228361308c565b9150613e7782613e12565b604082019050919050565b5f6020820190508181035f830152613e9981613e60565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613efa60258361308c565b9150613f0582613ea0565b604082019050919050565b5f6020820190508181035f830152613f2781613eee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613f8860238361308c565b9150613f9382613f2e565b604082019050919050565b5f6020820190508181035f830152613fb581613f7c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613ff060168361308c565b9150613ffb82613fbc565b602082019050919050565b5f6020820190508181035f83015261401d81613fe4565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61407e60358361308c565b915061408982614024565b604082019050919050565b5f6020820190508181035f8301526140ab81614072565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6140e660138361308c565b91506140f1826140b2565b602082019050919050565b5f6020820190508181035f830152614113816140da565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61417460368361308c565b915061417f8261411a565b604082019050919050565b5f6020820190508181035f8301526141a181614168565b9050919050565b5f6141b28261318e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141e4576141e36136d8565b5b600182019050919050565b5f6141f98261318e565b91506142048361318e565b925082820390508181111561421c5761421b6136d8565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061425d81613164565b92915050565b5f602082840312156142785761427761312c565b5b5f6142858482850161424f565b91505092915050565b5f819050919050565b5f6142b16142ac6142a78461428e565b613232565b61318e565b9050919050565b6142c181614297565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6142f981613153565b82525050565b5f61430a83836142f0565b60208301905092915050565b5f602082019050919050565b5f61432c826142c7565b61433681856142d1565b9350614341836142e1565b805f5b8381101561437157815161435888826142ff565b975061436383614316565b925050600181019050614344565b5085935050505092915050565b5f60a0820190506143915f8301886132a6565b61439e60208301876142b8565b81810360408301526143b08186614322565b90506143bf606083018561347d565b6143cc60808301846132a6565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61443060268361308c565b915061443b826143d6565b604082019050919050565b5f6020820190508181035f83015261445d81614424565b905091905056fea2646970667358221220eed26faf928187acfe41927dc86a8ca135615f38cd878c25bd64f7f2b5f193ab64736f6c63430008170033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fb1d465684b0b4bc836ca1bc90eb6b96b6a37fd6

-----Decoded View---------------
Arg [0] : _addressWallet (address): 0xFb1d465684B0B4BC836cA1bc90EB6B96b6a37fd6

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fb1d465684b0b4bc836ca1bc90eb6b96b6a37fd6


Deployed Bytecode Sourcemap

31293:12218:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8963:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11130:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31371:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10083:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35231:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37922:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11781:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31474:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9925:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12682:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31429:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31721:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31980:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31801:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36568:174;;;;;;;;;;;;;:::i;:::-;;10254:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2510:103;;;;;;;;;;;;;:::i;:::-;;37262:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34599:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35778:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36339:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1859:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36041:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9182:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36754:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13400:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10594:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37683:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31761:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36149:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35514:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31606:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34728:495;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31946:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10832:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31648:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34248:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37473:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2768:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31688:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8963:100;9017:13;9050:5;9043:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8963:100;:::o;11130:169::-;11213:4;11230:39;11239:12;:10;:12::i;:::-;11253:7;11262:6;11230:8;:39::i;:::-;11287:4;11280:11;;11130:169;;;;:::o;31371:51::-;;;:::o;10083:108::-;10144:7;10171:12;;10164:19;;10083:108;:::o;35231:275::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35368:4:::1;35360;35355:1;35339:13;:11;:13::i;:::-;:17;;;;:::i;:::-;35338:26;;;;:::i;:::-;35337:35;;;;:::i;:::-;35327:6;:45;;35305:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;35491:6;35481;:17;;;;:::i;:::-;35458:20;:40;;;;35231:275:::0;:::o;37922:354::-;38049:1;38030:9;;:16;;:20;:58;;;;;38072:9;;:16;;38054:7;;:14;;:34;38030:58;38022:67;;;;;;38102:12;38117:10;38102:25;;38147:6;38142:127;38163:9;;:16;;38159:1;:20;38142:127;;;38203:52;38213:4;38219:9;;38229:1;38219:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;38247:6;38233:7;;38241:1;38233:10;;;;;;;:::i;:::-;;;;;;;;:21;;;;:::i;:::-;38203:9;:52::i;:::-;38181:3;;;;;;;38142:127;;;;38009:267;37922:354;;;;:::o;11781:492::-;11921:4;11938:36;11948:6;11956:9;11967:6;11938:9;:36::i;:::-;11987:24;12014:11;:19;12026:6;12014:19;;;;;;;;;;;;;;;:33;12034:12;:10;:12::i;:::-;12014:33;;;;;;;;;;;;;;;;11987:60;;12086:6;12066:16;:26;;12058:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12173:57;12182:6;12190:12;:10;:12::i;:::-;12223:6;12204:16;:25;12173:8;:57::i;:::-;12261:4;12254:11;;;11781:492;;;;;:::o;31474:53::-;31520:6;31474:53;:::o;9925:93::-;9983:5;10008:2;10001:9;;9925:93;:::o;12682:215::-;12770:4;12787:80;12796:12;:10;:12::i;:::-;12810:7;12856:10;12819:11;:25;12831:12;:10;:12::i;:::-;12819:25;;;;;;;;;;;;;;;:34;12845:7;12819:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12787:8;:80::i;:::-;12885:4;12878:11;;12682:215;;;;:::o;31429:38::-;;;:::o;31721:33::-;;;;;;;;;;;;;:::o;31980:28::-;;;;:::o;31801:31::-;;;;;;;;;;;;;:::o;36568:174::-;36610:12;36655:15;;;;;;;;;;;36647:29;;36698:21;36647:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36633:101;;;;;36599:143;36568:174::o;10254:127::-;10328:7;10355:9;:18;10365:7;10355:18;;;;;;;;;;;;;;;;10348:25;;10254:127;;;:::o;2510:103::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2575:30:::1;2602:1;2575:18;:30::i;:::-;2510:103::o:0;37262:203::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37373:13:::1;37358:12;:28;;;;37421:2;37405:12;;:18;;37397:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37262:203:::0;:::o;34599:121::-;34651:4;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34685:5:::1;34668:14;;:22;;;;;;;;;;;;;;;;;;34708:4;34701:11;;34599:121:::0;:::o;35778:167::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35933:4:::1;35891:31;:39;35923:6;35891:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35778:167:::0;;:::o;36339:221::-;36417:15;;;;;;;;;;;36401:31;;:12;:10;:12::i;:::-;:31;;;36393:40;;;;;;36462:24;36480:4;36462:9;:24::i;:::-;36452:6;:34;;:48;;;;;36499:1;36490:6;:10;36452:48;36444:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36528:24;36545:6;36528:16;:24::i;:::-;36339:221;:::o;1859:87::-;1905:7;1932:6;;;;;;;;;;;1925:13;;1859:87;:::o;36041:100::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36126:7:::1;36112:11;;:21;;;;;;;;;;;;;;;;;;36041:100:::0;:::o;9182:104::-;9238:13;9271:7;9264:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9182:104;:::o;36754:304::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36898:13:::1;36890:21;;:4;:21;;::::0;36868:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37009:41;37038:4;37044:5;37009:28;:41::i;:::-;36754:304:::0;;:::o;13400:413::-;13493:4;13510:24;13537:11;:25;13549:12;:10;:12::i;:::-;13537:25;;;;;;;;;;;;;;;:34;13563:7;13537:34;;;;;;;;;;;;;;;;13510:61;;13610:15;13590:16;:35;;13582:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13703:67;13712:12;:10;:12::i;:::-;13726:7;13754:15;13735:16;:34;13703:8;:67::i;:::-;13801:4;13794:11;;;13400:413;;;;:::o;10594:175::-;10680:4;10697:42;10707:12;:10;:12::i;:::-;10721:9;10732:6;10697:9;:42::i;:::-;10757:4;10750:11;;10594:175;;;;:::o;37683:231::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37843:15:::1;;;;;;;;;;;37800:59;;37823:18;37800:59;;;;;;;;;;;;37888:18;37870:15;;:36;;;;;;;;;;;;;;;;;;37683:231:::0;:::o;31761:33::-;;;;;;;;;;;;;:::o;36149:182::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36265:8:::1;36234:19;:28;36254:7;36234:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36305:7;36289:34;;;36314:8;36289:34;;;;;;:::i;:::-;;;;;;;;36149:182:::0;;:::o;35514:256::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35654:4:::1;35646;35641:1;35625:13;:11;:13::i;:::-;:17;;;;:::i;:::-;35624:26;;;;:::i;:::-;35623:35;;;;:::i;:::-;35613:6;:45;;35591:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;35755:6;35745;:17;;;;:::i;:::-;35733:9;:29;;;;35514:256:::0;:::o;31606:35::-;;;;:::o;34728:495::-;34836:4;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34915:6:::1;34910:1;34894:13;:11;:13::i;:::-;:17;;;;:::i;:::-;34893:28;;;;:::i;:::-;34880:9;:41;;34858:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;35070:2;35065:1;35049:13;:11;:13::i;:::-;:17;;;;:::i;:::-;35048:24;;;;:::i;:::-;35035:9;:37;;35013:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;35184:9;35163:18;:30;;;;35211:4;35204:11;;34728:495:::0;;;:::o;31946:27::-;;;;:::o;10832:151::-;10921:7;10948:11;:18;10960:5;10948:18;;;;;;;;;;;;;;;:27;10967:7;10948:27;;;;;;;;;;;;;;;;10941:34;;10832:151;;;;:::o;31648:33::-;;;;:::o;34248:343::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34358:13:::1;34343:12;:28;;;;34397:11;34382:12;:26;;;;34435:11;34419:13;:27;;;;34473:4;34457:13;;:20;;;;;;;;;;;;;;;;;;34502:4;34488:11;;:18;;;;;;;;;;;;;;;;;;34530:12;34517:10;:25;;;;34568:15;34553:12;:30;;;;34248:343:::0;;:::o;37473:202::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37582:13:::1;37566;:29;;;;37631:2;37614:13;;:19;;37606:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37473:202:::0;:::o;2768:201::-;2090:12;:10;:12::i;:::-;2079:23;;:7;:5;:7::i;:::-;:23;;;2071:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2877:1:::1;2857:22;;:8;:22;;::::0;2849:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2933:28;2952:8;2933:18;:28::i;:::-;2768:201:::0;:::o;31688:24::-;;;;:::o;605:98::-;658:7;685:10;678:17;;605:98;:::o;17084:380::-;17237:1;17220:19;;:5;:19;;;17212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17318:1;17299:21;;:7;:21;;;17291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17402:6;17372:11;:18;17384:5;17372:18;;;;;;;;;;;;;;;:27;17391:7;17372:27;;;;;;;;;;;;;;;:36;;;;17440:7;17424:32;;17433:5;17424:32;;;17449:6;17424:32;;;;;;:::i;:::-;;;;;;;;17084:380;;;:::o;38284:4085::-;38432:1;38416:18;;:4;:18;;;38408:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38509:1;38495:16;;:2;:16;;;38487:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38578:1;38568:6;:11;38564:93;;38596:28;38612:4;38618:2;38622:1;38596:15;:28::i;:::-;38639:7;;38564:93;38669:16;38688:12;38669:31;;38717:14;;;;;;;;;;;38713:2184;;;38778:7;:5;:7::i;:::-;38770:15;;:4;:15;;;;:49;;;;;38812:7;:5;:7::i;:::-;38806:13;;:2;:13;;;;38770:49;:86;;;;;38854:1;38840:16;;:2;:16;;;;38770:86;:128;;;;;38891:6;38877:21;;:2;:21;;;;38770:128;:158;;;;;38920:8;;;;;;;;;;;38919:9;38770:158;38748:2138;;;39013:8;38996:12;;38983:10;;:25;;;;:::i;:::-;38982:39;38961:472;;39080:18;39057:20;:41;;;;39130:18;39117:9;:31;;;;38961:472;;;39202:12;;39189:10;;:25;;;;:::i;:::-;39177:8;:38;39174:259;;;39274:16;39251:20;:39;;;;39322:16;39309:9;:29;;;;39374:2;39359:12;:17;;;;39413:2;39397:13;:18;;;;39174:259;38961:472;39458:13;;;;;;;;;;;39453:223;;39530:19;:25;39550:4;39530:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39559:19;:23;39579:2;39559:23;;;;;;;;;;;;;;;;;;;;;;;;;39530:52;39496:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;39453:223;39750:25;:31;39776:4;39750:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;39807:31;:35;39839:2;39807:35;;;;;;;;;;;;;;;;;;;;;;;;;39806:36;39750:92;39724:1147;;;39929:20;;39919:6;:30;;39885:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;40137:9;;40120:13;40130:2;40120:9;:13::i;:::-;40111:6;:22;;;;:::i;:::-;:35;;40077:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39724:1147;;;40315:25;:29;40341:2;40315:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;40370:31;:37;40402:4;40370:37;;;;;;;;;;;;;;;;;;;;;;;;;40369:38;40315:92;40289:582;;;40494:20;;40484:6;:30;;40450:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;40289:582;;;40651:31;:35;40683:2;40651:35;;;;;;;;;;;;;;;;;;;;;;;;;40646:225;;40771:9;;40754:13;40764:2;40754:9;:13::i;:::-;40745:6;:22;;;;:::i;:::-;:35;;40711:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40646:225;40289:582;39724:1147;38748:2138;38713:2184;40909:28;40940:24;40958:4;40940:9;:24::i;:::-;40909:55;;40977:12;41021:18;;41015:2;40992:20;:25;;;;:::i;:::-;:47;;40977:62;;41070:7;:35;;;;;41094:11;;;;;;;;;;;41070:35;:61;;;;;41123:8;;;;;;;;;;;41122:9;41070:61;:105;;;;;41173:1;41149:11;:21;41161:8;41149:21;;;;;;;;;;;;:25;41070:105;:154;;;;;41193:25;:31;41219:4;41193:31;;;;;;;;;;;;;;;;;;;;;;;;;41192:32;41070:154;:197;;;;;41242:19;:25;41262:4;41242:25;;;;;;;;;;;;;;;;;;;;;;;;;41241:26;41070:197;:238;;;;;41285:19;:23;41305:2;41285:23;;;;;;;;;;;;;;;;;;;;;;;;;41284:24;41070:238;41052:410;;;41346:4;41335:8;;:15;;;;;;;;;;;;;;;;;;41367:10;:8;:10::i;:::-;41396:11;:21;41408:8;41396:21;;;;;;;;;;;;41394:23;;;;;:::i;:::-;;;;;;;;41445:5;41434:8;;:16;;;;;;;;;;;;;;;;;;41052:410;41474:12;41490:8;;;;;;;;;;;41489:9;41474:24;;41600:19;:25;41620:4;41600:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41629:19;:23;41649:2;41629:23;;;;;;;;;;;;;;;;;;;;;;;;;41600:52;41596:100;;;41679:5;41669:15;;41596:100;41708:12;41813:7;41809:507;;;41865:25;:29;41891:2;41865:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41914:1;41898:13;;:17;41865:50;41861:306;;;41943:34;41973:3;41943:25;41954:13;;41943:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41936:41;;41861:306;;;42039:25;:31;42065:4;42039:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42089:1;42074:12;;:16;42039:51;42035:132;;;42118:33;42147:3;42118:24;42129:12;;42118:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42111:40;;42035:132;41861:306;42194:1;42187:4;:8;42183:91;;;42216:42;42232:4;42246;42253;42216:15;:42::i;:::-;42183:91;42300:4;42290:14;;;;;:::i;:::-;;;41809:507;42328:33;42344:4;42350:2;42354:6;42328:15;:33::i;:::-;38397:3972;;;;;38284:4085;;;;:::o;3129:191::-;3203:16;3222:6;;;;;;;;;;;3203:25;;3248:8;3239:6;;:17;;;;;;;;;;;;;;;;;;3303:8;3272:40;;3293:8;3272:40;;;;;;;;;;;;3192:128;3129:191;:::o;42377:589::-;42503:21;42541:1;42527:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42503:40;;42572:4;42554;42559:1;42554:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42598:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42588:4;42593:1;42588:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42633:62;42650:4;42665:15;42683:11;42633:8;:62::i;:::-;42734:15;:66;;;42815:11;42841:1;42885:4;42912;42932:15;42734:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42432:534;42377:589;:::o;37066:188::-;37183:5;37149:25;:31;37175:4;37149:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37240:5;37206:40;;37234:4;37206:40;;;;;;;;;;;;37066:188;;:::o;14303:733::-;14461:1;14443:20;;:6;:20;;;14435:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14545:1;14524:23;;:9;:23;;;14516:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14600:47;14621:6;14629:9;14640:6;14600:20;:47::i;:::-;14660:21;14684:9;:17;14694:6;14684:17;;;;;;;;;;;;;;;;14660:41;;14737:6;14720:13;:23;;14712:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14858:6;14842:13;:22;14822:9;:17;14832:6;14822:17;;;;;;;;;;;;;;;:42;;;;14910:6;14886:9;:20;14896:9;14886:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14951:9;14934:35;;14943:6;14934:35;;;14962:6;14934:35;;;;;;:::i;:::-;;;;;;;;14982:46;15002:6;15010:9;15021:6;14982:19;:46::i;:::-;14424:612;14303:733;;;:::o;42976:530::-;43015:23;43041:24;43059:4;43041:9;:24::i;:::-;43015:50;;43076:12;43124:1;43105:15;:20;43101:59;;43142:7;;;;43101:59;43194:18;;43176:15;:36;43172:105;;;43247:18;;43229:36;;43172:105;43291:26;43320:15;43291:44;;43348:36;43365:18;43348:16;:36::i;:::-;43419:15;;;;;;;;;;;43411:29;;43462:21;43411:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43397:101;;;;;43004:502;;;42976:530;:::o;22504:98::-;22562:7;22593:1;22589;:5;;;;:::i;:::-;22582:12;;22504:98;;;;:::o;22903:::-;22961:7;22992:1;22988;:5;;;;:::i;:::-;22981:12;;22903:98;;;;:::o;18064:125::-;;;;:::o;18793:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:329::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:53;5080:7;5071:6;5060:9;5056:22;5035:53;:::i;:::-;5025:63;;4981:117;4776:329;;;;:::o;5111:117::-;5220:1;5217;5210:12;5234:117;5343:1;5340;5333:12;5357:117;5466:1;5463;5456:12;5497:568;5570:8;5580:6;5630:3;5623:4;5615:6;5611:17;5607:27;5597:122;;5638:79;;:::i;:::-;5597:122;5751:6;5738:20;5728:30;;5781:18;5773:6;5770:30;5767:117;;;5803:79;;:::i;:::-;5767:117;5917:4;5909:6;5905:17;5893:29;;5971:3;5963:4;5955:6;5951:17;5941:8;5937:32;5934:41;5931:128;;;5978:79;;:::i;:::-;5931:128;5497:568;;;;;:::o;6088:::-;6161:8;6171:6;6221:3;6214:4;6206:6;6202:17;6198:27;6188:122;;6229:79;;:::i;:::-;6188:122;6342:6;6329:20;6319:30;;6372:18;6364:6;6361:30;6358:117;;;6394:79;;:::i;:::-;6358:117;6508:4;6500:6;6496:17;6484:29;;6562:3;6554:4;6546:6;6542:17;6532:8;6528:32;6525:41;6522:128;;;6569:79;;:::i;:::-;6522:128;6088:568;;;;;:::o;6662:934::-;6784:6;6792;6800;6808;6857:2;6845:9;6836:7;6832:23;6828:32;6825:119;;;6863:79;;:::i;:::-;6825:119;7011:1;7000:9;6996:17;6983:31;7041:18;7033:6;7030:30;7027:117;;;7063:79;;:::i;:::-;7027:117;7176:80;7248:7;7239:6;7228:9;7224:22;7176:80;:::i;:::-;7158:98;;;;6954:312;7333:2;7322:9;7318:18;7305:32;7364:18;7356:6;7353:30;7350:117;;;7386:79;;:::i;:::-;7350:117;7499:80;7571:7;7562:6;7551:9;7547:22;7499:80;:::i;:::-;7481:98;;;;7276:313;6662:934;;;;;;;:::o;7602:619::-;7679:6;7687;7695;7744:2;7732:9;7723:7;7719:23;7715:32;7712:119;;;7750:79;;:::i;:::-;7712:119;7870:1;7895:53;7940:7;7931:6;7920:9;7916:22;7895:53;:::i;:::-;7885:63;;7841:117;7997:2;8023:53;8068:7;8059:6;8048:9;8044:22;8023:53;:::i;:::-;8013:63;;7968:118;8125:2;8151:53;8196:7;8187:6;8176:9;8172:22;8151:53;:::i;:::-;8141:63;;8096:118;7602:619;;;;;:::o;8227:118::-;8314:24;8332:5;8314:24;:::i;:::-;8309:3;8302:37;8227:118;;:::o;8351:222::-;8444:4;8482:2;8471:9;8467:18;8459:26;;8495:71;8563:1;8552:9;8548:17;8539:6;8495:71;:::i;:::-;8351:222;;;;:::o;8579:86::-;8614:7;8654:4;8647:5;8643:16;8632:27;;8579:86;;;:::o;8671:112::-;8754:22;8770:5;8754:22;:::i;:::-;8749:3;8742:35;8671:112;;:::o;8789:214::-;8878:4;8916:2;8905:9;8901:18;8893:26;;8929:67;8993:1;8982:9;8978:17;8969:6;8929:67;:::i;:::-;8789:214;;;;:::o;9009:329::-;9068:6;9117:2;9105:9;9096:7;9092:23;9088:32;9085:119;;;9123:79;;:::i;:::-;9085:119;9243:1;9268:53;9313:7;9304:6;9293:9;9289:22;9268:53;:::i;:::-;9258:63;;9214:117;9009:329;;;;:::o;9344:116::-;9414:21;9429:5;9414:21;:::i;:::-;9407:5;9404:32;9394:60;;9450:1;9447;9440:12;9394:60;9344:116;:::o;9466:133::-;9509:5;9547:6;9534:20;9525:29;;9563:30;9587:5;9563:30;:::i;:::-;9466:133;;;;:::o;9605:468::-;9670:6;9678;9727:2;9715:9;9706:7;9702:23;9698:32;9695:119;;;9733:79;;:::i;:::-;9695:119;9853:1;9878:53;9923:7;9914:6;9903:9;9899:22;9878:53;:::i;:::-;9868:63;;9824:117;9980:2;10006:50;10048:7;10039:6;10028:9;10024:22;10006:50;:::i;:::-;9996:60;;9951:115;9605:468;;;;;:::o;10079:323::-;10135:6;10184:2;10172:9;10163:7;10159:23;10155:32;10152:119;;;10190:79;;:::i;:::-;10152:119;10310:1;10335:50;10377:7;10368:6;10357:9;10353:22;10335:50;:::i;:::-;10325:60;;10281:114;10079:323;;;;:::o;10408:474::-;10476:6;10484;10533:2;10521:9;10512:7;10508:23;10504:32;10501:119;;;10539:79;;:::i;:::-;10501:119;10659:1;10684:53;10729:7;10720:6;10709:9;10705:22;10684:53;:::i;:::-;10674:63;;10630:117;10786:2;10812:53;10857:7;10848:6;10837:9;10833:22;10812:53;:::i;:::-;10802:63;;10757:118;10408:474;;;;;:::o;10888:::-;10956:6;10964;11013:2;11001:9;10992:7;10988:23;10984:32;10981:119;;;11019:79;;:::i;:::-;10981:119;11139:1;11164:53;11209:7;11200:6;11189:9;11185:22;11164:53;:::i;:::-;11154:63;;11110:117;11266:2;11292:53;11337:7;11328:6;11317:9;11313:22;11292:53;:::i;:::-;11282:63;;11237:118;10888:474;;;;;:::o;11368:180::-;11416:77;11413:1;11406:88;11513:4;11510:1;11503:15;11537:4;11534:1;11527:15;11554:320;11598:6;11635:1;11629:4;11625:12;11615:22;;11682:1;11676:4;11672:12;11703:18;11693:81;;11759:4;11751:6;11747:17;11737:27;;11693:81;11821:2;11813:6;11810:14;11790:18;11787:38;11784:84;;11840:18;;:::i;:::-;11784:84;11605:269;11554:320;;;:::o;11880:182::-;12020:34;12016:1;12008:6;12004:14;11997:58;11880:182;:::o;12068:366::-;12210:3;12231:67;12295:2;12290:3;12231:67;:::i;:::-;12224:74;;12307:93;12396:3;12307:93;:::i;:::-;12425:2;12420:3;12416:12;12409:19;;12068:366;;;:::o;12440:419::-;12606:4;12644:2;12633:9;12629:18;12621:26;;12693:9;12687:4;12683:20;12679:1;12668:9;12664:17;12657:47;12721:131;12847:4;12721:131;:::i;:::-;12713:139;;12440:419;;;:::o;12865:180::-;12913:77;12910:1;12903:88;13010:4;13007:1;13000:15;13034:4;13031:1;13024:15;13051:410;13091:7;13114:20;13132:1;13114:20;:::i;:::-;13109:25;;13148:20;13166:1;13148:20;:::i;:::-;13143:25;;13203:1;13200;13196:9;13225:30;13243:11;13225:30;:::i;:::-;13214:41;;13404:1;13395:7;13391:15;13388:1;13385:22;13365:1;13358:9;13338:83;13315:139;;13434:18;;:::i;:::-;13315:139;13099:362;13051:410;;;;:::o;13467:180::-;13515:77;13512:1;13505:88;13612:4;13609:1;13602:15;13636:4;13633:1;13626:15;13653:185;13693:1;13710:20;13728:1;13710:20;:::i;:::-;13705:25;;13744:20;13762:1;13744:20;:::i;:::-;13739:25;;13783:1;13773:35;;13788:18;;:::i;:::-;13773:35;13830:1;13827;13823:9;13818:14;;13653:185;;;;:::o;13844:234::-;13984:34;13980:1;13972:6;13968:14;13961:58;14053:17;14048:2;14040:6;14036:15;14029:42;13844:234;:::o;14084:366::-;14226:3;14247:67;14311:2;14306:3;14247:67;:::i;:::-;14240:74;;14323:93;14412:3;14323:93;:::i;:::-;14441:2;14436:3;14432:12;14425:19;;14084:366;;;:::o;14456:419::-;14622:4;14660:2;14649:9;14645:18;14637:26;;14709:9;14703:4;14699:20;14695:1;14684:9;14680:17;14673:47;14737:131;14863:4;14737:131;:::i;:::-;14729:139;;14456:419;;;:::o;14881:180::-;14929:77;14926:1;14919:88;15026:4;15023:1;15016:15;15050:4;15047:1;15040:15;15067:227;15207:34;15203:1;15195:6;15191:14;15184:58;15276:10;15271:2;15263:6;15259:15;15252:35;15067:227;:::o;15300:366::-;15442:3;15463:67;15527:2;15522:3;15463:67;:::i;:::-;15456:74;;15539:93;15628:3;15539:93;:::i;:::-;15657:2;15652:3;15648:12;15641:19;;15300:366;;;:::o;15672:419::-;15838:4;15876:2;15865:9;15861:18;15853:26;;15925:9;15919:4;15915:20;15911:1;15900:9;15896:17;15889:47;15953:131;16079:4;15953:131;:::i;:::-;15945:139;;15672:419;;;:::o;16097:191::-;16137:3;16156:20;16174:1;16156:20;:::i;:::-;16151:25;;16190:20;16208:1;16190:20;:::i;:::-;16185:25;;16233:1;16230;16226:9;16219:16;;16254:3;16251:1;16248:10;16245:36;;;16261:18;;:::i;:::-;16245:36;16097:191;;;;:::o;16294:147::-;16395:11;16432:3;16417:18;;16294:147;;;;:::o;16447:114::-;;:::o;16567:398::-;16726:3;16747:83;16828:1;16823:3;16747:83;:::i;:::-;16740:90;;16839:93;16928:3;16839:93;:::i;:::-;16957:1;16952:3;16948:11;16941:18;;16567:398;;;:::o;16971:379::-;17155:3;17177:147;17320:3;17177:147;:::i;:::-;17170:154;;17341:3;17334:10;;16971:379;;;:::o;17356:179::-;17496:31;17492:1;17484:6;17480:14;17473:55;17356:179;:::o;17541:366::-;17683:3;17704:67;17768:2;17763:3;17704:67;:::i;:::-;17697:74;;17780:93;17869:3;17780:93;:::i;:::-;17898:2;17893:3;17889:12;17882:19;;17541:366;;;:::o;17913:419::-;18079:4;18117:2;18106:9;18102:18;18094:26;;18166:9;18160:4;18156:20;18152:1;18141:9;18137:17;18130:47;18194:131;18320:4;18194:131;:::i;:::-;18186:139;;17913:419;;;:::o;18338:162::-;18478:14;18474:1;18466:6;18462:14;18455:38;18338:162;:::o;18506:366::-;18648:3;18669:67;18733:2;18728:3;18669:67;:::i;:::-;18662:74;;18745:93;18834:3;18745:93;:::i;:::-;18863:2;18858:3;18854:12;18847:19;;18506:366;;;:::o;18878:419::-;19044:4;19082:2;19071:9;19067:18;19059:26;;19131:9;19125:4;19121:20;19117:1;19106:9;19102:17;19095:47;19159:131;19285:4;19159:131;:::i;:::-;19151:139;;18878:419;;;:::o;19303:244::-;19443:34;19439:1;19431:6;19427:14;19420:58;19512:27;19507:2;19499:6;19495:15;19488:52;19303:244;:::o;19553:366::-;19695:3;19716:67;19780:2;19775:3;19716:67;:::i;:::-;19709:74;;19792:93;19881:3;19792:93;:::i;:::-;19910:2;19905:3;19901:12;19894:19;;19553:366;;;:::o;19925:419::-;20091:4;20129:2;20118:9;20114:18;20106:26;;20178:9;20172:4;20168:20;20164:1;20153:9;20149:17;20142:47;20206:131;20332:4;20206:131;:::i;:::-;20198:139;;19925:419;;;:::o;20350:224::-;20490:34;20486:1;20478:6;20474:14;20467:58;20559:7;20554:2;20546:6;20542:15;20535:32;20350:224;:::o;20580:366::-;20722:3;20743:67;20807:2;20802:3;20743:67;:::i;:::-;20736:74;;20819:93;20908:3;20819:93;:::i;:::-;20937:2;20932:3;20928:12;20921:19;;20580:366;;;:::o;20952:419::-;21118:4;21156:2;21145:9;21141:18;21133:26;;21205:9;21199:4;21195:20;21191:1;21180:9;21176:17;21169:47;21233:131;21359:4;21233:131;:::i;:::-;21225:139;;20952:419;;;:::o;21377:223::-;21517:34;21513:1;21505:6;21501:14;21494:58;21586:6;21581:2;21573:6;21569:15;21562:31;21377:223;:::o;21606:366::-;21748:3;21769:67;21833:2;21828:3;21769:67;:::i;:::-;21762:74;;21845:93;21934:3;21845:93;:::i;:::-;21963:2;21958:3;21954:12;21947:19;;21606:366;;;:::o;21978:419::-;22144:4;22182:2;22171:9;22167:18;22159:26;;22231:9;22225:4;22221:20;22217:1;22206:9;22202:17;22195:47;22259:131;22385:4;22259:131;:::i;:::-;22251:139;;21978:419;;;:::o;22403:240::-;22543:34;22539:1;22531:6;22527:14;22520:58;22612:23;22607:2;22599:6;22595:15;22588:48;22403:240;:::o;22649:366::-;22791:3;22812:67;22876:2;22871:3;22812:67;:::i;:::-;22805:74;;22888:93;22977:3;22888:93;:::i;:::-;23006:2;23001:3;22997:12;22990:19;;22649:366;;;:::o;23021:419::-;23187:4;23225:2;23214:9;23210:18;23202:26;;23274:9;23268:4;23264:20;23260:1;23249:9;23245:17;23238:47;23302:131;23428:4;23302:131;:::i;:::-;23294:139;;23021:419;;;:::o;23446:239::-;23586:34;23582:1;23574:6;23570:14;23563:58;23655:22;23650:2;23642:6;23638:15;23631:47;23446:239;:::o;23691:366::-;23833:3;23854:67;23918:2;23913:3;23854:67;:::i;:::-;23847:74;;23930:93;24019:3;23930:93;:::i;:::-;24048:2;24043:3;24039:12;24032:19;;23691:366;;;:::o;24063:419::-;24229:4;24267:2;24256:9;24252:18;24244:26;;24316:9;24310:4;24306:20;24302:1;24291:9;24287:17;24280:47;24344:131;24470:4;24344:131;:::i;:::-;24336:139;;24063:419;;;:::o;24488:225::-;24628:34;24624:1;24616:6;24612:14;24605:58;24697:8;24692:2;24684:6;24680:15;24673:33;24488:225;:::o;24719:366::-;24861:3;24882:67;24946:2;24941:3;24882:67;:::i;:::-;24875:74;;24958:93;25047:3;24958:93;:::i;:::-;25076:2;25071:3;25067:12;25060:19;;24719:366;;;:::o;25091:419::-;25257:4;25295:2;25284:9;25280:18;25272:26;;25344:9;25338:4;25334:20;25330:1;25319:9;25315:17;25308:47;25372:131;25498:4;25372:131;:::i;:::-;25364:139;;25091:419;;;:::o;25516:223::-;25656:34;25652:1;25644:6;25640:14;25633:58;25725:6;25720:2;25712:6;25708:15;25701:31;25516:223;:::o;25745:366::-;25887:3;25908:67;25972:2;25967:3;25908:67;:::i;:::-;25901:74;;25984:93;26073:3;25984:93;:::i;:::-;26102:2;26097:3;26093:12;26086:19;;25745:366;;;:::o;26117:419::-;26283:4;26321:2;26310:9;26306:18;26298:26;;26370:9;26364:4;26360:20;26356:1;26345:9;26341:17;26334:47;26398:131;26524:4;26398:131;:::i;:::-;26390:139;;26117:419;;;:::o;26542:221::-;26682:34;26678:1;26670:6;26666:14;26659:58;26751:4;26746:2;26738:6;26734:15;26727:29;26542:221;:::o;26769:366::-;26911:3;26932:67;26996:2;26991:3;26932:67;:::i;:::-;26925:74;;27008:93;27097:3;27008:93;:::i;:::-;27126:2;27121:3;27117:12;27110:19;;26769:366;;;:::o;27141:419::-;27307:4;27345:2;27334:9;27330:18;27322:26;;27394:9;27388:4;27384:20;27380:1;27369:9;27365:17;27358:47;27422:131;27548:4;27422:131;:::i;:::-;27414:139;;27141:419;;;:::o;27566:224::-;27706:34;27702:1;27694:6;27690:14;27683:58;27775:7;27770:2;27762:6;27758:15;27751:32;27566:224;:::o;27796:366::-;27938:3;27959:67;28023:2;28018:3;27959:67;:::i;:::-;27952:74;;28035:93;28124:3;28035:93;:::i;:::-;28153:2;28148:3;28144:12;28137:19;;27796:366;;;:::o;28168:419::-;28334:4;28372:2;28361:9;28357:18;28349:26;;28421:9;28415:4;28411:20;28407:1;28396:9;28392:17;28385:47;28449:131;28575:4;28449:131;:::i;:::-;28441:139;;28168:419;;;:::o;28593:222::-;28733:34;28729:1;28721:6;28717:14;28710:58;28802:5;28797:2;28789:6;28785:15;28778:30;28593:222;:::o;28821:366::-;28963:3;28984:67;29048:2;29043:3;28984:67;:::i;:::-;28977:74;;29060:93;29149:3;29060:93;:::i;:::-;29178:2;29173:3;29169:12;29162:19;;28821:366;;;:::o;29193:419::-;29359:4;29397:2;29386:9;29382:18;29374:26;;29446:9;29440:4;29436:20;29432:1;29421:9;29417:17;29410:47;29474:131;29600:4;29474:131;:::i;:::-;29466:139;;29193:419;;;:::o;29618:172::-;29758:24;29754:1;29746:6;29742:14;29735:48;29618:172;:::o;29796:366::-;29938:3;29959:67;30023:2;30018:3;29959:67;:::i;:::-;29952:74;;30035:93;30124:3;30035:93;:::i;:::-;30153:2;30148:3;30144:12;30137:19;;29796:366;;;:::o;30168:419::-;30334:4;30372:2;30361:9;30357:18;30349:26;;30421:9;30415:4;30411:20;30407:1;30396:9;30392:17;30385:47;30449:131;30575:4;30449:131;:::i;:::-;30441:139;;30168:419;;;:::o;30593:240::-;30733:34;30729:1;30721:6;30717:14;30710:58;30802:23;30797:2;30789:6;30785:15;30778:48;30593:240;:::o;30839:366::-;30981:3;31002:67;31066:2;31061:3;31002:67;:::i;:::-;30995:74;;31078:93;31167:3;31078:93;:::i;:::-;31196:2;31191:3;31187:12;31180:19;;30839:366;;;:::o;31211:419::-;31377:4;31415:2;31404:9;31400:18;31392:26;;31464:9;31458:4;31454:20;31450:1;31439:9;31435:17;31428:47;31492:131;31618:4;31492:131;:::i;:::-;31484:139;;31211:419;;;:::o;31636:169::-;31776:21;31772:1;31764:6;31760:14;31753:45;31636:169;:::o;31811:366::-;31953:3;31974:67;32038:2;32033:3;31974:67;:::i;:::-;31967:74;;32050:93;32139:3;32050:93;:::i;:::-;32168:2;32163:3;32159:12;32152:19;;31811:366;;;:::o;32183:419::-;32349:4;32387:2;32376:9;32372:18;32364:26;;32436:9;32430:4;32426:20;32422:1;32411:9;32407:17;32400:47;32464:131;32590:4;32464:131;:::i;:::-;32456:139;;32183:419;;;:::o;32608:241::-;32748:34;32744:1;32736:6;32732:14;32725:58;32817:24;32812:2;32804:6;32800:15;32793:49;32608:241;:::o;32855:366::-;32997:3;33018:67;33082:2;33077:3;33018:67;:::i;:::-;33011:74;;33094:93;33183:3;33094:93;:::i;:::-;33212:2;33207:3;33203:12;33196:19;;32855:366;;;:::o;33227:419::-;33393:4;33431:2;33420:9;33416:18;33408:26;;33480:9;33474:4;33470:20;33466:1;33455:9;33451:17;33444:47;33508:131;33634:4;33508:131;:::i;:::-;33500:139;;33227:419;;;:::o;33652:233::-;33691:3;33714:24;33732:5;33714:24;:::i;:::-;33705:33;;33760:66;33753:5;33750:77;33747:103;;33830:18;;:::i;:::-;33747:103;33877:1;33870:5;33866:13;33859:20;;33652:233;;;:::o;33891:194::-;33931:4;33951:20;33969:1;33951:20;:::i;:::-;33946:25;;33985:20;34003:1;33985:20;:::i;:::-;33980:25;;34029:1;34026;34022:9;34014:17;;34053:1;34047:4;34044:11;34041:37;;;34058:18;;:::i;:::-;34041:37;33891:194;;;;:::o;34091:180::-;34139:77;34136:1;34129:88;34236:4;34233:1;34226:15;34260:4;34257:1;34250:15;34277:143;34334:5;34365:6;34359:13;34350:22;;34381:33;34408:5;34381:33;:::i;:::-;34277:143;;;;:::o;34426:351::-;34496:6;34545:2;34533:9;34524:7;34520:23;34516:32;34513:119;;;34551:79;;:::i;:::-;34513:119;34671:1;34696:64;34752:7;34743:6;34732:9;34728:22;34696:64;:::i;:::-;34686:74;;34642:128;34426:351;;;;:::o;34783:85::-;34828:7;34857:5;34846:16;;34783:85;;;:::o;34874:158::-;34932:9;34965:61;34983:42;34992:32;35018:5;34992:32;:::i;:::-;34983:42;:::i;:::-;34965:61;:::i;:::-;34952:74;;34874:158;;;:::o;35038:147::-;35133:45;35172:5;35133:45;:::i;:::-;35128:3;35121:58;35038:147;;:::o;35191:114::-;35258:6;35292:5;35286:12;35276:22;;35191:114;;;:::o;35311:184::-;35410:11;35444:6;35439:3;35432:19;35484:4;35479:3;35475:14;35460:29;;35311:184;;;;:::o;35501:132::-;35568:4;35591:3;35583:11;;35621:4;35616:3;35612:14;35604:22;;35501:132;;;:::o;35639:108::-;35716:24;35734:5;35716:24;:::i;:::-;35711:3;35704:37;35639:108;;:::o;35753:179::-;35822:10;35843:46;35885:3;35877:6;35843:46;:::i;:::-;35921:4;35916:3;35912:14;35898:28;;35753:179;;;;:::o;35938:113::-;36008:4;36040;36035:3;36031:14;36023:22;;35938:113;;;:::o;36087:732::-;36206:3;36235:54;36283:5;36235:54;:::i;:::-;36305:86;36384:6;36379:3;36305:86;:::i;:::-;36298:93;;36415:56;36465:5;36415:56;:::i;:::-;36494:7;36525:1;36510:284;36535:6;36532:1;36529:13;36510:284;;;36611:6;36605:13;36638:63;36697:3;36682:13;36638:63;:::i;:::-;36631:70;;36724:60;36777:6;36724:60;:::i;:::-;36714:70;;36570:224;36557:1;36554;36550:9;36545:14;;36510:284;;;36514:14;36810:3;36803:10;;36211:608;;;36087:732;;;;:::o;36825:831::-;37088:4;37126:3;37115:9;37111:19;37103:27;;37140:71;37208:1;37197:9;37193:17;37184:6;37140:71;:::i;:::-;37221:80;37297:2;37286:9;37282:18;37273:6;37221:80;:::i;:::-;37348:9;37342:4;37338:20;37333:2;37322:9;37318:18;37311:48;37376:108;37479:4;37470:6;37376:108;:::i;:::-;37368:116;;37494:72;37562:2;37551:9;37547:18;37538:6;37494:72;:::i;:::-;37576:73;37644:3;37633:9;37629:19;37620:6;37576:73;:::i;:::-;36825:831;;;;;;;;:::o;37662:225::-;37802:34;37798:1;37790:6;37786:14;37779:58;37871:8;37866:2;37858:6;37854:15;37847:33;37662:225;:::o;37893:366::-;38035:3;38056:67;38120:2;38115:3;38056:67;:::i;:::-;38049:74;;38132:93;38221:3;38132:93;:::i;:::-;38250:2;38245:3;38241:12;38234:19;;37893:366;;;:::o;38265:419::-;38431:4;38469:2;38458:9;38454:18;38446:26;;38518:9;38512:4;38508:20;38504:1;38493:9;38489:17;38482:47;38546:131;38672:4;38546:131;:::i;:::-;38538:139;;38265:419;;;:::o

Swarm Source

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