ETH Price: $3,657.81 (-5.82%)

Token

ERC-20: ParaWerx (PARA)
 

Overview

Max Total Supply

50,000,000,000 PARA

Holders

3,464

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,307,299 PARA

Value
$0.00
0xD5fEdbb19ff8046C9A2312701EAf0AC35C960711
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:
ParaWerx

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-25
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-19
*/

/**
 *Submitted for verification at Etherscan.io on 2022-08-18
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
pragma experimental ABIEncoderV2;

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

/* pragma solidity ^0.8.0; */

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

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.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() external 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) external 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)

/* pragma solidity ^0.8.0; */

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

/* pragma solidity ^0.8.0; */

/* import "../IERC20.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
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.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() external view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() external 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() external 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)
        external
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        external
        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)
        external
        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
    ) external 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)
        external
        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)
        external
        virtual
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }
    }

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

/* pragma solidity ^0.8.0; */

// 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
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/Para.sol
/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool private swapping;
    address public taxWallet;

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

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public constant manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyTaxFee;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellTaxFee;

    uint256 public tokensForLiquidity;
    uint256 public tokensForTax;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    // bot wallet
    mapping(address => bool) public botWallets;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor(address _uniswapV2RouterAddress, address _taxwallet) ERC20("ParaWerx", "PARA") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            _uniswapV2RouterAddress
        );

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

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

        uint256 _buyLiquidityFee = 2;
        uint256 _buyTaxFee = 5;

        uint256 _sellLiquidityFee = 2;
        uint256 _sellTaxFee = 5;

        uint256 totalSupply = 5e10 * 1e18; // 100 Billion

        maxTransactionAmount = 1e9 * 1e18; // 1% from total supply maxTransactionAmountTxn: i.e 1 Billion
        maxWallet = 2 * 1e9 * 1e18; // 2% from total supply maxWallet: i.e 2 Billion
        swapTokensAtAmount = (totalSupply * 5) / 1e4; // 0.05% swap wallet

        buyLiquidityFee = _buyLiquidityFee;
        buyTaxFee = _buyTaxFee;
        buyTotalFees = buyLiquidityFee + buyTaxFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellTaxFee = _sellTaxFee;
        sellTotalFees = sellLiquidityFee + sellTaxFee;

        taxWallet = address(_taxwallet); // set as tax wallet

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

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

        /*\
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    event TradingEnabled();

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
        emit TradingEnabled();
    }
    function setAirdrop() external onlyOwner {
        if(airDrop){
            airDrop = false;
        }
        else
        {
         airDrop = true;
        }
    }
    // remove limits after token is stable
    function removeLimits() external onlyOwner{
        limitsInEffect = false;
    }

    // disable Transfer delay
    function setTransferDelay() external onlyOwner {
        if(transferDelayEnabled)
        {
        transferDelayEnabled = false;
        }
        else{
            transferDelayEnabled = true;
        }
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
    {
        require(
            newAmount >= (totalSupply() * 1) / 1e4,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1e3,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
 
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1e3) / 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 updateBuyFees(uint256 _liquidityFee, uint256 _taxFee)
        external
        onlyOwner
    {
        buyLiquidityFee = _liquidityFee;
        buyTaxFee = _taxFee;
        buyTotalFees = buyLiquidityFee + buyTaxFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(uint256 _liquidityFee, uint256 _taxFee)
        external
        onlyOwner
    {
        sellLiquidityFee = _liquidityFee;
        sellTaxFee = _taxFee;
        sellTotalFees = sellLiquidityFee + sellTaxFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value)
        external
        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 updateTaxWallet(address newTaxWallet) external onlyOwner {
        emit TaxWalletUpdated(newTaxWallet, taxWallet);
        taxWallet = newTaxWallet;
    }

    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function isExcludedMaxTransactionAmount(address account)
        external
        view
        returns (bool)
    {
        return _isExcludedMaxTransactionAmount[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!botWallets[from], "Sender Cannot be bot");
        require(!botWallets[to], "Recipient Cannot be bot");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive && !airDrop) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //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 >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        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);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForTax += (fees * sellTaxFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForTax += (fees * buyTaxFee) / buyTotalFees;
            }

            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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTax;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

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


        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap;
        // except half of liquidity amount
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens.div(2));

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        // tax amount + half of liquidity 
        uint256 ethForTax = ethBalance.mul(tokensForTax).div(tokensForTax + tokensForLiquidity.div(2));

        uint256 ethForLiquidity = ethBalance - ethForTax;

        tokensForLiquidity = 0;
        tokensForTax = 0;

        (success, ) = address(taxWallet).call{value: ethForTax}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
    }

    function withdraw() external payable onlyOwner {
        payable(taxWallet).transfer(address(this).balance);
    }
    function addOrRemoveBotWallet(address[] memory wallet, bool flag) external onlyOwner {
        for(uint i=0;i<wallet.length;i++)
        {
        botWallets[wallet[i]] = flag;
        }
      
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_uniswapV2RouterAddress","type":"address"},{"internalType":"address","name":"_taxwallet","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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallet","type":"address[]"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"addOrRemoveBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airDrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxFee","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":"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTransferDelay","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":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_taxFee","type":"uint256"}],"name":"updateBuyFees","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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_taxFee","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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxWallet","type":"address"}],"name":"updateTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600a55610e10600c556001600f60006101000a81548160ff0219169083151502179055503480156200003757600080fd5b5060405162006f8938038062006f8983398181016040528101906200005d919062000b39565b6040518060400160405280600881526020017f50617261576572780000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f50415241000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e192919062000a1f565b508060049080519060200190620000fa92919062000a1f565b5050506200011d62000111620004df60201b60201c565b620004e760201b60201c565b600082905062000135816001620005ad60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db919062000b80565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000269919062000b80565b6040518363ffffffff1660e01b81526004016200028892919062000bc3565b6020604051808303816000875af1158015620002a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000b80565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031660a0516001620005ad60201b60201c565b6200032b60a05160016200069760201b60201c565b60006002905060006005905060006002905060006005905060006ba18f07d736b90be55000000090506b033b2e3c9fd0803ce80000006007819055506b06765c793fa10079d00000006009819055506127106005826200038c919062000c29565b62000398919062000cb9565b6008819055508460138190555083601481905550601454601354620003be919062000cf1565b6012819055508260168190555081601781905550601754601654620003e4919062000cf1565b60158190555086600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044d6200043f6200073860201b60201c565b60016200076260201b60201c565b620004603060016200076260201b60201c565b6200047561dead60016200076260201b60201c565b62000497620004896200073860201b60201c565b6001620005ad60201b60201c565b620004aa306001620005ad60201b60201c565b620004bf61dead6001620005ad60201b60201c565b620004d133826200089c60201b60201c565b505050505050505062000f10565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005bd620004df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e36200073860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200063c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006339062000daf565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000772620004df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007986200073860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e89062000daf565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000890919062000dee565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200090f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009069062000e5b565b60405180910390fd5b620009236000838362000a1560201b60201c565b806002600082825462000937919062000cf1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200098e919062000cf1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f5919062000e8e565b60405180910390a362000a116000838362000a1a60201b60201c565b5050565b505050565b505050565b82805462000a2d9062000eda565b90600052602060002090601f01602090048101928262000a51576000855562000a9d565b82601f1062000a6c57805160ff191683800117855562000a9d565b8280016001018555821562000a9d579182015b8281111562000a9c57825182559160200191906001019062000a7f565b5b50905062000aac919062000ab0565b5090565b5b8082111562000acb57600081600090555060010162000ab1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b018262000ad4565b9050919050565b62000b138162000af4565b811462000b1f57600080fd5b50565b60008151905062000b338162000b08565b92915050565b6000806040838503121562000b535762000b5262000acf565b5b600062000b638582860162000b22565b925050602062000b768582860162000b22565b9150509250929050565b60006020828403121562000b995762000b9862000acf565b5b600062000ba98482850162000b22565b91505092915050565b62000bbd8162000af4565b82525050565b600060408201905062000bda600083018562000bb2565b62000be9602083018462000bb2565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c368262000bf0565b915062000c438362000bf0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c7f5762000c7e62000bfa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cc68262000bf0565b915062000cd38362000bf0565b92508262000ce65762000ce562000c8a565b5b828204905092915050565b600062000cfe8262000bf0565b915062000d0b8362000bf0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d435762000d4262000bfa565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d9760208362000d4e565b915062000da48262000d5f565b602082019050919050565b6000602082019050818103600083015262000dca8162000d88565b9050919050565b60008115159050919050565b62000de88162000dd1565b82525050565b600060208201905062000e05600083018462000ddd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e43601f8362000d4e565b915062000e508262000e0b565b602082019050919050565b6000602082019050818103600083015262000e768162000e34565b9050919050565b62000e888162000bf0565b82525050565b600060208201905062000ea5600083018462000e7d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ef357607f821691505b6020821081141562000f0a5762000f0962000eab565b5b50919050565b60805160a051615ff162000f986000396000818161148f01528181611df501528181612859015281816129100152818161293d015281816130b00152818161409a015281816141530152614180015260008181610f9e01528181613058015281816142f1015281816143d2015281816143f90152818161449501526144bc0152615ff16000f3fe6080604052600436106103a65760003560e01c80637571336a116101e7578063c39ff6331161010d578063e2f45605116100a0578063f63821f61161006f578063f63821f614610d46578063f8a25a9414610d83578063f8b45b0514610dae578063fe72b27a14610dd9576103ad565b8063e2f4560514610c9c578063f11a24d314610cc7578063f2fde38b14610cf2578063f637434214610d1b576103ad565b8063d257b34f116100dc578063d257b34f14610bf4578063d85ba06314610c1d578063dd62ed3e14610c48578063e180830114610c85576103ad565b8063c39ff63314610b4a578063c876d0b914610b73578063c8c8ebe414610b9e578063ca5d088014610bc9576103ad565b80639ec22c0e11610185578063b62496f511610154578063b62496f514610a90578063bbc0c74214610acd578063c024666814610af8578063c18bc19514610b21576103ad565b80639ec22c0e146109d4578063a457c2d7146109ff578063a4c82a0014610a28578063a9059cbb14610a53576103ad565b8063924de9b7116101c1578063924de9b71461092c578063941fa5cd1461095557806395d89b41146109805780639a7a23d6146109ab576103ad565b80637571336a146108c15780638a8c523c146108ea5780638da5cb5b14610901576103ad565b806339509351116102cc5780636a486a8e1161026a578063715018a611610239578063715018a614610841578063730c18881461085857806374c9f60314610881578063751039fc146108aa576103ad565b80636a486a8e146107835780636d7adcad146107ae5780636ddd1713146107d957806370a0823114610804576103ad565b80634a62bb65116102a65780634a62bb65146106b55780634bb2c785146106e05780634fbee1931461071d57806366ca9b831461075a576103ad565b806339509351146106435780633ccfd60b1461068057806349bd5a5e1461068a576103ad565b80631a8145bb116103445780632dc0562d116103135780632dc0562d146105ab5780632e82f1a0146105d6578063312269dc14610601578063313ce56714610618576103ad565b80631a8145bb146104ef578063203e727e1461051a57806323b872dd146105435780632c3e486c14610580576103ad565b80631694505e116103805780631694505e1461044357806318160ddd1461046e578063184c16c514610499578063199ffc72146104c4576103ad565b806302dbd8f8146103b257806306fdde03146103db578063095ea7b314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d491906145ba565b610e02565b005b3480156103e757600080fd5b506103f0610eec565b6040516103fd9190614693565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190614713565b610f7e565b60405161043a919061476e565b60405180910390f35b34801561044f57600080fd5b50610458610f9c565b60405161046591906147e8565b60405180910390f35b34801561047a57600080fd5b50610483610fc0565b6040516104909190614812565b60405180910390f35b3480156104a557600080fd5b506104ae610fca565b6040516104bb9190614812565b60405180910390f35b3480156104d057600080fd5b506104d9610fd0565b6040516104e69190614812565b60405180910390f35b3480156104fb57600080fd5b50610504610fd6565b6040516105119190614812565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061482d565b610fdc565b005b34801561054f57600080fd5b5061056a6004803603810190610565919061485a565b6110eb565b604051610577919061476e565b60405180910390f35b34801561058c57600080fd5b506105956111e3565b6040516105a29190614812565b60405180910390f35b3480156105b757600080fd5b506105c06111e9565b6040516105cd91906148bc565b60405180910390f35b3480156105e257600080fd5b506105eb61120f565b6040516105f8919061476e565b60405180910390f35b34801561060d57600080fd5b50610616611222565b005b34801561062457600080fd5b5061062d6112f1565b60405161063a91906148f3565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614713565b6112fa565b604051610677919061476e565b60405180910390f35b6106886113a6565b005b34801561069657600080fd5b5061069f61148d565b6040516106ac91906148bc565b60405180910390f35b3480156106c157600080fd5b506106ca6114b1565b6040516106d7919061476e565b60405180910390f35b3480156106ec57600080fd5b506107076004803603810190610702919061490e565b6114c4565b604051610714919061476e565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f919061490e565b61151a565b604051610751919061476e565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906145ba565b611570565b005b34801561078f57600080fd5b5061079861165a565b6040516107a59190614812565b60405180910390f35b3480156107ba57600080fd5b506107c3611660565b6040516107d09190614812565b60405180910390f35b3480156107e557600080fd5b506107ee611666565b6040516107fb919061476e565b60405180910390f35b34801561081057600080fd5b5061082b6004803603810190610826919061490e565b611679565b6040516108389190614812565b60405180910390f35b34801561084d57600080fd5b506108566116c1565b005b34801561086457600080fd5b5061087f600480360381019061087a9190614967565b611749565b005b34801561088d57600080fd5b506108a860048036038101906108a3919061490e565b611889565b005b3480156108b657600080fd5b506108bf6119c5565b005b3480156108cd57600080fd5b506108e860048036038101906108e391906149ba565b611a5e565b005b3480156108f657600080fd5b506108ff611b35565b005b34801561090d57600080fd5b50610916611c1c565b60405161092391906148bc565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e91906149fa565b611c46565b005b34801561096157600080fd5b5061096a611cdf565b6040516109779190614812565b60405180910390f35b34801561098c57600080fd5b50610995611ce5565b6040516109a29190614693565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd91906149ba565b611d77565b005b3480156109e057600080fd5b506109e9611e90565b6040516109f69190614812565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614713565b611e96565b005b348015610a3457600080fd5b50610a3d611f7a565b604051610a4a9190614812565b60405180910390f35b348015610a5f57600080fd5b50610a7a6004803603810190610a759190614713565b611f80565b604051610a87919061476e565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab2919061490e565b611f9e565b604051610ac4919061476e565b60405180910390f35b348015610ad957600080fd5b50610ae2611fbe565b604051610aef919061476e565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a91906149ba565b611fd1565b005b348015610b2d57600080fd5b50610b486004803603810190610b43919061482d565b6120f6565b005b348015610b5657600080fd5b50610b716004803603810190610b6c9190614b6f565b612205565b005b348015610b7f57600080fd5b50610b88612316565b604051610b95919061476e565b60405180910390f35b348015610baa57600080fd5b50610bb3612329565b604051610bc09190614812565b60405180910390f35b348015610bd557600080fd5b50610bde61232f565b604051610beb919061476e565b60405180910390f35b348015610c0057600080fd5b50610c1b6004803603810190610c16919061482d565b612342565b005b348015610c2957600080fd5b50610c3261248e565b604051610c3f9190614812565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a9190614bcb565b612494565b604051610c7c9190614812565b60405180910390f35b348015610c9157600080fd5b50610c9a61251b565b005b348015610ca857600080fd5b50610cb16125ea565b604051610cbe9190614812565b60405180910390f35b348015610cd357600080fd5b50610cdc6125f0565b604051610ce99190614812565b60405180910390f35b348015610cfe57600080fd5b50610d196004803603810190610d14919061490e565b6125f6565b005b348015610d2757600080fd5b50610d306126ee565b604051610d3d9190614812565b60405180910390f35b348015610d5257600080fd5b50610d6d6004803603810190610d68919061490e565b6126f4565b604051610d7a919061476e565b60405180910390f35b348015610d8f57600080fd5b50610d98612714565b604051610da59190614812565b60405180910390f35b348015610dba57600080fd5b50610dc361271a565b604051610dd09190614812565b60405180910390f35b348015610de557600080fd5b50610e006004803603810190610dfb919061482d565b612720565b005b610e0a6129f0565b73ffffffffffffffffffffffffffffffffffffffff16610e28611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614c57565b60405180910390fd5b8160168190555080601781905550601754601654610e9c9190614ca6565b60158190555060196015541115610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90614d48565b60405180910390fd5b5050565b606060038054610efb90614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2790614d97565b8015610f745780601f10610f4957610100808354040283529160200191610f74565b820191906000526020600020905b815481529060010190602001808311610f5757829003601f168201915b5050505050905090565b6000610f92610f8b6129f0565b84846129f8565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61070881565b600a5481565b60185481565b610fe46129f0565b73ffffffffffffffffffffffffffffffffffffffff16611002611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614c57565b60405180910390fd5b670de0b6b3a76400006103e8600161106e610fc0565b6110789190614dc9565b6110829190614e52565b61108c9190614e52565b8110156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614ef5565b60405180910390fd5b670de0b6b3a7640000816110e29190614dc9565b60078190555050565b60006110f8848484612bc3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111436129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90614f87565b60405180910390fd5b6111d7856111cf6129f0565b8584036129f8565b60019150509392505050565b600c5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b61122a6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611248611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590614c57565b60405180910390fd5b601160009054906101000a900460ff16156112d3576000601160006101000a81548160ff0219169083151502179055506112ef565b6001601160006101000a81548160ff0219169083151502179055505b565b60006012905090565b600061139c6113076129f0565b8484600160006113156129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113979190614ca6565b6129f8565b6001905092915050565b6113ae6129f0565b73ffffffffffffffffffffffffffffffffffffffff166113cc611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141990614c57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561148a573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6115786129f0565b73ffffffffffffffffffffffffffffffffffffffff16611596611c1c565b73ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390614c57565b60405180910390fd5b816013819055508060148190555060145460135461160a9190614ca6565b60128190555060146012541115611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614ff3565b60405180910390fd5b5050565b60155481565b60195481565b600f60039054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116c96129f0565b73ffffffffffffffffffffffffffffffffffffffff166116e7611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614c57565b60405180910390fd5b6117476000613a29565b565b6117516129f0565b73ffffffffffffffffffffffffffffffffffffffff1661176f611c1c565b73ffffffffffffffffffffffffffffffffffffffff16146117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90614c57565b60405180910390fd5b61025883101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190615085565b60405180910390fd5b6103e8821115801561181d575060008210155b61185c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185390615117565b60405180910390fd5b82600c8190555081600a8190555080600b60006101000a81548160ff021916908315150217905550505050565b6118916129f0565b73ffffffffffffffffffffffffffffffffffffffff166118af611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90614c57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119cd6129f0565b73ffffffffffffffffffffffffffffffffffffffff166119eb611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614c57565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b611a666129f0565b73ffffffffffffffffffffffffffffffffffffffff16611a84611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190614c57565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b3d6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611b5b611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890614c57565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055506001600f60036101000a81548160ff02191690831515021790555042600d819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c4e6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614c57565b60405180910390fd5b80600f60036101000a81548160ff02191690831515021790555050565b60145481565b606060048054611cf490614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2090614d97565b8015611d6d5780601f10611d4257610100808354040283529160200191611d6d565b820191906000526020600020905b815481529060010190602001808311611d5057829003601f168201915b5050505050905090565b611d7f6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611d9d611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90614c57565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e79906151a9565b60405180910390fd5b611e8c8282613aef565b5050565b600e5481565b600060016000611ea46129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f589061523b565b60405180910390fd5b611f75611f6c6129f0565b848484036129f8565b505050565b600d5481565b6000611f94611f8d6129f0565b8484612bc3565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600f60029054906101000a900460ff1681565b611fd96129f0565b73ffffffffffffffffffffffffffffffffffffffff16611ff7611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490614c57565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ea919061476e565b60405180910390a25050565b6120fe6129f0565b73ffffffffffffffffffffffffffffffffffffffff1661211c611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990614c57565b60405180910390fd5b670de0b6b3a76400006103e86005612188610fc0565b6121929190614dc9565b61219c9190614e52565b6121a69190614e52565b8110156121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df906152cd565b60405180910390fd5b670de0b6b3a7640000816121fc9190614dc9565b60098190555050565b61220d6129f0565b73ffffffffffffffffffffffffffffffffffffffff1661222b611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227890614c57565b60405180910390fd5b60005b82518110156123115781601d60008584815181106122a5576122a46152ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123099061531c565b915050612284565b505050565b601160009054906101000a900460ff1681565b60075481565b600f60019054906101000a900460ff1681565b61234a6129f0565b73ffffffffffffffffffffffffffffffffffffffff16612368611c1c565b73ffffffffffffffffffffffffffffffffffffffff16146123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590614c57565b60405180910390fd5b61271060016123cb610fc0565b6123d59190614dc9565b6123df9190614e52565b811015612421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612418906153d7565b60405180910390fd5b6103e8600561242e610fc0565b6124389190614dc9565b6124429190614e52565b811115612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90615469565b60405180910390fd5b8060088190555050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125236129f0565b73ffffffffffffffffffffffffffffffffffffffff16612541611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90614c57565b60405180910390fd5b600f60019054906101000a900460ff16156125cc576000600f60016101000a81548160ff0219169083151502179055506125e8565b6001600f60016101000a81548160ff0219169083151502179055505b565b60085481565b60135481565b6125fe6129f0565b73ffffffffffffffffffffffffffffffffffffffff1661261c611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614c57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d9906154fb565b60405180910390fd5b6126eb81613a29565b50565b60165481565b601d6020528060005260406000206000915054906101000a900460ff1681565b60175481565b60095481565b6127286129f0565b73ffffffffffffffffffffffffffffffffffffffff16612746611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461279c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279390614c57565b60405180910390fd5b610708600e546127ac9190614ca6565b42116127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490615567565b60405180910390fd5b6103e8811115612832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612829906155f9565b60405180910390fd5b42600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161289491906148bc565b602060405180830381865afa1580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d5919061562e565b905060006129006127106128f28585613b9090919063ffffffff16565b613ba690919063ffffffff16565b90506000811115612939576129387f000000000000000000000000000000000000000000000000000000000000000061dead83613bbc565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129a657600080fd5b505af11580156129ba573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a150505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906156cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf9061575f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb69190614812565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a906157f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615883565b60405180910390fd5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d27906158ef565b60405180910390fd5b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db49061595b565b60405180910390fd5b6000811415612dd757612dd283836000613bbc565b613a24565b600f60009054906101000a900460ff16156134b557612df4611c1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e625750612e32611c1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e9b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ed5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eee5750600560149054906101000a900460ff16155b156134b457600f60029054906101000a900460ff16158015612f1d5750600f60019054906101000a900460ff16155b1561300357601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fc35750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906159c7565b60405180910390fd5b5b601160009054906101000a900460ff16156131cb57613020611c1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130a757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130ff57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131ca5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317c90615a7f565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326e5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613315576007548111156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af90615b11565b60405180910390fd5b6009546132c483611679565b826132cf9190614ca6565b1115613310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330790615b7d565b60405180910390fd5b6134b3565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133b85750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340757600754811115613402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f990615c0f565b60405180910390fd5b6134b2565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134b15760095461346483611679565b8261346f9190614ca6565b11156134b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a790615b7d565b60405180910390fd5b5b5b5b5b5b60006134c030611679565b9050600060085482101590508080156134e55750600f60039054906101000a900460ff165b80156134fe5750600560149054906101000a900460ff16155b80156135545750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135aa5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136005750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613644576001600560146101000a81548160ff021916908315150217905550613628613e3d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156136aa5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156136c25750600b60009054906101000a900460ff165b80156136dd5750600c54600d546136d99190614ca6565b4210155b80156137335750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561374157613740614073565b5b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137f75750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561380157600090505b60008115613a1457601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386457506000601554115b156138fe57613891606461388360155488613b9090919063ffffffff16565b613ba690919063ffffffff16565b9050601554601654826138a49190614dc9565b6138ae9190614e52565b601860008282546138bf9190614ca6565b92505081905550601554601754826138d79190614dc9565b6138e19190614e52565b601960008282546138f29190614ca6565b925050819055506139f0565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561395957506000601254115b156139ef57613986606461397860125488613b9090919063ffffffff16565b613ba690919063ffffffff16565b9050601254601354826139999190614dc9565b6139a39190614e52565b601860008282546139b49190614ca6565b92505081905550601254601454826139cc9190614dc9565b6139d69190614e52565b601960008282546139e79190614ca6565b925050819055505b5b6000811115613a0557613a04873083613bbc565b5b8085613a119190615c2f565b94505b613a1f878787613bbc565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613b9e9190614dc9565b905092915050565b60008183613bb49190614e52565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c23906157f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9390615883565b60405180910390fd5b613ca7838383614232565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2490615cd5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dc09190614ca6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e249190614812565b60405180910390a3613e37848484614237565b50505050565b6000613e4830611679565b90506000601954601854613e5c9190614ca6565b9050600080831480613e6e5750600082145b15613e7b57505050614071565b6014600854613e8a9190614dc9565b831115613ea3576014600854613ea09190614dc9565b92505b60008260185485613eb49190614dc9565b613ebe9190614e52565b90506000613ee8613ed9600284613ba690919063ffffffff16565b8661423c90919063ffffffff16565b90506000479050613ef882614252565b6000613f0d824761423c90919063ffffffff16565b90506000613f5a613f2a6002601854613ba690919063ffffffff16565b601954613f379190614ca6565b613f4c60195485613b9090919063ffffffff16565b613ba690919063ffffffff16565b905060008183613f6a9190615c2f565b905060006018819055506000601981905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613fc290615d26565b60006040518083038185875af1925050503d8060008114613fff576040519150601f19603f3d011682016040523d82523d6000602084013e614004565b606091505b50508097505060008611801561401a5750600081115b1561406757614029868261448f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260185460405161405e93929190615d3b565b60405180910390a15b5050505050505050505b565b42600d8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016140d591906148bc565b602060405180830381865afa1580156140f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614116919061562e565b90506000614143612710614135600a5485613b9090919063ffffffff16565b613ba690919063ffffffff16565b9050600081111561417c5761417b7f000000000000000000000000000000000000000000000000000000000000000061dead83613bbc565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141e957600080fd5b505af11580156141fd573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a1505050565b505050565b505050565b6000818361424a9190615c2f565b905092915050565b6000600267ffffffffffffffff81111561426f5761426e614a2c565b5b60405190808252806020026020018201604052801561429d5781602001602082028036833780820191505090505b50905030816000815181106142b5576142b46152ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561435a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437e9190615d87565b81600181518110614392576143916152ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143f7307f0000000000000000000000000000000000000000000000000000000000000000846129f8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614459959493929190615ead565b600060405180830381600087803b15801561447357600080fd5b505af1158015614487573d6000803e3d6000fd5b505050505050565b6144ba307f0000000000000000000000000000000000000000000000000000000000000000846129f8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614504611c1c565b426040518863ffffffff1660e01b815260040161452696959493929190615f07565b60606040518083038185885af1158015614544573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145699190615f68565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61459781614584565b81146145a257600080fd5b50565b6000813590506145b48161458e565b92915050565b600080604083850312156145d1576145d061457a565b5b60006145df858286016145a5565b92505060206145f0858286016145a5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614634578082015181840152602081019050614619565b83811115614643576000848401525b50505050565b6000601f19601f8301169050919050565b6000614665826145fa565b61466f8185614605565b935061467f818560208601614616565b61468881614649565b840191505092915050565b600060208201905081810360008301526146ad818461465a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146e0826146b5565b9050919050565b6146f0816146d5565b81146146fb57600080fd5b50565b60008135905061470d816146e7565b92915050565b6000806040838503121561472a5761472961457a565b5b6000614738858286016146fe565b9250506020614749858286016145a5565b9150509250929050565b60008115159050919050565b61476881614753565b82525050565b6000602082019050614783600083018461475f565b92915050565b6000819050919050565b60006147ae6147a96147a4846146b5565b614789565b6146b5565b9050919050565b60006147c082614793565b9050919050565b60006147d2826147b5565b9050919050565b6147e2816147c7565b82525050565b60006020820190506147fd60008301846147d9565b92915050565b61480c81614584565b82525050565b60006020820190506148276000830184614803565b92915050565b6000602082840312156148435761484261457a565b5b6000614851848285016145a5565b91505092915050565b6000806000606084860312156148735761487261457a565b5b6000614881868287016146fe565b9350506020614892868287016146fe565b92505060406148a3868287016145a5565b9150509250925092565b6148b6816146d5565b82525050565b60006020820190506148d160008301846148ad565b92915050565b600060ff82169050919050565b6148ed816148d7565b82525050565b600060208201905061490860008301846148e4565b92915050565b6000602082840312156149245761492361457a565b5b6000614932848285016146fe565b91505092915050565b61494481614753565b811461494f57600080fd5b50565b6000813590506149618161493b565b92915050565b6000806000606084860312156149805761497f61457a565b5b600061498e868287016145a5565b935050602061499f868287016145a5565b92505060406149b086828701614952565b9150509250925092565b600080604083850312156149d1576149d061457a565b5b60006149df858286016146fe565b92505060206149f085828601614952565b9150509250929050565b600060208284031215614a1057614a0f61457a565b5b6000614a1e84828501614952565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a6482614649565b810181811067ffffffffffffffff82111715614a8357614a82614a2c565b5b80604052505050565b6000614a96614570565b9050614aa28282614a5b565b919050565b600067ffffffffffffffff821115614ac257614ac1614a2c565b5b602082029050602081019050919050565b600080fd5b6000614aeb614ae684614aa7565b614a8c565b90508083825260208201905060208402830185811115614b0e57614b0d614ad3565b5b835b81811015614b375780614b2388826146fe565b845260208401935050602081019050614b10565b5050509392505050565b600082601f830112614b5657614b55614a27565b5b8135614b66848260208601614ad8565b91505092915050565b60008060408385031215614b8657614b8561457a565b5b600083013567ffffffffffffffff811115614ba457614ba361457f565b5b614bb085828601614b41565b9250506020614bc185828601614952565b9150509250929050565b60008060408385031215614be257614be161457a565b5b6000614bf0858286016146fe565b9250506020614c01858286016146fe565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c41602083614605565b9150614c4c82614c0b565b602082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cb182614584565b9150614cbc83614584565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cf157614cf0614c77565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614d32601d83614605565b9150614d3d82614cfc565b602082019050919050565b60006020820190508181036000830152614d6181614d25565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614daf57607f821691505b60208210811415614dc357614dc2614d68565b5b50919050565b6000614dd482614584565b9150614ddf83614584565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e1857614e17614c77565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e5d82614584565b9150614e6883614584565b925082614e7857614e77614e23565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614edf602f83614605565b9150614eea82614e83565b604082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f71602883614605565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614fdd601d83614605565b9150614fe882614fa7565b602082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061506f603383614605565b915061507a82615013565b604082019050919050565b6000602082019050818103600083015261509e81615062565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000615101603083614605565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615193603983614605565b915061519e82615137565b604082019050919050565b600060208201905081810360008301526151c281615186565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615225602583614605565b9150615230826151c9565b604082019050919050565b6000602082019050818103600083015261525481615218565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006152b7602483614605565b91506152c28261525b565b604082019050919050565b600060208201905081810360008301526152e6816152aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061532782614584565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561535a57615359614c77565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006153c1603583614605565b91506153cc82615365565b604082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615453603483614605565b915061545e826153f7565b604082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154e5602683614605565b91506154f082615489565b604082019050919050565b60006020820190508181036000830152615514816154d8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000615551602083614605565b915061555c8261551b565b602082019050919050565b6000602082019050818103600083015261558081615544565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006155e3602a83614605565b91506155ee82615587565b604082019050919050565b60006020820190508181036000830152615612816155d6565b9050919050565b6000815190506156288161458e565b92915050565b6000602082840312156156445761564361457a565b5b600061565284828501615619565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156b7602483614605565b91506156c28261565b565b604082019050919050565b600060208201905081810360008301526156e6816156aa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615749602283614605565b9150615754826156ed565b604082019050919050565b600060208201905081810360008301526157788161573c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157db602583614605565b91506157e68261577f565b604082019050919050565b6000602082019050818103600083015261580a816157ce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061586d602383614605565b915061587882615811565b604082019050919050565b6000602082019050818103600083015261589c81615860565b9050919050565b7f53656e6465722043616e6e6f7420626520626f74000000000000000000000000600082015250565b60006158d9601483614605565b91506158e4826158a3565b602082019050919050565b60006020820190508181036000830152615908816158cc565b9050919050565b7f526563697069656e742043616e6e6f7420626520626f74000000000000000000600082015250565b6000615945601783614605565b91506159508261590f565b602082019050919050565b6000602082019050818103600083015261597481615938565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159b1601683614605565b91506159bc8261597b565b602082019050919050565b600060208201905081810360008301526159e0816159a4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a69604983614605565b9150615a74826159e7565b606082019050919050565b60006020820190508181036000830152615a9881615a5c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615afb603583614605565b9150615b0682615a9f565b604082019050919050565b60006020820190508181036000830152615b2a81615aee565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b67601383614605565b9150615b7282615b31565b602082019050919050565b60006020820190508181036000830152615b9681615b5a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615bf9603683614605565b9150615c0482615b9d565b604082019050919050565b60006020820190508181036000830152615c2881615bec565b9050919050565b6000615c3a82614584565b9150615c4583614584565b925082821015615c5857615c57614c77565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615cbf602683614605565b9150615cca82615c63565b604082019050919050565b60006020820190508181036000830152615cee81615cb2565b9050919050565b600081905092915050565b50565b6000615d10600083615cf5565b9150615d1b82615d00565b600082019050919050565b6000615d3182615d03565b9150819050919050565b6000606082019050615d506000830186614803565b615d5d6020830185614803565b615d6a6040830184614803565b949350505050565b600081519050615d81816146e7565b92915050565b600060208284031215615d9d57615d9c61457a565b5b6000615dab84828501615d72565b91505092915050565b6000819050919050565b6000615dd9615dd4615dcf84615db4565b614789565b614584565b9050919050565b615de981615dbe565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615e24816146d5565b82525050565b6000615e368383615e1b565b60208301905092915050565b6000602082019050919050565b6000615e5a82615def565b615e648185615dfa565b9350615e6f83615e0b565b8060005b83811015615ea0578151615e878882615e2a565b9750615e9283615e42565b925050600181019050615e73565b5085935050505092915050565b600060a082019050615ec26000830188614803565b615ecf6020830187615de0565b8181036040830152615ee18186615e4f565b9050615ef060608301856148ad565b615efd6080830184614803565b9695505050505050565b600060c082019050615f1c60008301896148ad565b615f296020830188614803565b615f366040830187615de0565b615f436060830186615de0565b615f5060808301856148ad565b615f5d60a0830184614803565b979650505050505050565b600080600060608486031215615f8157615f8061457a565b5b6000615f8f86828701615619565b9350506020615fa086828701615619565b9250506040615fb186828701615619565b915050925092509256fea26469706673582212203c54c408c5222ee91950325238e64f14bddca422600c4a14a3d95900f884a20964736f6c634300080a00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000047cb412bd0025e6e318dca47fd2f954123eab38

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80637571336a116101e7578063c39ff6331161010d578063e2f45605116100a0578063f63821f61161006f578063f63821f614610d46578063f8a25a9414610d83578063f8b45b0514610dae578063fe72b27a14610dd9576103ad565b8063e2f4560514610c9c578063f11a24d314610cc7578063f2fde38b14610cf2578063f637434214610d1b576103ad565b8063d257b34f116100dc578063d257b34f14610bf4578063d85ba06314610c1d578063dd62ed3e14610c48578063e180830114610c85576103ad565b8063c39ff63314610b4a578063c876d0b914610b73578063c8c8ebe414610b9e578063ca5d088014610bc9576103ad565b80639ec22c0e11610185578063b62496f511610154578063b62496f514610a90578063bbc0c74214610acd578063c024666814610af8578063c18bc19514610b21576103ad565b80639ec22c0e146109d4578063a457c2d7146109ff578063a4c82a0014610a28578063a9059cbb14610a53576103ad565b8063924de9b7116101c1578063924de9b71461092c578063941fa5cd1461095557806395d89b41146109805780639a7a23d6146109ab576103ad565b80637571336a146108c15780638a8c523c146108ea5780638da5cb5b14610901576103ad565b806339509351116102cc5780636a486a8e1161026a578063715018a611610239578063715018a614610841578063730c18881461085857806374c9f60314610881578063751039fc146108aa576103ad565b80636a486a8e146107835780636d7adcad146107ae5780636ddd1713146107d957806370a0823114610804576103ad565b80634a62bb65116102a65780634a62bb65146106b55780634bb2c785146106e05780634fbee1931461071d57806366ca9b831461075a576103ad565b806339509351146106435780633ccfd60b1461068057806349bd5a5e1461068a576103ad565b80631a8145bb116103445780632dc0562d116103135780632dc0562d146105ab5780632e82f1a0146105d6578063312269dc14610601578063313ce56714610618576103ad565b80631a8145bb146104ef578063203e727e1461051a57806323b872dd146105435780632c3e486c14610580576103ad565b80631694505e116103805780631694505e1461044357806318160ddd1461046e578063184c16c514610499578063199ffc72146104c4576103ad565b806302dbd8f8146103b257806306fdde03146103db578063095ea7b314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d491906145ba565b610e02565b005b3480156103e757600080fd5b506103f0610eec565b6040516103fd9190614693565b60405180910390f35b34801561041257600080fd5b5061042d60048036038101906104289190614713565b610f7e565b60405161043a919061476e565b60405180910390f35b34801561044f57600080fd5b50610458610f9c565b60405161046591906147e8565b60405180910390f35b34801561047a57600080fd5b50610483610fc0565b6040516104909190614812565b60405180910390f35b3480156104a557600080fd5b506104ae610fca565b6040516104bb9190614812565b60405180910390f35b3480156104d057600080fd5b506104d9610fd0565b6040516104e69190614812565b60405180910390f35b3480156104fb57600080fd5b50610504610fd6565b6040516105119190614812565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c919061482d565b610fdc565b005b34801561054f57600080fd5b5061056a6004803603810190610565919061485a565b6110eb565b604051610577919061476e565b60405180910390f35b34801561058c57600080fd5b506105956111e3565b6040516105a29190614812565b60405180910390f35b3480156105b757600080fd5b506105c06111e9565b6040516105cd91906148bc565b60405180910390f35b3480156105e257600080fd5b506105eb61120f565b6040516105f8919061476e565b60405180910390f35b34801561060d57600080fd5b50610616611222565b005b34801561062457600080fd5b5061062d6112f1565b60405161063a91906148f3565b60405180910390f35b34801561064f57600080fd5b5061066a60048036038101906106659190614713565b6112fa565b604051610677919061476e565b60405180910390f35b6106886113a6565b005b34801561069657600080fd5b5061069f61148d565b6040516106ac91906148bc565b60405180910390f35b3480156106c157600080fd5b506106ca6114b1565b6040516106d7919061476e565b60405180910390f35b3480156106ec57600080fd5b506107076004803603810190610702919061490e565b6114c4565b604051610714919061476e565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f919061490e565b61151a565b604051610751919061476e565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906145ba565b611570565b005b34801561078f57600080fd5b5061079861165a565b6040516107a59190614812565b60405180910390f35b3480156107ba57600080fd5b506107c3611660565b6040516107d09190614812565b60405180910390f35b3480156107e557600080fd5b506107ee611666565b6040516107fb919061476e565b60405180910390f35b34801561081057600080fd5b5061082b6004803603810190610826919061490e565b611679565b6040516108389190614812565b60405180910390f35b34801561084d57600080fd5b506108566116c1565b005b34801561086457600080fd5b5061087f600480360381019061087a9190614967565b611749565b005b34801561088d57600080fd5b506108a860048036038101906108a3919061490e565b611889565b005b3480156108b657600080fd5b506108bf6119c5565b005b3480156108cd57600080fd5b506108e860048036038101906108e391906149ba565b611a5e565b005b3480156108f657600080fd5b506108ff611b35565b005b34801561090d57600080fd5b50610916611c1c565b60405161092391906148bc565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e91906149fa565b611c46565b005b34801561096157600080fd5b5061096a611cdf565b6040516109779190614812565b60405180910390f35b34801561098c57600080fd5b50610995611ce5565b6040516109a29190614693565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd91906149ba565b611d77565b005b3480156109e057600080fd5b506109e9611e90565b6040516109f69190614812565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614713565b611e96565b005b348015610a3457600080fd5b50610a3d611f7a565b604051610a4a9190614812565b60405180910390f35b348015610a5f57600080fd5b50610a7a6004803603810190610a759190614713565b611f80565b604051610a87919061476e565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab2919061490e565b611f9e565b604051610ac4919061476e565b60405180910390f35b348015610ad957600080fd5b50610ae2611fbe565b604051610aef919061476e565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a91906149ba565b611fd1565b005b348015610b2d57600080fd5b50610b486004803603810190610b43919061482d565b6120f6565b005b348015610b5657600080fd5b50610b716004803603810190610b6c9190614b6f565b612205565b005b348015610b7f57600080fd5b50610b88612316565b604051610b95919061476e565b60405180910390f35b348015610baa57600080fd5b50610bb3612329565b604051610bc09190614812565b60405180910390f35b348015610bd557600080fd5b50610bde61232f565b604051610beb919061476e565b60405180910390f35b348015610c0057600080fd5b50610c1b6004803603810190610c16919061482d565b612342565b005b348015610c2957600080fd5b50610c3261248e565b604051610c3f9190614812565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a9190614bcb565b612494565b604051610c7c9190614812565b60405180910390f35b348015610c9157600080fd5b50610c9a61251b565b005b348015610ca857600080fd5b50610cb16125ea565b604051610cbe9190614812565b60405180910390f35b348015610cd357600080fd5b50610cdc6125f0565b604051610ce99190614812565b60405180910390f35b348015610cfe57600080fd5b50610d196004803603810190610d14919061490e565b6125f6565b005b348015610d2757600080fd5b50610d306126ee565b604051610d3d9190614812565b60405180910390f35b348015610d5257600080fd5b50610d6d6004803603810190610d68919061490e565b6126f4565b604051610d7a919061476e565b60405180910390f35b348015610d8f57600080fd5b50610d98612714565b604051610da59190614812565b60405180910390f35b348015610dba57600080fd5b50610dc361271a565b604051610dd09190614812565b60405180910390f35b348015610de557600080fd5b50610e006004803603810190610dfb919061482d565b612720565b005b610e0a6129f0565b73ffffffffffffffffffffffffffffffffffffffff16610e28611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7590614c57565b60405180910390fd5b8160168190555080601781905550601754601654610e9c9190614ca6565b60158190555060196015541115610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90614d48565b60405180910390fd5b5050565b606060038054610efb90614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2790614d97565b8015610f745780601f10610f4957610100808354040283529160200191610f74565b820191906000526020600020905b815481529060010190602001808311610f5757829003601f168201915b5050505050905090565b6000610f92610f8b6129f0565b84846129f8565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61070881565b600a5481565b60185481565b610fe46129f0565b73ffffffffffffffffffffffffffffffffffffffff16611002611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614c57565b60405180910390fd5b670de0b6b3a76400006103e8600161106e610fc0565b6110789190614dc9565b6110829190614e52565b61108c9190614e52565b8110156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614ef5565b60405180910390fd5b670de0b6b3a7640000816110e29190614dc9565b60078190555050565b60006110f8848484612bc3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111436129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90614f87565b60405180910390fd5b6111d7856111cf6129f0565b8584036129f8565b60019150509392505050565b600c5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b61122a6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611248611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590614c57565b60405180910390fd5b601160009054906101000a900460ff16156112d3576000601160006101000a81548160ff0219169083151502179055506112ef565b6001601160006101000a81548160ff0219169083151502179055505b565b60006012905090565b600061139c6113076129f0565b8484600160006113156129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113979190614ca6565b6129f8565b6001905092915050565b6113ae6129f0565b73ffffffffffffffffffffffffffffffffffffffff166113cc611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141990614c57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561148a573d6000803e3d6000fd5b50565b7f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde781565b600f60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6115786129f0565b73ffffffffffffffffffffffffffffffffffffffff16611596611c1c565b73ffffffffffffffffffffffffffffffffffffffff16146115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e390614c57565b60405180910390fd5b816013819055508060148190555060145460135461160a9190614ca6565b60128190555060146012541115611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90614ff3565b60405180910390fd5b5050565b60155481565b60195481565b600f60039054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116c96129f0565b73ffffffffffffffffffffffffffffffffffffffff166116e7611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614c57565b60405180910390fd5b6117476000613a29565b565b6117516129f0565b73ffffffffffffffffffffffffffffffffffffffff1661176f611c1c565b73ffffffffffffffffffffffffffffffffffffffff16146117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90614c57565b60405180910390fd5b61025883101561180a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180190615085565b60405180910390fd5b6103e8821115801561181d575060008210155b61185c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185390615117565b60405180910390fd5b82600c8190555081600a8190555080600b60006101000a81548160ff021916908315150217905550505050565b6118916129f0565b73ffffffffffffffffffffffffffffffffffffffff166118af611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc90614c57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119cd6129f0565b73ffffffffffffffffffffffffffffffffffffffff166119eb611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890614c57565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b611a666129f0565b73ffffffffffffffffffffffffffffffffffffffff16611a84611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190614c57565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b3d6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611b5b611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890614c57565b60405180910390fd5b6001600f60026101000a81548160ff0219169083151502179055506001600f60036101000a81548160ff02191690831515021790555042600d819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c4e6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614c57565b60405180910390fd5b80600f60036101000a81548160ff02191690831515021790555050565b60145481565b606060048054611cf490614d97565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2090614d97565b8015611d6d5780601f10611d4257610100808354040283529160200191611d6d565b820191906000526020600020905b815481529060010190602001808311611d5057829003601f168201915b5050505050905090565b611d7f6129f0565b73ffffffffffffffffffffffffffffffffffffffff16611d9d611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90614c57565b60405180910390fd5b7f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e79906151a9565b60405180910390fd5b611e8c8282613aef565b5050565b600e5481565b600060016000611ea46129f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f589061523b565b60405180910390fd5b611f75611f6c6129f0565b848484036129f8565b505050565b600d5481565b6000611f94611f8d6129f0565b8484612bc3565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600f60029054906101000a900460ff1681565b611fd96129f0565b73ffffffffffffffffffffffffffffffffffffffff16611ff7611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490614c57565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120ea919061476e565b60405180910390a25050565b6120fe6129f0565b73ffffffffffffffffffffffffffffffffffffffff1661211c611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990614c57565b60405180910390fd5b670de0b6b3a76400006103e86005612188610fc0565b6121929190614dc9565b61219c9190614e52565b6121a69190614e52565b8110156121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df906152cd565b60405180910390fd5b670de0b6b3a7640000816121fc9190614dc9565b60098190555050565b61220d6129f0565b73ffffffffffffffffffffffffffffffffffffffff1661222b611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227890614c57565b60405180910390fd5b60005b82518110156123115781601d60008584815181106122a5576122a46152ed565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806123099061531c565b915050612284565b505050565b601160009054906101000a900460ff1681565b60075481565b600f60019054906101000a900460ff1681565b61234a6129f0565b73ffffffffffffffffffffffffffffffffffffffff16612368611c1c565b73ffffffffffffffffffffffffffffffffffffffff16146123be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b590614c57565b60405180910390fd5b61271060016123cb610fc0565b6123d59190614dc9565b6123df9190614e52565b811015612421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612418906153d7565b60405180910390fd5b6103e8600561242e610fc0565b6124389190614dc9565b6124429190614e52565b811115612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90615469565b60405180910390fd5b8060088190555050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125236129f0565b73ffffffffffffffffffffffffffffffffffffffff16612541611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90614c57565b60405180910390fd5b600f60019054906101000a900460ff16156125cc576000600f60016101000a81548160ff0219169083151502179055506125e8565b6001600f60016101000a81548160ff0219169083151502179055505b565b60085481565b60135481565b6125fe6129f0565b73ffffffffffffffffffffffffffffffffffffffff1661261c611c1c565b73ffffffffffffffffffffffffffffffffffffffff1614612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614c57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d9906154fb565b60405180910390fd5b6126eb81613a29565b50565b60165481565b601d6020528060005260406000206000915054906101000a900460ff1681565b60175481565b60095481565b6127286129f0565b73ffffffffffffffffffffffffffffffffffffffff16612746611c1c565b73ffffffffffffffffffffffffffffffffffffffff161461279c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279390614c57565b60405180910390fd5b610708600e546127ac9190614ca6565b42116127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e490615567565b60405180910390fd5b6103e8811115612832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612829906155f9565b60405180910390fd5b42600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde76040518263ffffffff1660e01b815260040161289491906148bc565b602060405180830381865afa1580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d5919061562e565b905060006129006127106128f28585613b9090919063ffffffff16565b613ba690919063ffffffff16565b90506000811115612939576129387f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde761dead83613bbc565b5b60007f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde790508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129a657600080fd5b505af11580156129ba573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a150505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f906156cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf9061575f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb69190614812565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a906157f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9a90615883565b60405180910390fd5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d27906158ef565b60405180910390fd5b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db49061595b565b60405180910390fd5b6000811415612dd757612dd283836000613bbc565b613a24565b600f60009054906101000a900460ff16156134b557612df4611c1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e625750612e32611c1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e9b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ed5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eee5750600560149054906101000a900460ff16155b156134b457600f60029054906101000a900460ff16158015612f1d5750600f60019054906101000a900460ff16155b1561300357601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fc35750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906159c7565b60405180910390fd5b5b601160009054906101000a900460ff16156131cb57613020611c1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156130a757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130ff57507f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131ca5743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317c90615a7f565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326e5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613315576007548111156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af90615b11565b60405180910390fd5b6009546132c483611679565b826132cf9190614ca6565b1115613310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330790615b7d565b60405180910390fd5b6134b3565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133b85750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340757600754811115613402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f990615c0f565b60405180910390fd5b6134b2565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134b15760095461346483611679565b8261346f9190614ca6565b11156134b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134a790615b7d565b60405180910390fd5b5b5b5b5b5b60006134c030611679565b9050600060085482101590508080156134e55750600f60039054906101000a900460ff165b80156134fe5750600560149054906101000a900460ff16155b80156135545750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135aa5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136005750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613644576001600560146101000a81548160ff021916908315150217905550613628613e3d565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156136aa5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156136c25750600b60009054906101000a900460ff165b80156136dd5750600c54600d546136d99190614ca6565b4210155b80156137335750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561374157613740614073565b5b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137f75750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561380157600090505b60008115613a1457601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386457506000601554115b156138fe57613891606461388360155488613b9090919063ffffffff16565b613ba690919063ffffffff16565b9050601554601654826138a49190614dc9565b6138ae9190614e52565b601860008282546138bf9190614ca6565b92505081905550601554601754826138d79190614dc9565b6138e19190614e52565b601960008282546138f29190614ca6565b925050819055506139f0565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561395957506000601254115b156139ef57613986606461397860125488613b9090919063ffffffff16565b613ba690919063ffffffff16565b9050601254601354826139999190614dc9565b6139a39190614e52565b601860008282546139b49190614ca6565b92505081905550601254601454826139cc9190614dc9565b6139d69190614e52565b601960008282546139e79190614ca6565b925050819055505b5b6000811115613a0557613a04873083613bbc565b5b8085613a119190615c2f565b94505b613a1f878787613bbc565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613b9e9190614dc9565b905092915050565b60008183613bb49190614e52565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c23906157f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9390615883565b60405180910390fd5b613ca7838383614232565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2490615cd5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613dc09190614ca6565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e249190614812565b60405180910390a3613e37848484614237565b50505050565b6000613e4830611679565b90506000601954601854613e5c9190614ca6565b9050600080831480613e6e5750600082145b15613e7b57505050614071565b6014600854613e8a9190614dc9565b831115613ea3576014600854613ea09190614dc9565b92505b60008260185485613eb49190614dc9565b613ebe9190614e52565b90506000613ee8613ed9600284613ba690919063ffffffff16565b8661423c90919063ffffffff16565b90506000479050613ef882614252565b6000613f0d824761423c90919063ffffffff16565b90506000613f5a613f2a6002601854613ba690919063ffffffff16565b601954613f379190614ca6565b613f4c60195485613b9090919063ffffffff16565b613ba690919063ffffffff16565b905060008183613f6a9190615c2f565b905060006018819055506000601981905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613fc290615d26565b60006040518083038185875af1925050503d8060008114613fff576040519150601f19603f3d011682016040523d82523d6000602084013e614004565b606091505b50508097505060008611801561401a5750600081115b1561406757614029868261448f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260185460405161405e93929190615d3b565b60405180910390a15b5050505050505050505b565b42600d8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde76040518263ffffffff1660e01b81526004016140d591906148bc565b602060405180830381865afa1580156140f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614116919061562e565b90506000614143612710614135600a5485613b9090919063ffffffff16565b613ba690919063ffffffff16565b9050600081111561417c5761417b7f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde761dead83613bbc565b5b60007f0000000000000000000000007587d82804c783b133a2b81ec9fce392f6a7dde790508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141e957600080fd5b505af11580156141fd573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a1505050565b505050565b505050565b6000818361424a9190615c2f565b905092915050565b6000600267ffffffffffffffff81111561426f5761426e614a2c565b5b60405190808252806020026020018201604052801561429d5781602001602082028036833780820191505090505b50905030816000815181106142b5576142b46152ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561435a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437e9190615d87565b81600181518110614392576143916152ed565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143f7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129f8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614459959493929190615ead565b600060405180830381600087803b15801561447357600080fd5b505af1158015614487573d6000803e3d6000fd5b505050505050565b6144ba307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129f8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614504611c1c565b426040518863ffffffff1660e01b815260040161452696959493929190615f07565b60606040518083038185885af1158015614544573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145699190615f68565b5050505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61459781614584565b81146145a257600080fd5b50565b6000813590506145b48161458e565b92915050565b600080604083850312156145d1576145d061457a565b5b60006145df858286016145a5565b92505060206145f0858286016145a5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614634578082015181840152602081019050614619565b83811115614643576000848401525b50505050565b6000601f19601f8301169050919050565b6000614665826145fa565b61466f8185614605565b935061467f818560208601614616565b61468881614649565b840191505092915050565b600060208201905081810360008301526146ad818461465a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146e0826146b5565b9050919050565b6146f0816146d5565b81146146fb57600080fd5b50565b60008135905061470d816146e7565b92915050565b6000806040838503121561472a5761472961457a565b5b6000614738858286016146fe565b9250506020614749858286016145a5565b9150509250929050565b60008115159050919050565b61476881614753565b82525050565b6000602082019050614783600083018461475f565b92915050565b6000819050919050565b60006147ae6147a96147a4846146b5565b614789565b6146b5565b9050919050565b60006147c082614793565b9050919050565b60006147d2826147b5565b9050919050565b6147e2816147c7565b82525050565b60006020820190506147fd60008301846147d9565b92915050565b61480c81614584565b82525050565b60006020820190506148276000830184614803565b92915050565b6000602082840312156148435761484261457a565b5b6000614851848285016145a5565b91505092915050565b6000806000606084860312156148735761487261457a565b5b6000614881868287016146fe565b9350506020614892868287016146fe565b92505060406148a3868287016145a5565b9150509250925092565b6148b6816146d5565b82525050565b60006020820190506148d160008301846148ad565b92915050565b600060ff82169050919050565b6148ed816148d7565b82525050565b600060208201905061490860008301846148e4565b92915050565b6000602082840312156149245761492361457a565b5b6000614932848285016146fe565b91505092915050565b61494481614753565b811461494f57600080fd5b50565b6000813590506149618161493b565b92915050565b6000806000606084860312156149805761497f61457a565b5b600061498e868287016145a5565b935050602061499f868287016145a5565b92505060406149b086828701614952565b9150509250925092565b600080604083850312156149d1576149d061457a565b5b60006149df858286016146fe565b92505060206149f085828601614952565b9150509250929050565b600060208284031215614a1057614a0f61457a565b5b6000614a1e84828501614952565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a6482614649565b810181811067ffffffffffffffff82111715614a8357614a82614a2c565b5b80604052505050565b6000614a96614570565b9050614aa28282614a5b565b919050565b600067ffffffffffffffff821115614ac257614ac1614a2c565b5b602082029050602081019050919050565b600080fd5b6000614aeb614ae684614aa7565b614a8c565b90508083825260208201905060208402830185811115614b0e57614b0d614ad3565b5b835b81811015614b375780614b2388826146fe565b845260208401935050602081019050614b10565b5050509392505050565b600082601f830112614b5657614b55614a27565b5b8135614b66848260208601614ad8565b91505092915050565b60008060408385031215614b8657614b8561457a565b5b600083013567ffffffffffffffff811115614ba457614ba361457f565b5b614bb085828601614b41565b9250506020614bc185828601614952565b9150509250929050565b60008060408385031215614be257614be161457a565b5b6000614bf0858286016146fe565b9250506020614c01858286016146fe565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c41602083614605565b9150614c4c82614c0b565b602082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cb182614584565b9150614cbc83614584565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614cf157614cf0614c77565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614d32601d83614605565b9150614d3d82614cfc565b602082019050919050565b60006020820190508181036000830152614d6181614d25565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614daf57607f821691505b60208210811415614dc357614dc2614d68565b5b50919050565b6000614dd482614584565b9150614ddf83614584565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e1857614e17614c77565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e5d82614584565b9150614e6883614584565b925082614e7857614e77614e23565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614edf602f83614605565b9150614eea82614e83565b604082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f71602883614605565b9150614f7c82614f15565b604082019050919050565b60006020820190508181036000830152614fa081614f64565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614fdd601d83614605565b9150614fe882614fa7565b602082019050919050565b6000602082019050818103600083015261500c81614fd0565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061506f603383614605565b915061507a82615013565b604082019050919050565b6000602082019050818103600083015261509e81615062565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000615101603083614605565b915061510c826150a5565b604082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000615193603983614605565b915061519e82615137565b604082019050919050565b600060208201905081810360008301526151c281615186565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615225602583614605565b9150615230826151c9565b604082019050919050565b6000602082019050818103600083015261525481615218565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006152b7602483614605565b91506152c28261525b565b604082019050919050565b600060208201905081810360008301526152e6816152aa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061532782614584565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561535a57615359614c77565b5b600182019050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006153c1603583614605565b91506153cc82615365565b604082019050919050565b600060208201905081810360008301526153f0816153b4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615453603483614605565b915061545e826153f7565b604082019050919050565b6000602082019050818103600083015261548281615446565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154e5602683614605565b91506154f082615489565b604082019050919050565b60006020820190508181036000830152615514816154d8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000615551602083614605565b915061555c8261551b565b602082019050919050565b6000602082019050818103600083015261558081615544565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006155e3602a83614605565b91506155ee82615587565b604082019050919050565b60006020820190508181036000830152615612816155d6565b9050919050565b6000815190506156288161458e565b92915050565b6000602082840312156156445761564361457a565b5b600061565284828501615619565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006156b7602483614605565b91506156c28261565b565b604082019050919050565b600060208201905081810360008301526156e6816156aa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615749602283614605565b9150615754826156ed565b604082019050919050565b600060208201905081810360008301526157788161573c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006157db602583614605565b91506157e68261577f565b604082019050919050565b6000602082019050818103600083015261580a816157ce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061586d602383614605565b915061587882615811565b604082019050919050565b6000602082019050818103600083015261589c81615860565b9050919050565b7f53656e6465722043616e6e6f7420626520626f74000000000000000000000000600082015250565b60006158d9601483614605565b91506158e4826158a3565b602082019050919050565b60006020820190508181036000830152615908816158cc565b9050919050565b7f526563697069656e742043616e6e6f7420626520626f74000000000000000000600082015250565b6000615945601783614605565b91506159508261590f565b602082019050919050565b6000602082019050818103600083015261597481615938565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159b1601683614605565b91506159bc8261597b565b602082019050919050565b600060208201905081810360008301526159e0816159a4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a69604983614605565b9150615a74826159e7565b606082019050919050565b60006020820190508181036000830152615a9881615a5c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615afb603583614605565b9150615b0682615a9f565b604082019050919050565b60006020820190508181036000830152615b2a81615aee565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b67601383614605565b9150615b7282615b31565b602082019050919050565b60006020820190508181036000830152615b9681615b5a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615bf9603683614605565b9150615c0482615b9d565b604082019050919050565b60006020820190508181036000830152615c2881615bec565b9050919050565b6000615c3a82614584565b9150615c4583614584565b925082821015615c5857615c57614c77565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615cbf602683614605565b9150615cca82615c63565b604082019050919050565b60006020820190508181036000830152615cee81615cb2565b9050919050565b600081905092915050565b50565b6000615d10600083615cf5565b9150615d1b82615d00565b600082019050919050565b6000615d3182615d03565b9150819050919050565b6000606082019050615d506000830186614803565b615d5d6020830185614803565b615d6a6040830184614803565b949350505050565b600081519050615d81816146e7565b92915050565b600060208284031215615d9d57615d9c61457a565b5b6000615dab84828501615d72565b91505092915050565b6000819050919050565b6000615dd9615dd4615dcf84615db4565b614789565b614584565b9050919050565b615de981615dbe565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615e24816146d5565b82525050565b6000615e368383615e1b565b60208301905092915050565b6000602082019050919050565b6000615e5a82615def565b615e648185615dfa565b9350615e6f83615e0b565b8060005b83811015615ea0578151615e878882615e2a565b9750615e9283615e42565b925050600181019050615e73565b5085935050505092915050565b600060a082019050615ec26000830188614803565b615ecf6020830187615de0565b8181036040830152615ee18186615e4f565b9050615ef060608301856148ad565b615efd6080830184614803565b9695505050505050565b600060c082019050615f1c60008301896148ad565b615f296020830188614803565b615f366040830187615de0565b615f436060830186615de0565b615f5060808301856148ad565b615f5d60a0830184614803565b979650505050505050565b600080600060608486031215615f8157615f8061457a565b5b6000615f8f86828701615619565b9350506020615fa086828701615619565b9250506040615fb186828701615619565b915050925092509256fea26469706673582212203c54c408c5222ee91950325238e64f14bddca422600c4a14a3d95900f884a20964736f6c634300080a0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000047cb412bd0025e6e318dca47fd2f954123eab38

-----Decoded View---------------
Arg [0] : _uniswapV2RouterAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _taxwallet (address): 0x047cb412bD0025E6e318dCa47FD2F954123eab38

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000047cb412bd0025e6e318dca47fd2f954123eab38


Deployed Bytecode Sourcemap

32623:18832:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39613:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9817:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12135:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32701:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10943:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33158:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32980:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33825:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38379:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12829:531;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33068:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32832:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33036:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37633:218;;;;;;;;;;;;;:::i;:::-;;10783:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13769:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51125:116;;;:::i;:::-;;32759:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33265:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40947:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40811:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39296:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33718:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33865:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33363:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11114:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2932:105;;;;;;;;;;;;;:::i;:::-;;48785:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40637:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37511:83;;;;;;;;;;;;;:::i;:::-;;38925:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37094:187;;;;;;;;;;;;;:::i;:::-;;2281:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39188:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33685:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10038:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40127:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33221:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14571:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33120:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11504:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34263:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33331:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39937:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38661:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51247:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33573:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32865:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33305:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37921:450;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33614:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11785:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37287:174;;;;;;;;;;;;;:::i;:::-;;32907:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33648:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3192:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33753:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34348:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33791:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32947:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50107:1010;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39613:316;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39749:13:::1;39730:16;:32;;;;39786:7;39773:10;:20;;;;39839:10;;39820:16;;:29;;;;:::i;:::-;39804:13;:45;;;;39885:2;39868:13;;:19;;39860:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39613:316:::0;;:::o;9817:102::-;9873:13;9906:5;9899:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9817:102;:::o;12135:212::-;12256:4;12278:39;12287:12;:10;:12::i;:::-;12301:7;12310:6;12278:8;:39::i;:::-;12335:4;12328:11;;12135:212;;;;:::o;32701:51::-;;;:::o;10943:108::-;11004:7;11031:12;;11024:19;;10943:108;:::o;33158:56::-;33204:10;33158:56;:::o;32980:36::-;;;;:::o;33825:33::-;;;;:::o;38379:274::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38515:4:::1;38508:3;38503:1;38487:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38486:25;;;;:::i;:::-;38485:34;;;;:::i;:::-;38475:6;:44;;38453:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38638:6;38628;:17;;;;:::i;:::-;38605:20;:40;;;;38379:274:::0;:::o;12829:531::-;12971:4;12988:36;12998:6;13006:9;13017:6;12988:9;:36::i;:::-;13037:24;13064:11;:19;13076:6;13064:19;;;;;;;;;;;;;;;:33;13084:12;:10;:12::i;:::-;13064:33;;;;;;;;;;;;;;;;13037:60;;13150:6;13130:16;:26;;13108:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;13260:57;13269:6;13277:12;:10;:12::i;:::-;13310:6;13291:16;:25;13260:8;:57::i;:::-;13348:4;13341:11;;;12829:531;;;;;:::o;33068:45::-;;;;:::o;32832:24::-;;;;;;;;;;;;;:::o;33036:25::-;;;;;;;;;;;;;:::o;37633:218::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37694:20:::1;;;;;;;;;;;37691:153;;;37759:5;37736:20;;:28;;;;;;;;;;;;;;;;;;37691:153;;;37828:4;37805:20;;:27;;;;;;;;;;;;;;;;;;37691:153;37633:218::o:0;10783:95::-;10843:5;10868:2;10861:9;;10783:95;:::o;13769:299::-;13886:4;13908:130;13931:12;:10;:12::i;:::-;13958:7;14017:10;13980:11;:25;13992:12;:10;:12::i;:::-;13980:25;;;;;;;;;;;;;;;:34;14006:7;13980:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13908:8;:130::i;:::-;14056:4;14049:11;;13769:299;;;;:::o;51125:116::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51191:9:::1;;;;;;;;;;;51183:27;;:50;51211:21;51183:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51125:116::o:0;32759:38::-;;;:::o;33265:33::-;;;;;;;;;;;;;:::o;40947:184::-;41054:4;41083:31;:40;41115:7;41083:40;;;;;;;;;;;;;;;;;;;;;;;;;41076:47;;40947:184;;;:::o;40811:128::-;40879:4;40903:19;:28;40923:7;40903:28;;;;;;;;;;;;;;;;;;;;;;;;;40896:35;;40811:128;;;:::o;39296:309::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39430:13:::1;39412:15;:31;;;;39466:7;39454:9;:19;;;;39517:9;;39499:15;;:27;;;;:::i;:::-;39484:12;:42;;;;39561:2;39545:12;;:18;;39537:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39296:309:::0;;:::o;33718:28::-;;;;:::o;33865:27::-;;;;:::o;33363:23::-;;;;;;;;;;;;;:::o;11114:177::-;11233:7;11265:9;:18;11275:7;11265:18;;;;;;;;;;;;;;;;11258:25;;11114:177;;;:::o;2932:105::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2999:30:::1;3026:1;2999:18;:30::i;:::-;2932:105::o:0;48785:555::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48987:3:::1;48964:19;:26;;48942:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;49114:4;49102:8;:16;;:33;;;;;49134:1;49122:8;:13;;49102:33;49080:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;49240:19;49222:15;:37;;;;49289:8;49270:16;:27;;;;49324:8;49308:13;;:24;;;;;;;;;;;;;;;;;;48785:555:::0;;;:::o;40637:166::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40750:9:::1;;;;;;;;;;;40719:41;;40736:12;40719:41;;;;;;;;;;;;40783:12;40771:9;;:24;;;;;;;;;;;;;;;;;;40637:166:::0;:::o;37511:83::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37581:5:::1;37564:14;;:22;;;;;;;;;;;;;;;;;;37511:83::o:0;38925:167::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39080:4:::1;39038:31;:39;39070:6;39038:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38925:167:::0;;:::o;37094:187::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37165:4:::1;37149:13;;:20;;;;;;;;;;;;;;;;;;37194:4;37180:11;;:18;;;;;;;;;;;;;;;;;;37226:15;37209:14;:32;;;;37257:16;;;;;;;;;;37094:187::o:0;2281:87::-;2327:7;2354:6;;;;;;;;;;;2347:13;;2281:87;:::o;39188:100::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39273:7:::1;39259:11;;:21;;;;;;;;;;;;;;;;;;39188:100:::0;:::o;33685:24::-;;;;:::o;10038:106::-;10096:13;10129:7;10122:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10038:106;:::o;40127:306::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40273:13:::1;40265:21;;:4;:21;;;;40243:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;40384:41;40413:4;40419:5;40384:28;:41::i;:::-;40127:306:::0;;:::o;33221:35::-;;;;:::o;14571:436::-;14691:24;14718:11;:25;14730:12;:10;:12::i;:::-;14718:25;;;;;;;;;;;;;;;:34;14744:7;14718:34;;;;;;;;;;;;;;;;14691:61;;14805:15;14785:16;:35;;14763:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14921:67;14930:12;:10;:12::i;:::-;14944:7;14972:15;14953:16;:34;14921:8;:67::i;:::-;14680:327;14571:436;;:::o;33120:29::-;;;;:::o;11504:218::-;11628:4;11650:42;11660:12;:10;:12::i;:::-;11674:9;11685:6;11650:9;:42::i;:::-;11710:4;11703:11;;11504:218;;;;:::o;34263:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33331:25::-;;;;;;;;;;;;;:::o;39937:182::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40053:8:::1;40022:19;:28;40042:7;40022:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40093:7;40077:34;;;40102:8;40077:34;;;;;;:::i;:::-;;;;;;;;39937:182:::0;;:::o;38661:256::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38801:4:::1;38793;38788:1;38772:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38771:26;;;;:::i;:::-;38770:35;;;;:::i;:::-;38760:6;:45;;38738:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38902:6;38892;:17;;;;:::i;:::-;38880:9;:29;;;;38661:256:::0;:::o;51247:205::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51347:6:::1;51343:94;51358:6;:13;51356:1;:15;51343:94;;;51421:4;51397:10;:21;51408:6;51415:1;51408:9;;;;;;;;:::i;:::-;;;;;;;;51397:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;51372:3;;;;;:::i;:::-;;;;51343:94;;;;51247:205:::0;;:::o;33573:32::-;;;;;;;;;;;;;:::o;32865:35::-;;;;:::o;33305:19::-;;;;;;;;;;;;;:::o;37921:450::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38084:3:::1;38079:1;38063:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38062:25;;;;:::i;:::-;38049:9;:38;;38027:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38236:3;38231:1;38215:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38214:25;;;;:::i;:::-;38201:9;:38;;38179:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38351:9;38330:18;:30;;;;37921:450:::0;:::o;33614:27::-;;;;:::o;11785:203::-;11921:7;11953:11;:18;11965:5;11953:18;;;;;;;;;;;;;;;:27;11972:7;11953:27;;;;;;;;;;;;;;;;11946:34;;11785:203;;;;:::o;37287:174::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37342:7:::1;;;;;;;;;;;37339:115;;;37375:5;37365:7;;:15;;;;;;;;;;;;;;;;;;37339:115;;;37438:4;37428:7;;:14;;;;;;;;;;;;;;;;;;37339:115;37287:174::o:0;32907:33::-;;;;:::o;33648:30::-;;;;:::o;3192:240::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3317:1:::1;3297:22;;:8;:22;;;;3275:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3396:28;3415:8;3396:18;:28::i;:::-;3192:240:::0;:::o;33753:31::-;;;;:::o;34348:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;33791:25::-;;;;:::o;32947:24::-;;;;:::o;50107:1010::-;2512:12;:10;:12::i;:::-;2501:23;;:7;:5;:7::i;:::-;:23;;;2493:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33204:10:::1;50256:20;;:42;;;;:::i;:::-;50238:15;:60;50216:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;50388:4;50377:7;:15;;50369:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50473:15;50450:20;:38;;;;50543:28;50574:4;:14;;;50589:13;50574:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50543:60;;50653:20;50676:44;50714:5;50676:33;50701:7;50676:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;50653:67;;50840:1;50825:12;:16;50821:110;;;50858:61;50874:13;50897:6;50906:12;50858:15;:61::i;:::-;50821:110;51006:19;51043:13;51006:51;;51068:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51095:14;;;;;;;;;;50205:912;;;50107:1010:::0;:::o;929:98::-;982:7;1009:10;1002:17;;929:98;:::o;17391:380::-;17544:1;17527:19;;:5;:19;;;;17519:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17625:1;17606:21;;:7;:21;;;;17598:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17709:6;17679:11;:18;17691:5;17679:18;;;;;;;;;;;;;;;:27;17698:7;17679:27;;;;;;;;;;;;;;;:36;;;;17747:7;17731:32;;17740:5;17731:32;;;17756:6;17731:32;;;;;;:::i;:::-;;;;;;;;17391:380;;;:::o;41189:4984::-;41337:1;41321:18;;:4;:18;;;;41313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41414:1;41400:16;;:2;:16;;;;41392:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41476:10;:16;41487:4;41476:16;;;;;;;;;;;;;;;;;;;;;;;;;41475:17;41467:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41537:10;:14;41548:2;41537:14;;;;;;;;;;;;;;;;;;;;;;;;;41536:15;41528:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41606:1;41596:6;:11;41592:93;;;41624:28;41640:4;41646:2;41650:1;41624:15;:28::i;:::-;41667:7;;41592:93;41701:14;;;;;;;;;;;41697:2499;;;41762:7;:5;:7::i;:::-;41754:15;;:4;:15;;;;:49;;;;;41796:7;:5;:7::i;:::-;41790:13;;:2;:13;;;;41754:49;:86;;;;;41838:1;41824:16;;:2;:16;;;;41754:86;:128;;;;;41875:6;41861:21;;:2;:21;;;;41754:128;:158;;;;;41904:8;;;;;;;;;;;41903:9;41754:158;41732:2453;;;41952:13;;;;;;;;;;;41951:14;:26;;;;;41970:7;;;;;;;;;;;41969:8;41951:26;41947:235;;;42036:19;:25;42056:4;42036:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42065:19;:23;42085:2;42065:23;;;;;;;;;;;;;;;;;;;;;;;;;42036:52;42002:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41947:235;42338:20;;;;;;;;;;;42334:641;;;42419:7;:5;:7::i;:::-;42413:13;;:2;:13;;;;:72;;;;;42469:15;42455:30;;:2;:30;;;;42413:72;:129;;;;;42528:13;42514:28;;:2;:28;;;;42413:129;42383:573;;;42706:12;42631:28;:39;42660:9;42631:39;;;;;;;;;;;;;;;;:87;42593:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42920:12;42878:28;:39;42907:9;42878:39;;;;;;;;;;;;;;;:54;;;;42383:573;42334:641;43049:25;:31;43075:4;43049:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43106:31;:35;43138:2;43106:35;;;;;;;;;;;;;;;;;;;;;;;;;43105:36;43049:92;43023:1147;;;43228:20;;43218:6;:30;;43184:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;43436:9;;43419:13;43429:2;43419:9;:13::i;:::-;43410:6;:22;;;;:::i;:::-;:35;;43376:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43023:1147;;;43614:25;:29;43640:2;43614:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43669:31;:37;43701:4;43669:37;;;;;;;;;;;;;;;;;;;;;;;;;43668:38;43614:92;43588:582;;;43793:20;;43783:6;:30;;43749:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;43588:582;;;43950:31;:35;43982:2;43950:35;;;;;;;;;;;;;;;;;;;;;;;;;43945:225;;44070:9;;44053:13;44063:2;44053:9;:13::i;:::-;44044:6;:22;;;;:::i;:::-;:35;;44010:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43945:225;43588:582;43023:1147;41732:2453;41697:2499;44208:28;44239:24;44257:4;44239:9;:24::i;:::-;44208:55;;44276:12;44315:18;;44291:20;:42;;44276:57;;44364:7;:35;;;;;44388:11;;;;;;;;;;;44364:35;:61;;;;;44417:8;;;;;;;;;;;44416:9;44364:61;:110;;;;;44443:25;:31;44469:4;44443:31;;;;;;;;;;;;;;;;;;;;;;;;;44442:32;44364:110;:153;;;;;44492:19;:25;44512:4;44492:25;;;;;;;;;;;;;;;;;;;;;;;;;44491:26;44364:153;:194;;;;;44535:19;:23;44555:2;44535:23;;;;;;;;;;;;;;;;;;;;;;;;;44534:24;44364:194;44346:326;;;44596:4;44585:8;;:15;;;;;;;;;;;;;;;;;;44617:10;:8;:10::i;:::-;44655:5;44644:8;;:16;;;;;;;;;;;;;;;;;;44346:326;44703:8;;;;;;;;;;;44702:9;:55;;;;;44728:25;:29;44754:2;44728:29;;;;;;;;;;;;;;;;;;;;;;;;;44702:55;:85;;;;;44774:13;;;;;;;;;;;44702:85;:153;;;;;44840:15;;44823:14;;:32;;;;:::i;:::-;44804:15;:51;;44702:153;:196;;;;;44873:19;:25;44893:4;44873:25;;;;;;;;;;;;;;;;;;;;;;;;;44872:26;44702:196;44684:282;;;44925:29;:27;:29::i;:::-;44684:282;44978:12;44994:8;;;;;;;;;;;44993:9;44978:24;;45104:19;:25;45124:4;45104:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45133:19;:23;45153:2;45133:23;;;;;;;;;;;;;;;;;;;;;;;;;45104:52;45100:100;;;45183:5;45173:15;;45100:100;45212:12;45317:7;45313:807;;;45369:25;:29;45395:2;45369:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45418:1;45402:13;;:17;45369:50;45365:606;;;45447:34;45477:3;45447:25;45458:13;;45447:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45440:41;;45550:13;;45530:16;;45523:4;:23;;;;:::i;:::-;45522:41;;;;:::i;:::-;45500:18;;:63;;;;;;;:::i;:::-;;;;;;;;45620:13;;45606:10;;45599:4;:17;;;;:::i;:::-;45598:35;;;;:::i;:::-;45582:12;;:51;;;;;;;:::i;:::-;;;;;;;;45365:606;;;45695:25;:31;45721:4;45695:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;45745:1;45730:12;;:16;45695:51;45691:280;;;45774:33;45803:3;45774:24;45785:12;;45774:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45767:40;;45875:12;;45856:15;;45849:4;:22;;;;:::i;:::-;45848:39;;;;:::i;:::-;45826:18;;:61;;;;;;;:::i;:::-;;;;;;;;45943:12;;45930:9;;45923:4;:16;;;;:::i;:::-;45922:33;;;;:::i;:::-;45906:12;;:49;;;;;;;:::i;:::-;;;;;;;;45691:280;45365:606;45998:1;45991:4;:8;45987:91;;;46020:42;46036:4;46050;46057;46020:15;:42::i;:::-;45987:91;46104:4;46094:14;;;;;:::i;:::-;;;45313:807;46132:33;46148:4;46154:2;46158:6;46132:15;:33::i;:::-;41302:4871;;;;41189:4984;;;;:::o;3592:191::-;3666:16;3685:6;;;;;;;;;;;3666:25;;3711:8;3702:6;;:17;;;;;;;;;;;;;;;;;;3766:8;3735:40;;3756:8;3735:40;;;;;;;;;;;;3655:128;3592:191;:::o;40441:188::-;40558:5;40524:25;:31;40550:4;40524:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40615:5;40581:40;;40609:4;40581:40;;;;;;;;;;;;40441:188;;:::o;23004:98::-;23062:7;23093:1;23089;:5;;;;:::i;:::-;23082:12;;23004:98;;;;:::o;23403:::-;23461:7;23492:1;23488;:5;;;;:::i;:::-;23481:12;;23403:98;;;;:::o;15497:770::-;15655:1;15637:20;;:6;:20;;;;15629:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15739:1;15718:23;;:9;:23;;;;15710:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15794:47;15815:6;15823:9;15834:6;15794:20;:47::i;:::-;15854:21;15878:9;:17;15888:6;15878:17;;;;;;;;;;;;;;;;15854:41;;15945:6;15928:13;:23;;15906:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16089:6;16073:13;:22;16053:9;:17;16063:6;16053:17;;;;;;;;;;;;;;;:42;;;;16141:6;16117:9;:20;16127:9;16117:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16182:9;16165:35;;16174:6;16165:35;;;16193:6;16165:35;;;;;;:::i;:::-;;;;;;;;16213:46;16233:6;16241:9;16252:6;16213:19;:46::i;:::-;15618:649;15497:770;;;:::o;47299:1478::-;47338:23;47364:24;47382:4;47364:9;:24::i;:::-;47338:50;;47399:25;47448:12;;47427:18;;:33;;;;:::i;:::-;47399:61;;47471:12;47519:1;47500:15;:20;:46;;;;47545:1;47524:17;:22;47500:46;47496:85;;;47563:7;;;;;47496:85;47636:2;47615:18;;:23;;;;:::i;:::-;47597:15;:41;47593:115;;;47694:2;47673:18;;:23;;;;:::i;:::-;47655:41;;47593:115;47722:23;47802:17;47767:18;;47749:15;:36;;;;:::i;:::-;47748:71;;;;:::i;:::-;47722:97;;47874:26;47903:43;47923:22;47943:1;47923:15;:19;;:22;;;;:::i;:::-;47903:15;:19;;:43;;;;:::i;:::-;47874:72;;47959:25;47987:21;47959:49;;48021:36;48038:18;48021:16;:36::i;:::-;48070:18;48091:44;48117:17;48091:21;:25;;:44;;;;:::i;:::-;48070:65;;48190:17;48210:74;48258:25;48281:1;48258:18;;:22;;:25;;;;:::i;:::-;48243:12;;:40;;;;:::i;:::-;48210:28;48225:12;;48210:10;:14;;:28;;;;:::i;:::-;:32;;:74;;;;:::i;:::-;48190:94;;48297:23;48336:9;48323:10;:22;;;;:::i;:::-;48297:48;;48379:1;48358:18;:22;;;;48406:1;48391:12;:16;;;;48442:9;;;;;;;;;;;48434:23;;48465:9;48434:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48420:59;;;;;48514:1;48496:15;:19;:42;;;;;48537:1;48519:15;:19;48496:42;48492:278;;;48555:46;48568:15;48585;48555:12;:46::i;:::-;48621:137;48654:18;48691:15;48725:18;;48621:137;;;;;;;;:::i;:::-;;;;;;;;48492:278;47327:1450;;;;;;;;;47299:1478;:::o;49348:751::-;49424:15;49407:14;:32;;;;49494:28;49525:4;:14;;;49540:13;49525:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49494:60;;49604:20;49627:77;49688:5;49627:42;49652:16;;49627:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;49604:100;;49824:1;49809:12;:16;49805:110;;;49842:61;49858:13;49881:6;49890:12;49842:15;:61::i;:::-;49805:110;49990:19;50027:13;49990:51;;50052:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50079:12;;;;;;;;;;49396:703;;;49348:751::o;18371:125::-;;;;:::o;19100:124::-;;;;:::o;22647:98::-;22705:7;22736:1;22732;:5;;;;:::i;:::-;22725:12;;22647:98;;;;:::o;46181:589::-;46307:21;46345:1;46331:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46307:40;;46376:4;46358;46363:1;46358:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46402:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46392:4;46397:1;46392:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46437:62;46454:4;46469:15;46487:11;46437:8;:62::i;:::-;46538:15;:66;;;46619:11;46645:1;46689:4;46716;46736:15;46538:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46236:534;46181:589;:::o;46778:513::-;46926:62;46943:4;46958:15;46976:11;46926:8;:62::i;:::-;47031:15;:31;;;47070:9;47103:4;47123:11;47149:1;47192;47235:7;:5;:7::i;:::-;47257:15;47031:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46778:513;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:118::-;6351:24;6369:5;6351:24;:::i;:::-;6346:3;6339:37;6264:118;;:::o;6388:222::-;6481:4;6519:2;6508:9;6504:18;6496:26;;6532:71;6600:1;6589:9;6585:17;6576:6;6532:71;:::i;:::-;6388:222;;;;:::o;6616:86::-;6651:7;6691:4;6684:5;6680:16;6669:27;;6616:86;;;:::o;6708:112::-;6791:22;6807:5;6791:22;:::i;:::-;6786:3;6779:35;6708:112;;:::o;6826:214::-;6915:4;6953:2;6942:9;6938:18;6930:26;;6966:67;7030:1;7019:9;7015:17;7006:6;6966:67;:::i;:::-;6826:214;;;;:::o;7046:329::-;7105:6;7154:2;7142:9;7133:7;7129:23;7125:32;7122:119;;;7160:79;;:::i;:::-;7122:119;7280:1;7305:53;7350:7;7341:6;7330:9;7326:22;7305:53;:::i;:::-;7295:63;;7251:117;7046:329;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:613::-;7716:6;7724;7732;7781:2;7769:9;7760:7;7756:23;7752:32;7749:119;;;7787:79;;:::i;:::-;7749:119;7907:1;7932:53;7977:7;7968:6;7957:9;7953:22;7932:53;:::i;:::-;7922:63;;7878:117;8034:2;8060:53;8105:7;8096:6;8085:9;8081:22;8060:53;:::i;:::-;8050:63;;8005:118;8162:2;8188:50;8230:7;8221:6;8210:9;8206:22;8188:50;:::i;:::-;8178:60;;8133:115;7642:613;;;;;:::o;8261:468::-;8326:6;8334;8383:2;8371:9;8362:7;8358:23;8354:32;8351:119;;;8389:79;;:::i;:::-;8351:119;8509:1;8534:53;8579:7;8570:6;8559:9;8555:22;8534:53;:::i;:::-;8524:63;;8480:117;8636:2;8662:50;8704:7;8695:6;8684:9;8680:22;8662:50;:::i;:::-;8652:60;;8607:115;8261:468;;;;;:::o;8735:323::-;8791:6;8840:2;8828:9;8819:7;8815:23;8811:32;8808:119;;;8846:79;;:::i;:::-;8808:119;8966:1;8991:50;9033:7;9024:6;9013:9;9009:22;8991:50;:::i;:::-;8981:60;;8937:114;8735:323;;;;:::o;9064:117::-;9173:1;9170;9163:12;9187:180;9235:77;9232:1;9225:88;9332:4;9329:1;9322:15;9356:4;9353:1;9346:15;9373:281;9456:27;9478:4;9456:27;:::i;:::-;9448:6;9444:40;9586:6;9574:10;9571:22;9550:18;9538:10;9535:34;9532:62;9529:88;;;9597:18;;:::i;:::-;9529:88;9637:10;9633:2;9626:22;9416:238;9373:281;;:::o;9660:129::-;9694:6;9721:20;;:::i;:::-;9711:30;;9750:33;9778:4;9770:6;9750:33;:::i;:::-;9660:129;;;:::o;9795:311::-;9872:4;9962:18;9954:6;9951:30;9948:56;;;9984:18;;:::i;:::-;9948:56;10034:4;10026:6;10022:17;10014:25;;10094:4;10088;10084:15;10076:23;;9795:311;;;:::o;10112:117::-;10221:1;10218;10211:12;10252:710;10348:5;10373:81;10389:64;10446:6;10389:64;:::i;:::-;10373:81;:::i;:::-;10364:90;;10474:5;10503:6;10496:5;10489:21;10537:4;10530:5;10526:16;10519:23;;10590:4;10582:6;10578:17;10570:6;10566:30;10619:3;10611:6;10608:15;10605:122;;;10638:79;;:::i;:::-;10605:122;10753:6;10736:220;10770:6;10765:3;10762:15;10736:220;;;10845:3;10874:37;10907:3;10895:10;10874:37;:::i;:::-;10869:3;10862:50;10941:4;10936:3;10932:14;10925:21;;10812:144;10796:4;10791:3;10787:14;10780:21;;10736:220;;;10740:21;10354:608;;10252:710;;;;;:::o;10985:370::-;11056:5;11105:3;11098:4;11090:6;11086:17;11082:27;11072:122;;11113:79;;:::i;:::-;11072:122;11230:6;11217:20;11255:94;11345:3;11337:6;11330:4;11322:6;11318:17;11255:94;:::i;:::-;11246:103;;11062:293;10985:370;;;;:::o;11361:678::-;11451:6;11459;11508:2;11496:9;11487:7;11483:23;11479:32;11476:119;;;11514:79;;:::i;:::-;11476:119;11662:1;11651:9;11647:17;11634:31;11692:18;11684:6;11681:30;11678:117;;;11714:79;;:::i;:::-;11678:117;11819:78;11889:7;11880:6;11869:9;11865:22;11819:78;:::i;:::-;11809:88;;11605:302;11946:2;11972:50;12014:7;12005:6;11994:9;11990:22;11972:50;:::i;:::-;11962:60;;11917:115;11361:678;;;;;:::o;12045:474::-;12113:6;12121;12170:2;12158:9;12149:7;12145:23;12141:32;12138:119;;;12176:79;;:::i;:::-;12138:119;12296:1;12321:53;12366:7;12357:6;12346:9;12342:22;12321:53;:::i;:::-;12311:63;;12267:117;12423:2;12449:53;12494:7;12485:6;12474:9;12470:22;12449:53;:::i;:::-;12439:63;;12394:118;12045:474;;;;;:::o;12525:182::-;12665:34;12661:1;12653:6;12649:14;12642:58;12525:182;:::o;12713:366::-;12855:3;12876:67;12940:2;12935:3;12876:67;:::i;:::-;12869:74;;12952:93;13041:3;12952:93;:::i;:::-;13070:2;13065:3;13061:12;13054:19;;12713:366;;;:::o;13085:419::-;13251:4;13289:2;13278:9;13274:18;13266:26;;13338:9;13332:4;13328:20;13324:1;13313:9;13309:17;13302:47;13366:131;13492:4;13366:131;:::i;:::-;13358:139;;13085:419;;;:::o;13510:180::-;13558:77;13555:1;13548:88;13655:4;13652:1;13645:15;13679:4;13676:1;13669:15;13696:305;13736:3;13755:20;13773:1;13755:20;:::i;:::-;13750:25;;13789:20;13807:1;13789:20;:::i;:::-;13784:25;;13943:1;13875:66;13871:74;13868:1;13865:81;13862:107;;;13949:18;;:::i;:::-;13862:107;13993:1;13990;13986:9;13979:16;;13696:305;;;;:::o;14007:179::-;14147:31;14143:1;14135:6;14131:14;14124:55;14007:179;:::o;14192:366::-;14334:3;14355:67;14419:2;14414:3;14355:67;:::i;:::-;14348:74;;14431:93;14520:3;14431:93;:::i;:::-;14549:2;14544:3;14540:12;14533:19;;14192:366;;;:::o;14564:419::-;14730:4;14768:2;14757:9;14753:18;14745:26;;14817:9;14811:4;14807:20;14803:1;14792:9;14788:17;14781:47;14845:131;14971:4;14845:131;:::i;:::-;14837:139;;14564:419;;;:::o;14989:180::-;15037:77;15034:1;15027:88;15134:4;15131:1;15124:15;15158:4;15155:1;15148:15;15175:320;15219:6;15256:1;15250:4;15246:12;15236:22;;15303:1;15297:4;15293:12;15324:18;15314:81;;15380:4;15372:6;15368:17;15358:27;;15314:81;15442:2;15434:6;15431:14;15411:18;15408:38;15405:84;;;15461:18;;:::i;:::-;15405:84;15226:269;15175:320;;;:::o;15501:348::-;15541:7;15564:20;15582:1;15564:20;:::i;:::-;15559:25;;15598:20;15616:1;15598:20;:::i;:::-;15593:25;;15786:1;15718:66;15714:74;15711:1;15708:81;15703:1;15696:9;15689:17;15685:105;15682:131;;;15793:18;;:::i;:::-;15682:131;15841:1;15838;15834:9;15823:20;;15501:348;;;;:::o;15855:180::-;15903:77;15900:1;15893:88;16000:4;15997:1;15990:15;16024:4;16021:1;16014:15;16041:185;16081:1;16098:20;16116:1;16098:20;:::i;:::-;16093:25;;16132:20;16150:1;16132:20;:::i;:::-;16127:25;;16171:1;16161:35;;16176:18;;:::i;:::-;16161:35;16218:1;16215;16211:9;16206:14;;16041:185;;;;:::o;16232:234::-;16372:34;16368:1;16360:6;16356:14;16349:58;16441:17;16436:2;16428:6;16424:15;16417:42;16232:234;:::o;16472:366::-;16614:3;16635:67;16699:2;16694:3;16635:67;:::i;:::-;16628:74;;16711:93;16800:3;16711:93;:::i;:::-;16829:2;16824:3;16820:12;16813:19;;16472:366;;;:::o;16844:419::-;17010:4;17048:2;17037:9;17033:18;17025:26;;17097:9;17091:4;17087:20;17083:1;17072:9;17068:17;17061:47;17125:131;17251:4;17125:131;:::i;:::-;17117:139;;16844:419;;;:::o;17269:227::-;17409:34;17405:1;17397:6;17393:14;17386:58;17478:10;17473:2;17465:6;17461:15;17454:35;17269:227;:::o;17502:366::-;17644:3;17665:67;17729:2;17724:3;17665:67;:::i;:::-;17658:74;;17741:93;17830:3;17741:93;:::i;:::-;17859:2;17854:3;17850:12;17843:19;;17502:366;;;:::o;17874:419::-;18040:4;18078:2;18067:9;18063:18;18055:26;;18127:9;18121:4;18117:20;18113:1;18102:9;18098:17;18091:47;18155:131;18281:4;18155:131;:::i;:::-;18147:139;;17874:419;;;:::o;18299:179::-;18439:31;18435:1;18427:6;18423:14;18416:55;18299:179;:::o;18484:366::-;18626:3;18647:67;18711:2;18706:3;18647:67;:::i;:::-;18640:74;;18723:93;18812:3;18723:93;:::i;:::-;18841:2;18836:3;18832:12;18825:19;;18484:366;;;:::o;18856:419::-;19022:4;19060:2;19049:9;19045:18;19037:26;;19109:9;19103:4;19099:20;19095:1;19084:9;19080:17;19073:47;19137:131;19263:4;19137:131;:::i;:::-;19129:139;;18856:419;;;:::o;19281:238::-;19421:34;19417:1;19409:6;19405:14;19398:58;19490:21;19485:2;19477:6;19473:15;19466:46;19281:238;:::o;19525:366::-;19667:3;19688:67;19752:2;19747:3;19688:67;:::i;:::-;19681:74;;19764:93;19853:3;19764:93;:::i;:::-;19882:2;19877:3;19873:12;19866:19;;19525:366;;;:::o;19897:419::-;20063:4;20101:2;20090:9;20086:18;20078:26;;20150:9;20144:4;20140:20;20136:1;20125:9;20121:17;20114:47;20178:131;20304:4;20178:131;:::i;:::-;20170:139;;19897:419;;;:::o;20322:235::-;20462:34;20458:1;20450:6;20446:14;20439:58;20531:18;20526:2;20518:6;20514:15;20507:43;20322:235;:::o;20563:366::-;20705:3;20726:67;20790:2;20785:3;20726:67;:::i;:::-;20719:74;;20802:93;20891:3;20802:93;:::i;:::-;20920:2;20915:3;20911:12;20904:19;;20563:366;;;:::o;20935:419::-;21101:4;21139:2;21128:9;21124:18;21116:26;;21188:9;21182:4;21178:20;21174:1;21163:9;21159:17;21152:47;21216:131;21342:4;21216:131;:::i;:::-;21208:139;;20935:419;;;:::o;21360:244::-;21500:34;21496:1;21488:6;21484:14;21477:58;21569:27;21564:2;21556:6;21552:15;21545:52;21360:244;:::o;21610:366::-;21752:3;21773:67;21837:2;21832:3;21773:67;:::i;:::-;21766:74;;21849:93;21938:3;21849:93;:::i;:::-;21967:2;21962:3;21958:12;21951:19;;21610:366;;;:::o;21982:419::-;22148:4;22186:2;22175:9;22171:18;22163:26;;22235:9;22229:4;22225:20;22221:1;22210:9;22206:17;22199:47;22263:131;22389:4;22263:131;:::i;:::-;22255:139;;21982:419;;;:::o;22407:224::-;22547:34;22543:1;22535:6;22531:14;22524:58;22616:7;22611:2;22603:6;22599:15;22592:32;22407:224;:::o;22637:366::-;22779:3;22800:67;22864:2;22859:3;22800:67;:::i;:::-;22793:74;;22876:93;22965:3;22876:93;:::i;:::-;22994:2;22989:3;22985:12;22978:19;;22637:366;;;:::o;23009:419::-;23175:4;23213:2;23202:9;23198:18;23190:26;;23262:9;23256:4;23252:20;23248:1;23237:9;23233:17;23226:47;23290:131;23416:4;23290:131;:::i;:::-;23282:139;;23009:419;;;:::o;23434:223::-;23574:34;23570:1;23562:6;23558:14;23551:58;23643:6;23638:2;23630:6;23626:15;23619:31;23434:223;:::o;23663:366::-;23805:3;23826:67;23890:2;23885:3;23826:67;:::i;:::-;23819:74;;23902:93;23991:3;23902:93;:::i;:::-;24020:2;24015:3;24011:12;24004:19;;23663:366;;;:::o;24035:419::-;24201:4;24239:2;24228:9;24224:18;24216:26;;24288:9;24282:4;24278:20;24274:1;24263:9;24259:17;24252:47;24316:131;24442:4;24316:131;:::i;:::-;24308:139;;24035:419;;;:::o;24460:180::-;24508:77;24505:1;24498:88;24605:4;24602:1;24595:15;24629:4;24626:1;24619:15;24646:233;24685:3;24708:24;24726:5;24708:24;:::i;:::-;24699:33;;24754:66;24747:5;24744:77;24741:103;;;24824:18;;:::i;:::-;24741:103;24871:1;24864:5;24860:13;24853:20;;24646:233;;;:::o;24885:240::-;25025:34;25021:1;25013:6;25009:14;25002:58;25094:23;25089:2;25081:6;25077:15;25070:48;24885:240;:::o;25131:366::-;25273:3;25294:67;25358:2;25353:3;25294:67;:::i;:::-;25287:74;;25370:93;25459:3;25370:93;:::i;:::-;25488:2;25483:3;25479:12;25472:19;;25131:366;;;:::o;25503:419::-;25669:4;25707:2;25696:9;25692:18;25684:26;;25756:9;25750:4;25746:20;25742:1;25731:9;25727:17;25720:47;25784:131;25910:4;25784:131;:::i;:::-;25776:139;;25503:419;;;:::o;25928:239::-;26068:34;26064:1;26056:6;26052:14;26045:58;26137:22;26132:2;26124:6;26120:15;26113:47;25928:239;:::o;26173:366::-;26315:3;26336:67;26400:2;26395:3;26336:67;:::i;:::-;26329:74;;26412:93;26501:3;26412:93;:::i;:::-;26530:2;26525:3;26521:12;26514:19;;26173:366;;;:::o;26545:419::-;26711:4;26749:2;26738:9;26734:18;26726:26;;26798:9;26792:4;26788:20;26784:1;26773:9;26769:17;26762:47;26826:131;26952:4;26826:131;:::i;:::-;26818:139;;26545:419;;;:::o;26970:225::-;27110:34;27106:1;27098:6;27094:14;27087:58;27179:8;27174:2;27166:6;27162:15;27155:33;26970:225;:::o;27201:366::-;27343:3;27364:67;27428:2;27423:3;27364:67;:::i;:::-;27357:74;;27440:93;27529:3;27440:93;:::i;:::-;27558:2;27553:3;27549:12;27542:19;;27201:366;;;:::o;27573:419::-;27739:4;27777:2;27766:9;27762:18;27754:26;;27826:9;27820:4;27816:20;27812:1;27801:9;27797:17;27790:47;27854:131;27980:4;27854:131;:::i;:::-;27846:139;;27573:419;;;:::o;27998:182::-;28138:34;28134:1;28126:6;28122:14;28115:58;27998:182;:::o;28186:366::-;28328:3;28349:67;28413:2;28408:3;28349:67;:::i;:::-;28342:74;;28425:93;28514:3;28425:93;:::i;:::-;28543:2;28538:3;28534:12;28527:19;;28186:366;;;:::o;28558:419::-;28724:4;28762:2;28751:9;28747:18;28739:26;;28811:9;28805:4;28801:20;28797:1;28786:9;28782:17;28775:47;28839:131;28965:4;28839:131;:::i;:::-;28831:139;;28558:419;;;:::o;28983:229::-;29123:34;29119:1;29111:6;29107:14;29100:58;29192:12;29187:2;29179:6;29175:15;29168:37;28983:229;:::o;29218:366::-;29360:3;29381:67;29445:2;29440:3;29381:67;:::i;:::-;29374:74;;29457:93;29546:3;29457:93;:::i;:::-;29575:2;29570:3;29566:12;29559:19;;29218:366;;;:::o;29590:419::-;29756:4;29794:2;29783:9;29779:18;29771:26;;29843:9;29837:4;29833:20;29829:1;29818:9;29814:17;29807:47;29871:131;29997:4;29871:131;:::i;:::-;29863:139;;29590:419;;;:::o;30015:143::-;30072:5;30103:6;30097:13;30088:22;;30119:33;30146:5;30119:33;:::i;:::-;30015:143;;;;:::o;30164:351::-;30234:6;30283:2;30271:9;30262:7;30258:23;30254:32;30251:119;;;30289:79;;:::i;:::-;30251:119;30409:1;30434:64;30490:7;30481:6;30470:9;30466:22;30434:64;:::i;:::-;30424:74;;30380:128;30164:351;;;;:::o;30521:223::-;30661:34;30657:1;30649:6;30645:14;30638:58;30730:6;30725:2;30717:6;30713:15;30706:31;30521:223;:::o;30750:366::-;30892:3;30913:67;30977:2;30972:3;30913:67;:::i;:::-;30906:74;;30989:93;31078:3;30989:93;:::i;:::-;31107:2;31102:3;31098:12;31091:19;;30750:366;;;:::o;31122:419::-;31288:4;31326:2;31315:9;31311:18;31303:26;;31375:9;31369:4;31365:20;31361:1;31350:9;31346:17;31339:47;31403:131;31529:4;31403:131;:::i;:::-;31395:139;;31122:419;;;:::o;31547:221::-;31687:34;31683:1;31675:6;31671:14;31664:58;31756:4;31751:2;31743:6;31739:15;31732:29;31547:221;:::o;31774:366::-;31916:3;31937:67;32001:2;31996:3;31937:67;:::i;:::-;31930:74;;32013:93;32102:3;32013:93;:::i;:::-;32131:2;32126:3;32122:12;32115:19;;31774:366;;;:::o;32146:419::-;32312:4;32350:2;32339:9;32335:18;32327:26;;32399:9;32393:4;32389:20;32385:1;32374:9;32370:17;32363:47;32427:131;32553:4;32427:131;:::i;:::-;32419:139;;32146:419;;;:::o;32571:224::-;32711:34;32707:1;32699:6;32695:14;32688:58;32780:7;32775:2;32767:6;32763:15;32756:32;32571:224;:::o;32801:366::-;32943:3;32964:67;33028:2;33023:3;32964:67;:::i;:::-;32957:74;;33040:93;33129:3;33040:93;:::i;:::-;33158:2;33153:3;33149:12;33142:19;;32801:366;;;:::o;33173:419::-;33339:4;33377:2;33366:9;33362:18;33354:26;;33426:9;33420:4;33416:20;33412:1;33401:9;33397:17;33390:47;33454:131;33580:4;33454:131;:::i;:::-;33446:139;;33173:419;;;:::o;33598:222::-;33738:34;33734:1;33726:6;33722:14;33715:58;33807:5;33802:2;33794:6;33790:15;33783:30;33598:222;:::o;33826:366::-;33968:3;33989:67;34053:2;34048:3;33989:67;:::i;:::-;33982:74;;34065:93;34154:3;34065:93;:::i;:::-;34183:2;34178:3;34174:12;34167:19;;33826:366;;;:::o;34198:419::-;34364:4;34402:2;34391:9;34387:18;34379:26;;34451:9;34445:4;34441:20;34437:1;34426:9;34422:17;34415:47;34479:131;34605:4;34479:131;:::i;:::-;34471:139;;34198:419;;;:::o;34623:170::-;34763:22;34759:1;34751:6;34747:14;34740:46;34623:170;:::o;34799:366::-;34941:3;34962:67;35026:2;35021:3;34962:67;:::i;:::-;34955:74;;35038:93;35127:3;35038:93;:::i;:::-;35156:2;35151:3;35147:12;35140:19;;34799:366;;;:::o;35171:419::-;35337:4;35375:2;35364:9;35360:18;35352:26;;35424:9;35418:4;35414:20;35410:1;35399:9;35395:17;35388:47;35452:131;35578:4;35452:131;:::i;:::-;35444:139;;35171:419;;;:::o;35596:173::-;35736:25;35732:1;35724:6;35720:14;35713:49;35596:173;:::o;35775:366::-;35917:3;35938:67;36002:2;35997:3;35938:67;:::i;:::-;35931:74;;36014:93;36103:3;36014:93;:::i;:::-;36132:2;36127:3;36123:12;36116:19;;35775:366;;;:::o;36147:419::-;36313:4;36351:2;36340:9;36336:18;36328:26;;36400:9;36394:4;36390:20;36386:1;36375:9;36371:17;36364:47;36428:131;36554:4;36428:131;:::i;:::-;36420:139;;36147:419;;;:::o;36572:172::-;36712:24;36708:1;36700:6;36696:14;36689:48;36572:172;:::o;36750:366::-;36892:3;36913:67;36977:2;36972:3;36913:67;:::i;:::-;36906:74;;36989:93;37078:3;36989:93;:::i;:::-;37107:2;37102:3;37098:12;37091:19;;36750:366;;;:::o;37122:419::-;37288:4;37326:2;37315:9;37311:18;37303:26;;37375:9;37369:4;37365:20;37361:1;37350:9;37346:17;37339:47;37403:131;37529:4;37403:131;:::i;:::-;37395:139;;37122:419;;;:::o;37547:297::-;37687:34;37683:1;37675:6;37671:14;37664:58;37756:34;37751:2;37743:6;37739:15;37732:59;37825:11;37820:2;37812:6;37808:15;37801:36;37547:297;:::o;37850:366::-;37992:3;38013:67;38077:2;38072:3;38013:67;:::i;:::-;38006:74;;38089:93;38178:3;38089:93;:::i;:::-;38207:2;38202:3;38198:12;38191:19;;37850:366;;;:::o;38222:419::-;38388:4;38426:2;38415:9;38411:18;38403:26;;38475:9;38469:4;38465:20;38461:1;38450:9;38446:17;38439:47;38503:131;38629:4;38503:131;:::i;:::-;38495:139;;38222:419;;;:::o;38647:240::-;38787:34;38783:1;38775:6;38771:14;38764:58;38856:23;38851:2;38843:6;38839:15;38832:48;38647:240;:::o;38893:366::-;39035:3;39056:67;39120:2;39115:3;39056:67;:::i;:::-;39049:74;;39132:93;39221:3;39132:93;:::i;:::-;39250:2;39245:3;39241:12;39234:19;;38893:366;;;:::o;39265:419::-;39431:4;39469:2;39458:9;39454:18;39446:26;;39518:9;39512:4;39508:20;39504:1;39493:9;39489:17;39482:47;39546:131;39672:4;39546:131;:::i;:::-;39538:139;;39265:419;;;:::o;39690:169::-;39830:21;39826:1;39818:6;39814:14;39807:45;39690:169;:::o;39865:366::-;40007:3;40028:67;40092:2;40087:3;40028:67;:::i;:::-;40021:74;;40104:93;40193:3;40104:93;:::i;:::-;40222:2;40217:3;40213:12;40206:19;;39865:366;;;:::o;40237:419::-;40403:4;40441:2;40430:9;40426:18;40418:26;;40490:9;40484:4;40480:20;40476:1;40465:9;40461:17;40454:47;40518:131;40644:4;40518:131;:::i;:::-;40510:139;;40237:419;;;:::o;40662:241::-;40802:34;40798:1;40790:6;40786:14;40779:58;40871:24;40866:2;40858:6;40854:15;40847:49;40662:241;:::o;40909:366::-;41051:3;41072:67;41136:2;41131:3;41072:67;:::i;:::-;41065:74;;41148:93;41237:3;41148:93;:::i;:::-;41266:2;41261:3;41257:12;41250:19;;40909:366;;;:::o;41281:419::-;41447:4;41485:2;41474:9;41470:18;41462:26;;41534:9;41528:4;41524:20;41520:1;41509:9;41505:17;41498:47;41562:131;41688:4;41562:131;:::i;:::-;41554:139;;41281:419;;;:::o;41706:191::-;41746:4;41766:20;41784:1;41766:20;:::i;:::-;41761:25;;41800:20;41818:1;41800:20;:::i;:::-;41795:25;;41839:1;41836;41833:8;41830:34;;;41844:18;;:::i;:::-;41830:34;41889:1;41886;41882:9;41874:17;;41706:191;;;;:::o;41903:225::-;42043:34;42039:1;42031:6;42027:14;42020:58;42112:8;42107:2;42099:6;42095:15;42088:33;41903:225;:::o;42134:366::-;42276:3;42297:67;42361:2;42356:3;42297:67;:::i;:::-;42290:74;;42373:93;42462:3;42373:93;:::i;:::-;42491:2;42486:3;42482:12;42475:19;;42134:366;;;:::o;42506:419::-;42672:4;42710:2;42699:9;42695:18;42687:26;;42759:9;42753:4;42749:20;42745:1;42734:9;42730:17;42723:47;42787:131;42913:4;42787:131;:::i;:::-;42779:139;;42506:419;;;:::o;42931:147::-;43032:11;43069:3;43054:18;;42931:147;;;;:::o;43084:114::-;;:::o;43204:398::-;43363:3;43384:83;43465:1;43460:3;43384:83;:::i;:::-;43377:90;;43476:93;43565:3;43476:93;:::i;:::-;43594:1;43589:3;43585:11;43578:18;;43204:398;;;:::o;43608:379::-;43792:3;43814:147;43957:3;43814:147;:::i;:::-;43807:154;;43978:3;43971:10;;43608:379;;;:::o;43993:442::-;44142:4;44180:2;44169:9;44165:18;44157:26;;44193:71;44261:1;44250:9;44246:17;44237:6;44193:71;:::i;:::-;44274:72;44342:2;44331:9;44327:18;44318:6;44274:72;:::i;:::-;44356;44424:2;44413:9;44409:18;44400:6;44356:72;:::i;:::-;43993:442;;;;;;:::o;44441:143::-;44498:5;44529:6;44523:13;44514:22;;44545:33;44572:5;44545:33;:::i;:::-;44441:143;;;;:::o;44590:351::-;44660:6;44709:2;44697:9;44688:7;44684:23;44680:32;44677:119;;;44715:79;;:::i;:::-;44677:119;44835:1;44860:64;44916:7;44907:6;44896:9;44892:22;44860:64;:::i;:::-;44850:74;;44806:128;44590:351;;;;:::o;44947:85::-;44992:7;45021:5;45010:16;;44947:85;;;:::o;45038:158::-;45096:9;45129:61;45147:42;45156:32;45182:5;45156:32;:::i;:::-;45147:42;:::i;:::-;45129:61;:::i;:::-;45116:74;;45038:158;;;:::o;45202:147::-;45297:45;45336:5;45297:45;:::i;:::-;45292:3;45285:58;45202:147;;:::o;45355:114::-;45422:6;45456:5;45450:12;45440:22;;45355:114;;;:::o;45475:184::-;45574:11;45608:6;45603:3;45596:19;45648:4;45643:3;45639:14;45624:29;;45475:184;;;;:::o;45665:132::-;45732:4;45755:3;45747:11;;45785:4;45780:3;45776:14;45768:22;;45665:132;;;:::o;45803:108::-;45880:24;45898:5;45880:24;:::i;:::-;45875:3;45868:37;45803:108;;:::o;45917:179::-;45986:10;46007:46;46049:3;46041:6;46007:46;:::i;:::-;46085:4;46080:3;46076:14;46062:28;;45917:179;;;;:::o;46102:113::-;46172:4;46204;46199:3;46195:14;46187:22;;46102:113;;;:::o;46251:732::-;46370:3;46399:54;46447:5;46399:54;:::i;:::-;46469:86;46548:6;46543:3;46469:86;:::i;:::-;46462:93;;46579:56;46629:5;46579:56;:::i;:::-;46658:7;46689:1;46674:284;46699:6;46696:1;46693:13;46674:284;;;46775:6;46769:13;46802:63;46861:3;46846:13;46802:63;:::i;:::-;46795:70;;46888:60;46941:6;46888:60;:::i;:::-;46878:70;;46734:224;46721:1;46718;46714:9;46709:14;;46674:284;;;46678:14;46974:3;46967:10;;46375:608;;;46251:732;;;;:::o;46989:831::-;47252:4;47290:3;47279:9;47275:19;47267:27;;47304:71;47372:1;47361:9;47357:17;47348:6;47304:71;:::i;:::-;47385:80;47461:2;47450:9;47446:18;47437:6;47385:80;:::i;:::-;47512:9;47506:4;47502:20;47497:2;47486:9;47482:18;47475:48;47540:108;47643:4;47634:6;47540:108;:::i;:::-;47532:116;;47658:72;47726:2;47715:9;47711:18;47702:6;47658:72;:::i;:::-;47740:73;47808:3;47797:9;47793:19;47784:6;47740:73;:::i;:::-;46989:831;;;;;;;;:::o;47826:807::-;48075:4;48113:3;48102:9;48098:19;48090:27;;48127:71;48195:1;48184:9;48180:17;48171:6;48127:71;:::i;:::-;48208:72;48276:2;48265:9;48261:18;48252:6;48208:72;:::i;:::-;48290:80;48366:2;48355:9;48351:18;48342:6;48290:80;:::i;:::-;48380;48456:2;48445:9;48441:18;48432:6;48380:80;:::i;:::-;48470:73;48538:3;48527:9;48523:19;48514:6;48470:73;:::i;:::-;48553;48621:3;48610:9;48606:19;48597:6;48553:73;:::i;:::-;47826:807;;;;;;;;;:::o;48639:663::-;48727:6;48735;48743;48792:2;48780:9;48771:7;48767:23;48763:32;48760:119;;;48798:79;;:::i;:::-;48760:119;48918:1;48943:64;48999:7;48990:6;48979:9;48975:22;48943:64;:::i;:::-;48933:74;;48889:128;49056:2;49082:64;49138:7;49129:6;49118:9;49114:22;49082:64;:::i;:::-;49072:74;;49027:129;49195:2;49221:64;49277:7;49268:6;49257:9;49253:22;49221:64;:::i;:::-;49211:74;;49166:129;48639:663;;;;;:::o

Swarm Source

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