ETH Price: $3,137.39 (-0.81%)

Token

HIKARI (HIKARI)
 

Overview

Max Total Supply

1,000,000,000 HIKARI

Holders

615 ( -0.163%)

Market

Price

$0.00 @ 0.000000 ETH (-1.41%)

Onchain Market Cap

$514,510.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
barnt.eth
Balance
30,000 HIKARI

Value
$15.44 ( ~0.00492128267345487 Eth) [0.0030%]
0x036F2DACf33EA6FB436257b1DF4670dE25e4a8CF
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Hikari Protocol is creating the tools required for increased efficiency in the small cap digital asset markets.

Market

Volume (24H):$1,077.45
Market Capitalization:$0.00
Circulating Supply:0.00 HIKARI
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HIKARI

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-21
*/

/**
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;
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() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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

/* 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() public view virtual override returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface GotchuVerification {
    function getValidation(
        address _approver,
        address _contract,
        bytes32 _code
    ) external returns (bool);
}

/* 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 HIKARI is ERC20, Ownable {
    using SafeMath for uint256;

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

    // Powered by GOTCHU
    GotchuVerification public immutable gotchu;

    bool private swapping;

    address public devWallet;

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

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

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

	uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

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

    // Powered by GOTCHU
    mapping(address => bool) public addressValidated;
    bool public validationRequired = false;

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor() ERC20("HIKARI", "HIKARI") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        GotchuVerification _gotchu = GotchuVerification(0x6f071Df1c99285f29E3ecBc2c20fc67AA380764f);
        gotchu = _gotchu;

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

        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 6;

        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 9;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = (totalSupply) / 200; // 0.5% from total supply maxTransactionAmountTxn
        maxWallet = (totalSupply) / 200; // 1% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;

        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;

        devWallet = address(0xa2Acb1c1D689Fd3785696277537A504FcEa8d1D0); // set as dev 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 {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        validationRequired = true;
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }
	
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

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

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

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

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

    function updateBuyFees(
        uint256 _devFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function approveForTrading(bytes32 code) public {
        require(
            tradingActive
        );
        if (gotchu.getValidation(_msgSender(), address(this),code)) {
            addressValidated[_msgSender()] = true;
        }
    }

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

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

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

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    if (validationRequired) {
                        require(
                            addressValidated[to] == true,
                            "Approval for Trading required."
                        );
                    }
                   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;
        }

        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;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;                
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / 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
            devWallet,
            block.timestamp
        );
    }

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

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
	
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForDev;

        tokensForLiquidity = 0;
        tokensForDev = 0;

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressValidated","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":"bytes32","name":"code","type":"bytes32"}],"name":"approveForTrading","outputs":[],"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":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableValidation","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":[],"name":"gotchu","outputs":[{"internalType":"contract GotchuVerification","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","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":[{"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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"validationRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506000601660006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600681526020017f48494b41524900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f48494b41524900000000000000000000000000000000000000000000000000008152508160039081620000fb919062000d19565b5080600490816200010d919062000d19565b50505062000130620001246200056060201b60201c565b6200056860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200062e60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506000736f071df1c99285f29e3ecbc2c20fc67aa380764f90508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f919062000e6a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000e6a565b6040518363ffffffff1660e01b8152600401620002fc92919062000ead565b6020604051808303816000875af11580156200031c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000342919062000e6a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038a60a05160016200062e60201b60201c565b6200039f60a05160016200071860201b60201c565b600080600690506000806009905060006b033b2e3c9fd0803ce8000000905060c881620003cd919062000f38565b60078190555060c881620003e2919062000f38565b600981905550612710600a82620003fa919062000f70565b62000406919062000f38565b60088190555084600c8190555083600d81905550600d54600c546200042c919062000fd1565b600b8190555082600f8190555081601081905550601054600f5462000452919062000fd1565b600e8190555073a2acb1c1d689fd3785696277537a504fcea8d1d0600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004cf620004c1620007b960201b60201c565b6001620007e360201b60201c565b620004e2306001620007e360201b60201c565b620004f761dead6001620007e360201b60201c565b620005196200050b620007b960201b60201c565b60016200062e60201b60201c565b6200052c3060016200062e60201b60201c565b6200054161dead60016200062e60201b60201c565b6200055333826200091d60201b60201c565b5050505050505062001169565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200063e6200056060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000664620007b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b4906200106d565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007f36200056060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000819620007b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000869906200106d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009119190620010ac565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200098f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009869062001119565b60405180910390fd5b620009a36000838362000a9560201b60201c565b8060026000828254620009b7919062000fd1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a0e919062000fd1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a7591906200114c565b60405180910390a362000a916000838362000a9a60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b2157607f821691505b60208210810362000b375762000b3662000ad9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ba17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b62565b62000bad868362000b62565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bfa62000bf462000bee8462000bc5565b62000bcf565b62000bc5565b9050919050565b6000819050919050565b62000c168362000bd9565b62000c2e62000c258262000c01565b84845462000b6f565b825550505050565b600090565b62000c4562000c36565b62000c5281848462000c0b565b505050565b5b8181101562000c7a5762000c6e60008262000c3b565b60018101905062000c58565b5050565b601f82111562000cc95762000c938162000b3d565b62000c9e8462000b52565b8101602085101562000cae578190505b62000cc662000cbd8562000b52565b83018262000c57565b50505b505050565b600082821c905092915050565b600062000cee6000198460080262000cce565b1980831691505092915050565b600062000d09838362000cdb565b9150826002028217905092915050565b62000d248262000a9f565b67ffffffffffffffff81111562000d405762000d3f62000aaa565b5b62000d4c825462000b08565b62000d5982828562000c7e565b600060209050601f83116001811462000d91576000841562000d7c578287015190505b62000d88858262000cfb565b86555062000df8565b601f19841662000da18662000b3d565b60005b8281101562000dcb5784890151825560018201915060208501945060208101905062000da4565b8683101562000deb578489015162000de7601f89168262000cdb565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e328262000e05565b9050919050565b62000e448162000e25565b811462000e5057600080fd5b50565b60008151905062000e648162000e39565b92915050565b60006020828403121562000e835762000e8262000e00565b5b600062000e938482850162000e53565b91505092915050565b62000ea78162000e25565b82525050565b600060408201905062000ec4600083018562000e9c565b62000ed3602083018462000e9c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f458262000bc5565b915062000f528362000bc5565b92508262000f655762000f6462000eda565b5b828204905092915050565b600062000f7d8262000bc5565b915062000f8a8362000bc5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000fc65762000fc562000f09565b5b828202905092915050565b600062000fde8262000bc5565b915062000feb8362000bc5565b925082820190508082111562001006576200100562000f09565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010556020836200100c565b915062001062826200101d565b602082019050919050565b60006020820190508181036000830152620010888162001046565b9050919050565b60008115159050919050565b620010a6816200108f565b82525050565b6000602082019050620010c360008301846200109b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001101601f836200100c565b91506200110e82620010c9565b602082019050919050565b600060208201905081810360008301526200113481620010f2565b9050919050565b620011468162000bc5565b82525050565b60006020820190506200116360008301846200113b565b92915050565b60805160a05160c051614c5f620011ca60003960008181611e4701526120590152600081816110bf015261175c015260008181610dc9015281816134480152818161352901528181613550015281816135ec01526136130152614c5f6000f3fe6080604052600436106102e85760003560e01c8063924de9b711610190578063c18bc195116100dc578063e0b3327211610095578063f2fde38b1161006f578063f2fde38b14610b63578063f373116614610b8c578063f637434214610bb7578063f8b45b0514610be2576102ef565b8063e0b3327214610ae4578063e2f4560514610b0d578063f11a24d314610b38576102ef565b8063c18bc195146109d4578063c8c8ebe4146109fd578063d257b34f14610a28578063d85ba06314610a65578063dc83d1a814610a90578063dd62ed3e14610aa7576102ef565b8063a457c2d711610149578063b62496f511610123578063b62496f514610918578063bbc0c74214610955578063bff09d6914610980578063c0246668146109ab576102ef565b8063a457c2d714610861578063a9059cbb1461089e578063aedabd7e146108db576102ef565b8063924de9b71461076357806395d89b411461078c5780639a7a23d6146107b75780639c3b4fdc146107e05780639fccce321461080b578063a0d82dc514610836576102ef565b806349bd5a5e1161024f57806370a08231116102085780637571336a116101e25780637571336a146106cd5780638a8c523c146106f65780638da5cb5b1461070d5780638ea5220f14610738576102ef565b806370a082311461064e578063715018a61461068b578063751039fc146106a2576102ef565b806349bd5a5e1461053c5780634a62bb65146105675780634fbee1931461059257806366ca9b83146105cf5780636a486a8e146105f85780636ddd171314610623576102ef565b80631a8145bb116102a15780631a8145bb14610418578063203e727e1461044357806323b872dd1461046c57806327c8f835146104a9578063313ce567146104d457806339509351146104ff576102ef565b806302dbd8f8146102f457806306fdde031461031d578063095ea7b31461034857806310d5de53146103855780631694505e146103c257806318160ddd146103ed576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b6004803603810190610316919061371d565b610c0d565b005b34801561032957600080fd5b50610332610cf7565b60405161033f91906137ed565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a919061386d565b610d89565b60405161037c91906138c8565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a791906138e3565b610da7565b6040516103b991906138c8565b60405180910390f35b3480156103ce57600080fd5b506103d7610dc7565b6040516103e4919061396f565b60405180910390f35b3480156103f957600080fd5b50610402610deb565b60405161040f9190613999565b60405180910390f35b34801561042457600080fd5b5061042d610df5565b60405161043a9190613999565b60405180910390f35b34801561044f57600080fd5b5061046a600480360381019061046591906139b4565b610dfb565b005b34801561047857600080fd5b50610493600480360381019061048e91906139e1565b610f0a565b6040516104a091906138c8565b60405180910390f35b3480156104b557600080fd5b506104be611002565b6040516104cb9190613a43565b60405180910390f35b3480156104e057600080fd5b506104e9611008565b6040516104f69190613a7a565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061386d565b611011565b60405161053391906138c8565b60405180910390f35b34801561054857600080fd5b506105516110bd565b60405161055e9190613a43565b60405180910390f35b34801561057357600080fd5b5061057c6110e1565b60405161058991906138c8565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b491906138e3565b6110f4565b6040516105c691906138c8565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f1919061371d565b61114a565b005b34801561060457600080fd5b5061060d611234565b60405161061a9190613999565b60405180910390f35b34801561062f57600080fd5b5061063861123a565b60405161064591906138c8565b60405180910390f35b34801561065a57600080fd5b50610675600480360381019061067091906138e3565b61124d565b6040516106829190613999565b60405180910390f35b34801561069757600080fd5b506106a0611295565b005b3480156106ae57600080fd5b506106b761131d565b6040516106c491906138c8565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613ac1565b6113bd565b005b34801561070257600080fd5b5061070b611494565b005b34801561071957600080fd5b50610722611563565b60405161072f9190613a43565b60405180910390f35b34801561074457600080fd5b5061074d61158d565b60405161075a9190613a43565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613b01565b6115b3565b005b34801561079857600080fd5b506107a161164c565b6040516107ae91906137ed565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613ac1565b6116de565b005b3480156107ec57600080fd5b506107f56117f6565b6040516108029190613999565b60405180910390f35b34801561081757600080fd5b506108206117fc565b60405161082d9190613999565b60405180910390f35b34801561084257600080fd5b5061084b611802565b6040516108589190613999565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061386d565b611808565b60405161089591906138c8565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c0919061386d565b6118f3565b6040516108d291906138c8565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd91906138e3565b611911565b60405161090f91906138c8565b60405180910390f35b34801561092457600080fd5b5061093f600480360381019061093a91906138e3565b611931565b60405161094c91906138c8565b60405180910390f35b34801561096157600080fd5b5061096a611951565b60405161097791906138c8565b60405180910390f35b34801561098c57600080fd5b50610995611964565b6040516109a291906138c8565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190613ac1565b611977565b005b3480156109e057600080fd5b506109fb60048036038101906109f691906139b4565b611a9c565b005b348015610a0957600080fd5b50610a12611bab565b604051610a1f9190613999565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906139b4565b611bb1565b604051610a5c91906138c8565b60405180910390f35b348015610a7157600080fd5b50610a7a611d06565b604051610a879190613999565b60405180910390f35b348015610a9c57600080fd5b50610aa5611d0c565b005b348015610ab357600080fd5b50610ace6004803603810190610ac99190613b2e565b611da5565b604051610adb9190613999565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b069190613ba4565b611e2c565b005b348015610b1957600080fd5b50610b22611f54565b604051610b2f9190613999565b60405180910390f35b348015610b4457600080fd5b50610b4d611f5a565b604051610b5a9190613999565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906138e3565b611f60565b005b348015610b9857600080fd5b50610ba1612057565b604051610bae9190613bf2565b60405180910390f35b348015610bc357600080fd5b50610bcc61207b565b604051610bd99190613999565b60405180910390f35b348015610bee57600080fd5b50610bf7612081565b604051610c049190613999565b60405180910390f35b610c15612087565b73ffffffffffffffffffffffffffffffffffffffff16610c33611563565b73ffffffffffffffffffffffffffffffffffffffff1614610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090613c59565b60405180910390fd5b8160108190555080600f81905550600f54601054610ca79190613ca8565b600e81905550600a600e541115610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea90613d28565b60405180910390fd5b5050565b606060038054610d0690613d77565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3290613d77565b8015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b5050505050905090565b6000610d9d610d96612087565b848461208f565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60115481565b610e03612087565b73ffffffffffffffffffffffffffffffffffffffff16610e21611563565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613c59565b60405180910390fd5b670de0b6b3a76400006103e86001610e8d610deb565b610e979190613da8565b610ea19190613e31565b610eab9190613e31565b811015610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613ed4565b60405180910390fd5b670de0b6b3a764000081610f019190613da8565b60078190555050565b6000610f17848484612258565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f62612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990613f66565b60405180910390fd5b610ff685610fee612087565b85840361208f565b60019150509392505050565b61dead81565b60006012905090565b60006110b361101e612087565b84846001600061102c612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110ae9190613ca8565b61208f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611152612087565b73ffffffffffffffffffffffffffffffffffffffff16611170611563565b73ffffffffffffffffffffffffffffffffffffffff16146111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613c59565b60405180910390fd5b81600d8190555080600c81905550600c54600d546111e49190613ca8565b600b81905550600a600b541115611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790613d28565b60405180910390fd5b5050565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61129d612087565b73ffffffffffffffffffffffffffffffffffffffff166112bb611563565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613c59565b60405180910390fd5b61131b6000612d6a565b565b6000611327612087565b73ffffffffffffffffffffffffffffffffffffffff16611345611563565b73ffffffffffffffffffffffffffffffffffffffff161461139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290613c59565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6113c5612087565b73ffffffffffffffffffffffffffffffffffffffff166113e3611563565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090613c59565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61149c612087565b73ffffffffffffffffffffffffffffffffffffffff166114ba611563565b73ffffffffffffffffffffffffffffffffffffffff1614611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613c59565b60405180910390fd5b6001601660006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115bb612087565b73ffffffffffffffffffffffffffffffffffffffff166115d9611563565b73ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162690613c59565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461165b90613d77565b80601f016020809104026020016040519081016040528092919081815260200182805461168790613d77565b80156116d45780601f106116a9576101008083540402835291602001916116d4565b820191906000526020600020905b8154815290600101906020018083116116b757829003601f168201915b5050505050905090565b6116e6612087565b73ffffffffffffffffffffffffffffffffffffffff16611704611563565b73ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613c59565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613ff8565b60405180910390fd5b6117f28282612e30565b5050565b600d5481565b60125481565b60105481565b60008060016000611817612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb9061408a565b60405180910390fd5b6118e86118df612087565b8585840361208f565b600191505092915050565b6000611907611900612087565b8484612258565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b601660009054906101000a900460ff1681565b61197f612087565b73ffffffffffffffffffffffffffffffffffffffff1661199d611563565b73ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90613c59565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a9091906138c8565b60405180910390a25050565b611aa4612087565b73ffffffffffffffffffffffffffffffffffffffff16611ac2611563565b73ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90613c59565b60405180910390fd5b670de0b6b3a76400006103e86005611b2e610deb565b611b389190613da8565b611b429190613e31565b611b4c9190613e31565b811015611b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b859061411c565b60405180910390fd5b670de0b6b3a764000081611ba29190613da8565b60098190555050565b60075481565b6000611bbb612087565b73ffffffffffffffffffffffffffffffffffffffff16611bd9611563565b73ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690613c59565b60405180910390fd5b620186a06001611c3d610deb565b611c479190613da8565b611c519190613e31565b821015611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a906141ae565b60405180910390fd5b6103e86005611ca0610deb565b611caa9190613da8565b611cb49190613e31565b821115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614240565b60405180910390fd5b8160088190555060019050919050565b600b5481565b611d14612087565b73ffffffffffffffffffffffffffffffffffffffff16611d32611563565b73ffffffffffffffffffffffffffffffffffffffff1614611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90613c59565b60405180910390fd5b6000601660006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a60019054906101000a900460ff16611e4557600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635b0ae30e611e89612087565b30846040518463ffffffff1660e01b8152600401611ea99392919061426f565b6020604051808303816000875af1158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eec91906142bb565b15611f5157600160156000611eff612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60085481565b600c5481565b611f68612087565b73ffffffffffffffffffffffffffffffffffffffff16611f86611563565b73ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613c59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061435a565b60405180910390fd5b61205481612d6a565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f5481565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f5906143ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361216d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121649061447e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224b9190613999565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614510565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d906145a2565b60405180910390fd5b6000810361234f5761234a83836000612ed1565b612d65565b600a60009054906101000a900460ff16156128f35761236c611563565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123da57506123aa611563565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124135750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124665750600560149054906101000a900460ff16155b156128f257600a60019054906101000a900460ff1661256057601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125205750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61255f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125569061460e565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126035750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561275357601660009054906101000a900460ff16156126b15760011515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a79061467a565b60405180910390fd5b5b6007548111156126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed9061470c565b60405180910390fd5b6009546127028361124d565b8261270d9190613ca8565b111561274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614778565b60405180910390fd5b6128f1565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f65750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561284557600754811115612840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128379061480a565b60405180910390fd5b6128f0565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128ef576009546128a28361124d565b826128ad9190613ca8565b11156128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614778565b60405180910390fd5b5b5b5b5b5b60006128fe3061124d565b9050600060085482101590508080156129235750600a60029054906101000a900460ff165b801561293c5750600560149054906101000a900460ff16155b80156129925750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e85750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a3e5750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a82576001600560146101000a81548160ff021916908315150217905550612a66613150565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b385750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b4257600090505b60008115612d5557601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba557506000600e54115b15612c3f57612bd26064612bc4600e548861335d90919063ffffffff16565b61337390919063ffffffff16565b9050600e54600f5482612be59190613da8565b612bef9190613e31565b60116000828254612c009190613ca8565b92505081905550600e5460105482612c189190613da8565b612c229190613e31565b60126000828254612c339190613ca8565b92505081905550612d31565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c9a57506000600b54115b15612d3057612cc76064612cb9600b548861335d90919063ffffffff16565b61337390919063ffffffff16565b9050600b54600c5482612cda9190613da8565b612ce49190613e31565b60116000828254612cf59190613ca8565b92505081905550600b54600d5482612d0d9190613da8565b612d179190613e31565b60126000828254612d289190613ca8565b925050819055505b5b6000811115612d4657612d45873083612ed1565b5b8085612d52919061482a565b94505b612d60878787612ed1565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3790614510565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa6906145a2565b60405180910390fd5b612fba838383613389565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613037906148d0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d39190613ca8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131379190613999565b60405180910390a361314a84848461338e565b50505050565b600061315b3061124d565b9050600060125460115461316f9190613ca8565b90506000808314806131815750600082145b1561318e5750505061335b565b601460085461319d9190613da8565b8311156131b65760146008546131b39190613da8565b92505b6000600283601154866131c99190613da8565b6131d39190613e31565b6131dd9190613e31565b905060006131f4828661339390919063ffffffff16565b90506000479050613204826133a9565b6000613219824761339390919063ffffffff16565b90506000613244876132366012548561335d90919063ffffffff16565b61337390919063ffffffff16565b905060008183613254919061482a565b9050600060118190555060006012819055506000861180156132765750600081115b156132c35761328586826135e6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826011546040516132ba939291906148f0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161330990614958565b60006040518083038185875af1925050503d8060008114613346576040519150601f19603f3d011682016040523d82523d6000602084013e61334b565b606091505b5050809750505050505050505050505b565b6000818361336b9190613da8565b905092915050565b600081836133819190613e31565b905092915050565b505050565b505050565b600081836133a1919061482a565b905092915050565b6000600267ffffffffffffffff8111156133c6576133c561496d565b5b6040519080825280602002602001820160405280156133f45781602001602082028036833780820191505090505b509050308160008151811061340c5761340b61499c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d591906149e0565b816001815181106134e9576134e861499c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f00000000000000000000000000000000000000000000000000000000000000008461208f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135b0959493929190614b06565b600060405180830381600087803b1580156135ca57600080fd5b505af11580156135de573d6000803e3d6000fd5b505050505050565b613611307f00000000000000000000000000000000000000000000000000000000000000008461208f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161369896959493929190614b60565b60606040518083038185885af11580156136b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136db9190614bd6565b5050505050565b600080fd5b6000819050919050565b6136fa816136e7565b811461370557600080fd5b50565b600081359050613717816136f1565b92915050565b60008060408385031215613734576137336136e2565b5b600061374285828601613708565b925050602061375385828601613708565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379757808201518184015260208101905061377c565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bf8261375d565b6137c98185613768565b93506137d9818560208601613779565b6137e2816137a3565b840191505092915050565b6000602082019050818103600083015261380781846137b4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061383a8261380f565b9050919050565b61384a8161382f565b811461385557600080fd5b50565b60008135905061386781613841565b92915050565b60008060408385031215613884576138836136e2565b5b600061389285828601613858565b92505060206138a385828601613708565b9150509250929050565b60008115159050919050565b6138c2816138ad565b82525050565b60006020820190506138dd60008301846138b9565b92915050565b6000602082840312156138f9576138f86136e2565b5b600061390784828501613858565b91505092915050565b6000819050919050565b600061393561393061392b8461380f565b613910565b61380f565b9050919050565b60006139478261391a565b9050919050565b60006139598261393c565b9050919050565b6139698161394e565b82525050565b60006020820190506139846000830184613960565b92915050565b613993816136e7565b82525050565b60006020820190506139ae600083018461398a565b92915050565b6000602082840312156139ca576139c96136e2565b5b60006139d884828501613708565b91505092915050565b6000806000606084860312156139fa576139f96136e2565b5b6000613a0886828701613858565b9350506020613a1986828701613858565b9250506040613a2a86828701613708565b9150509250925092565b613a3d8161382f565b82525050565b6000602082019050613a586000830184613a34565b92915050565b600060ff82169050919050565b613a7481613a5e565b82525050565b6000602082019050613a8f6000830184613a6b565b92915050565b613a9e816138ad565b8114613aa957600080fd5b50565b600081359050613abb81613a95565b92915050565b60008060408385031215613ad857613ad76136e2565b5b6000613ae685828601613858565b9250506020613af785828601613aac565b9150509250929050565b600060208284031215613b1757613b166136e2565b5b6000613b2584828501613aac565b91505092915050565b60008060408385031215613b4557613b446136e2565b5b6000613b5385828601613858565b9250506020613b6485828601613858565b9150509250929050565b6000819050919050565b613b8181613b6e565b8114613b8c57600080fd5b50565b600081359050613b9e81613b78565b92915050565b600060208284031215613bba57613bb96136e2565b5b6000613bc884828501613b8f565b91505092915050565b6000613bdc8261393c565b9050919050565b613bec81613bd1565b82525050565b6000602082019050613c076000830184613be3565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c43602083613768565b9150613c4e82613c0d565b602082019050919050565b60006020820190508181036000830152613c7281613c36565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cb3826136e7565b9150613cbe836136e7565b9250828201905080821115613cd657613cd5613c79565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613d12601d83613768565b9150613d1d82613cdc565b602082019050919050565b60006020820190508181036000830152613d4181613d05565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d8f57607f821691505b602082108103613da257613da1613d48565b5b50919050565b6000613db3826136e7565b9150613dbe836136e7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613df757613df6613c79565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e3c826136e7565b9150613e47836136e7565b925082613e5757613e56613e02565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613ebe602f83613768565b9150613ec982613e62565b604082019050919050565b60006020820190508181036000830152613eed81613eb1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f50602883613768565b9150613f5b82613ef4565b604082019050919050565b60006020820190508181036000830152613f7f81613f43565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fe2603983613768565b9150613fed82613f86565b604082019050919050565b6000602082019050818103600083015261401181613fd5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614074602583613768565b915061407f82614018565b604082019050919050565b600060208201905081810360008301526140a381614067565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614106602483613768565b9150614111826140aa565b604082019050919050565b60006020820190508181036000830152614135816140f9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614198603583613768565b91506141a38261413c565b604082019050919050565b600060208201905081810360008301526141c78161418b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061422a603483613768565b9150614235826141ce565b604082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b61426981613b6e565b82525050565b60006060820190506142846000830186613a34565b6142916020830185613a34565b61429e6040830184614260565b949350505050565b6000815190506142b581613a95565b92915050565b6000602082840312156142d1576142d06136e2565b5b60006142df848285016142a6565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614344602683613768565b915061434f826142e8565b604082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143d6602483613768565b91506143e18261437a565b604082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614468602283613768565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144fa602583613768565b91506145058261449e565b604082019050919050565b60006020820190508181036000830152614529816144ed565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061458c602383613768565b915061459782614530565b604082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145f8601683613768565b9150614603826145c2565b602082019050919050565b60006020820190508181036000830152614627816145eb565b9050919050565b7f417070726f76616c20666f722054726164696e672072657175697265642e0000600082015250565b6000614664601e83613768565b915061466f8261462e565b602082019050919050565b6000602082019050818103600083015261469381614657565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006146f6603583613768565b91506147018261469a565b604082019050919050565b60006020820190508181036000830152614725816146e9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614762601383613768565b915061476d8261472c565b602082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006147f4603683613768565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b6000614835826136e7565b9150614840836136e7565b925082820390508181111561485857614857613c79565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148ba602683613768565b91506148c58261485e565b604082019050919050565b600060208201905081810360008301526148e9816148ad565b9050919050565b6000606082019050614905600083018661398a565b614912602083018561398a565b61491f604083018461398a565b949350505050565b600081905092915050565b50565b6000614942600083614927565b915061494d82614932565b600082019050919050565b600061496382614935565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149da81613841565b92915050565b6000602082840312156149f6576149f56136e2565b5b6000614a04848285016149cb565b91505092915050565b6000819050919050565b6000614a32614a2d614a2884614a0d565b613910565b6136e7565b9050919050565b614a4281614a17565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a7d8161382f565b82525050565b6000614a8f8383614a74565b60208301905092915050565b6000602082019050919050565b6000614ab382614a48565b614abd8185614a53565b9350614ac883614a64565b8060005b83811015614af9578151614ae08882614a83565b9750614aeb83614a9b565b925050600181019050614acc565b5085935050505092915050565b600060a082019050614b1b600083018861398a565b614b286020830187614a39565b8181036040830152614b3a8186614aa8565b9050614b496060830185613a34565b614b56608083018461398a565b9695505050505050565b600060c082019050614b756000830189613a34565b614b82602083018861398a565b614b8f6040830187614a39565b614b9c6060830186614a39565b614ba96080830185613a34565b614bb660a083018461398a565b979650505050505050565b600081519050614bd0816136f1565b92915050565b600080600060608486031215614bef57614bee6136e2565b5b6000614bfd86828701614bc1565b9350506020614c0e86828701614bc1565b9250506040614c1f86828701614bc1565b915050925092509256fea2646970667358221220d4f33628511899b2e8d20056d96bde6582315cd507bb238fa67efcd15eb82f2764736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063924de9b711610190578063c18bc195116100dc578063e0b3327211610095578063f2fde38b1161006f578063f2fde38b14610b63578063f373116614610b8c578063f637434214610bb7578063f8b45b0514610be2576102ef565b8063e0b3327214610ae4578063e2f4560514610b0d578063f11a24d314610b38576102ef565b8063c18bc195146109d4578063c8c8ebe4146109fd578063d257b34f14610a28578063d85ba06314610a65578063dc83d1a814610a90578063dd62ed3e14610aa7576102ef565b8063a457c2d711610149578063b62496f511610123578063b62496f514610918578063bbc0c74214610955578063bff09d6914610980578063c0246668146109ab576102ef565b8063a457c2d714610861578063a9059cbb1461089e578063aedabd7e146108db576102ef565b8063924de9b71461076357806395d89b411461078c5780639a7a23d6146107b75780639c3b4fdc146107e05780639fccce321461080b578063a0d82dc514610836576102ef565b806349bd5a5e1161024f57806370a08231116102085780637571336a116101e25780637571336a146106cd5780638a8c523c146106f65780638da5cb5b1461070d5780638ea5220f14610738576102ef565b806370a082311461064e578063715018a61461068b578063751039fc146106a2576102ef565b806349bd5a5e1461053c5780634a62bb65146105675780634fbee1931461059257806366ca9b83146105cf5780636a486a8e146105f85780636ddd171314610623576102ef565b80631a8145bb116102a15780631a8145bb14610418578063203e727e1461044357806323b872dd1461046c57806327c8f835146104a9578063313ce567146104d457806339509351146104ff576102ef565b806302dbd8f8146102f457806306fdde031461031d578063095ea7b31461034857806310d5de53146103855780631694505e146103c257806318160ddd146103ed576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b5061031b6004803603810190610316919061371d565b610c0d565b005b34801561032957600080fd5b50610332610cf7565b60405161033f91906137ed565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a919061386d565b610d89565b60405161037c91906138c8565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a791906138e3565b610da7565b6040516103b991906138c8565b60405180910390f35b3480156103ce57600080fd5b506103d7610dc7565b6040516103e4919061396f565b60405180910390f35b3480156103f957600080fd5b50610402610deb565b60405161040f9190613999565b60405180910390f35b34801561042457600080fd5b5061042d610df5565b60405161043a9190613999565b60405180910390f35b34801561044f57600080fd5b5061046a600480360381019061046591906139b4565b610dfb565b005b34801561047857600080fd5b50610493600480360381019061048e91906139e1565b610f0a565b6040516104a091906138c8565b60405180910390f35b3480156104b557600080fd5b506104be611002565b6040516104cb9190613a43565b60405180910390f35b3480156104e057600080fd5b506104e9611008565b6040516104f69190613a7a565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061386d565b611011565b60405161053391906138c8565b60405180910390f35b34801561054857600080fd5b506105516110bd565b60405161055e9190613a43565b60405180910390f35b34801561057357600080fd5b5061057c6110e1565b60405161058991906138c8565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b491906138e3565b6110f4565b6040516105c691906138c8565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f1919061371d565b61114a565b005b34801561060457600080fd5b5061060d611234565b60405161061a9190613999565b60405180910390f35b34801561062f57600080fd5b5061063861123a565b60405161064591906138c8565b60405180910390f35b34801561065a57600080fd5b50610675600480360381019061067091906138e3565b61124d565b6040516106829190613999565b60405180910390f35b34801561069757600080fd5b506106a0611295565b005b3480156106ae57600080fd5b506106b761131d565b6040516106c491906138c8565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613ac1565b6113bd565b005b34801561070257600080fd5b5061070b611494565b005b34801561071957600080fd5b50610722611563565b60405161072f9190613a43565b60405180910390f35b34801561074457600080fd5b5061074d61158d565b60405161075a9190613a43565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613b01565b6115b3565b005b34801561079857600080fd5b506107a161164c565b6040516107ae91906137ed565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613ac1565b6116de565b005b3480156107ec57600080fd5b506107f56117f6565b6040516108029190613999565b60405180910390f35b34801561081757600080fd5b506108206117fc565b60405161082d9190613999565b60405180910390f35b34801561084257600080fd5b5061084b611802565b6040516108589190613999565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061386d565b611808565b60405161089591906138c8565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c0919061386d565b6118f3565b6040516108d291906138c8565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd91906138e3565b611911565b60405161090f91906138c8565b60405180910390f35b34801561092457600080fd5b5061093f600480360381019061093a91906138e3565b611931565b60405161094c91906138c8565b60405180910390f35b34801561096157600080fd5b5061096a611951565b60405161097791906138c8565b60405180910390f35b34801561098c57600080fd5b50610995611964565b6040516109a291906138c8565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190613ac1565b611977565b005b3480156109e057600080fd5b506109fb60048036038101906109f691906139b4565b611a9c565b005b348015610a0957600080fd5b50610a12611bab565b604051610a1f9190613999565b60405180910390f35b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906139b4565b611bb1565b604051610a5c91906138c8565b60405180910390f35b348015610a7157600080fd5b50610a7a611d06565b604051610a879190613999565b60405180910390f35b348015610a9c57600080fd5b50610aa5611d0c565b005b348015610ab357600080fd5b50610ace6004803603810190610ac99190613b2e565b611da5565b604051610adb9190613999565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b069190613ba4565b611e2c565b005b348015610b1957600080fd5b50610b22611f54565b604051610b2f9190613999565b60405180910390f35b348015610b4457600080fd5b50610b4d611f5a565b604051610b5a9190613999565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906138e3565b611f60565b005b348015610b9857600080fd5b50610ba1612057565b604051610bae9190613bf2565b60405180910390f35b348015610bc357600080fd5b50610bcc61207b565b604051610bd99190613999565b60405180910390f35b348015610bee57600080fd5b50610bf7612081565b604051610c049190613999565b60405180910390f35b610c15612087565b73ffffffffffffffffffffffffffffffffffffffff16610c33611563565b73ffffffffffffffffffffffffffffffffffffffff1614610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8090613c59565b60405180910390fd5b8160108190555080600f81905550600f54601054610ca79190613ca8565b600e81905550600a600e541115610cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cea90613d28565b60405180910390fd5b5050565b606060038054610d0690613d77565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3290613d77565b8015610d7f5780601f10610d5457610100808354040283529160200191610d7f565b820191906000526020600020905b815481529060010190602001808311610d6257829003601f168201915b5050505050905090565b6000610d9d610d96612087565b848461208f565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60115481565b610e03612087565b73ffffffffffffffffffffffffffffffffffffffff16610e21611563565b73ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90613c59565b60405180910390fd5b670de0b6b3a76400006103e86001610e8d610deb565b610e979190613da8565b610ea19190613e31565b610eab9190613e31565b811015610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613ed4565b60405180910390fd5b670de0b6b3a764000081610f019190613da8565b60078190555050565b6000610f17848484612258565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f62612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990613f66565b60405180910390fd5b610ff685610fee612087565b85840361208f565b60019150509392505050565b61dead81565b60006012905090565b60006110b361101e612087565b84846001600061102c612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110ae9190613ca8565b61208f565b6001905092915050565b7f000000000000000000000000eb1e76957721a5a0d90345cd657a92e2942ead1d81565b600a60009054906101000a900460ff1681565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611152612087565b73ffffffffffffffffffffffffffffffffffffffff16611170611563565b73ffffffffffffffffffffffffffffffffffffffff16146111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613c59565b60405180910390fd5b81600d8190555080600c81905550600c54600d546111e49190613ca8565b600b81905550600a600b541115611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122790613d28565b60405180910390fd5b5050565b600e5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61129d612087565b73ffffffffffffffffffffffffffffffffffffffff166112bb611563565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613c59565b60405180910390fd5b61131b6000612d6a565b565b6000611327612087565b73ffffffffffffffffffffffffffffffffffffffff16611345611563565b73ffffffffffffffffffffffffffffffffffffffff161461139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290613c59565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b6113c5612087565b73ffffffffffffffffffffffffffffffffffffffff166113e3611563565b73ffffffffffffffffffffffffffffffffffffffff1614611439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143090613c59565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61149c612087565b73ffffffffffffffffffffffffffffffffffffffff166114ba611563565b73ffffffffffffffffffffffffffffffffffffffff1614611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613c59565b60405180910390fd5b6001601660006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115bb612087565b73ffffffffffffffffffffffffffffffffffffffff166115d9611563565b73ffffffffffffffffffffffffffffffffffffffff161461162f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162690613c59565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461165b90613d77565b80601f016020809104026020016040519081016040528092919081815260200182805461168790613d77565b80156116d45780601f106116a9576101008083540402835291602001916116d4565b820191906000526020600020905b8154815290600101906020018083116116b757829003601f168201915b5050505050905090565b6116e6612087565b73ffffffffffffffffffffffffffffffffffffffff16611704611563565b73ffffffffffffffffffffffffffffffffffffffff161461175a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175190613c59565b60405180910390fd5b7f000000000000000000000000eb1e76957721a5a0d90345cd657a92e2942ead1d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613ff8565b60405180910390fd5b6117f28282612e30565b5050565b600d5481565b60125481565b60105481565b60008060016000611817612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb9061408a565b60405180910390fd5b6118e86118df612087565b8585840361208f565b600191505092915050565b6000611907611900612087565b8484612258565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b601660009054906101000a900460ff1681565b61197f612087565b73ffffffffffffffffffffffffffffffffffffffff1661199d611563565b73ffffffffffffffffffffffffffffffffffffffff16146119f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ea90613c59565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a9091906138c8565b60405180910390a25050565b611aa4612087565b73ffffffffffffffffffffffffffffffffffffffff16611ac2611563565b73ffffffffffffffffffffffffffffffffffffffff1614611b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0f90613c59565b60405180910390fd5b670de0b6b3a76400006103e86005611b2e610deb565b611b389190613da8565b611b429190613e31565b611b4c9190613e31565b811015611b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b859061411c565b60405180910390fd5b670de0b6b3a764000081611ba29190613da8565b60098190555050565b60075481565b6000611bbb612087565b73ffffffffffffffffffffffffffffffffffffffff16611bd9611563565b73ffffffffffffffffffffffffffffffffffffffff1614611c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2690613c59565b60405180910390fd5b620186a06001611c3d610deb565b611c479190613da8565b611c519190613e31565b821015611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a906141ae565b60405180910390fd5b6103e86005611ca0610deb565b611caa9190613da8565b611cb49190613e31565b821115611cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ced90614240565b60405180910390fd5b8160088190555060019050919050565b600b5481565b611d14612087565b73ffffffffffffffffffffffffffffffffffffffff16611d32611563565b73ffffffffffffffffffffffffffffffffffffffff1614611d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7f90613c59565b60405180910390fd5b6000601660006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a60019054906101000a900460ff16611e4557600080fd5b7f0000000000000000000000006f071df1c99285f29e3ecbc2c20fc67aa380764f73ffffffffffffffffffffffffffffffffffffffff16635b0ae30e611e89612087565b30846040518463ffffffff1660e01b8152600401611ea99392919061426f565b6020604051808303816000875af1158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eec91906142bb565b15611f5157600160156000611eff612087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60085481565b600c5481565b611f68612087565b73ffffffffffffffffffffffffffffffffffffffff16611f86611563565b73ffffffffffffffffffffffffffffffffffffffff1614611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613c59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061435a565b60405180910390fd5b61205481612d6a565b50565b7f0000000000000000000000006f071df1c99285f29e3ecbc2c20fc67aa380764f81565b600f5481565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f5906143ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361216d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121649061447e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161224b9190613999565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be90614510565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232d906145a2565b60405180910390fd5b6000810361234f5761234a83836000612ed1565b612d65565b600a60009054906101000a900460ff16156128f35761236c611563565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123da57506123aa611563565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124135750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124665750600560149054906101000a900460ff16155b156128f257600a60019054906101000a900460ff1661256057601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125205750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61255f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125569061460e565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126035750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561275357601660009054906101000a900460ff16156126b15760011515601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a79061467a565b60405180910390fd5b5b6007548111156126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed9061470c565b60405180910390fd5b6009546127028361124d565b8261270d9190613ca8565b111561274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590614778565b60405180910390fd5b6128f1565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f65750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561284557600754811115612840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128379061480a565b60405180910390fd5b6128f0565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128ef576009546128a28361124d565b826128ad9190613ca8565b11156128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e590614778565b60405180910390fd5b5b5b5b5b5b60006128fe3061124d565b9050600060085482101590508080156129235750600a60029054906101000a900460ff165b801561293c5750600560149054906101000a900460ff16155b80156129925750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e85750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a3e5750601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a82576001600560146101000a81548160ff021916908315150217905550612a66613150565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b385750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b4257600090505b60008115612d5557601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ba557506000600e54115b15612c3f57612bd26064612bc4600e548861335d90919063ffffffff16565b61337390919063ffffffff16565b9050600e54600f5482612be59190613da8565b612bef9190613e31565b60116000828254612c009190613ca8565b92505081905550600e5460105482612c189190613da8565b612c229190613e31565b60126000828254612c339190613ca8565b92505081905550612d31565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c9a57506000600b54115b15612d3057612cc76064612cb9600b548861335d90919063ffffffff16565b61337390919063ffffffff16565b9050600b54600c5482612cda9190613da8565b612ce49190613e31565b60116000828254612cf59190613ca8565b92505081905550600b54600d5482612d0d9190613da8565b612d179190613e31565b60126000828254612d289190613ca8565b925050819055505b5b6000811115612d4657612d45873083612ed1565b5b8085612d52919061482a565b94505b612d60878787612ed1565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3790614510565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa6906145a2565b60405180910390fd5b612fba838383613389565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613037906148d0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130d39190613ca8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131379190613999565b60405180910390a361314a84848461338e565b50505050565b600061315b3061124d565b9050600060125460115461316f9190613ca8565b90506000808314806131815750600082145b1561318e5750505061335b565b601460085461319d9190613da8565b8311156131b65760146008546131b39190613da8565b92505b6000600283601154866131c99190613da8565b6131d39190613e31565b6131dd9190613e31565b905060006131f4828661339390919063ffffffff16565b90506000479050613204826133a9565b6000613219824761339390919063ffffffff16565b90506000613244876132366012548561335d90919063ffffffff16565b61337390919063ffffffff16565b905060008183613254919061482a565b9050600060118190555060006012819055506000861180156132765750600081115b156132c35761328586826135e6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826011546040516132ba939291906148f0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161330990614958565b60006040518083038185875af1925050503d8060008114613346576040519150601f19603f3d011682016040523d82523d6000602084013e61334b565b606091505b5050809750505050505050505050505b565b6000818361336b9190613da8565b905092915050565b600081836133819190613e31565b905092915050565b505050565b505050565b600081836133a1919061482a565b905092915050565b6000600267ffffffffffffffff8111156133c6576133c561496d565b5b6040519080825280602002602001820160405280156133f45781602001602082028036833780820191505090505b509050308160008151811061340c5761340b61499c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d591906149e0565b816001815181106134e9576134e861499c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061354e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461208f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016135b0959493929190614b06565b600060405180830381600087803b1580156135ca57600080fd5b505af11580156135de573d6000803e3d6000fd5b505050505050565b613611307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461208f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161369896959493929190614b60565b60606040518083038185885af11580156136b6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136db9190614bd6565b5050505050565b600080fd5b6000819050919050565b6136fa816136e7565b811461370557600080fd5b50565b600081359050613717816136f1565b92915050565b60008060408385031215613734576137336136e2565b5b600061374285828601613708565b925050602061375385828601613708565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561379757808201518184015260208101905061377c565b60008484015250505050565b6000601f19601f8301169050919050565b60006137bf8261375d565b6137c98185613768565b93506137d9818560208601613779565b6137e2816137a3565b840191505092915050565b6000602082019050818103600083015261380781846137b4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061383a8261380f565b9050919050565b61384a8161382f565b811461385557600080fd5b50565b60008135905061386781613841565b92915050565b60008060408385031215613884576138836136e2565b5b600061389285828601613858565b92505060206138a385828601613708565b9150509250929050565b60008115159050919050565b6138c2816138ad565b82525050565b60006020820190506138dd60008301846138b9565b92915050565b6000602082840312156138f9576138f86136e2565b5b600061390784828501613858565b91505092915050565b6000819050919050565b600061393561393061392b8461380f565b613910565b61380f565b9050919050565b60006139478261391a565b9050919050565b60006139598261393c565b9050919050565b6139698161394e565b82525050565b60006020820190506139846000830184613960565b92915050565b613993816136e7565b82525050565b60006020820190506139ae600083018461398a565b92915050565b6000602082840312156139ca576139c96136e2565b5b60006139d884828501613708565b91505092915050565b6000806000606084860312156139fa576139f96136e2565b5b6000613a0886828701613858565b9350506020613a1986828701613858565b9250506040613a2a86828701613708565b9150509250925092565b613a3d8161382f565b82525050565b6000602082019050613a586000830184613a34565b92915050565b600060ff82169050919050565b613a7481613a5e565b82525050565b6000602082019050613a8f6000830184613a6b565b92915050565b613a9e816138ad565b8114613aa957600080fd5b50565b600081359050613abb81613a95565b92915050565b60008060408385031215613ad857613ad76136e2565b5b6000613ae685828601613858565b9250506020613af785828601613aac565b9150509250929050565b600060208284031215613b1757613b166136e2565b5b6000613b2584828501613aac565b91505092915050565b60008060408385031215613b4557613b446136e2565b5b6000613b5385828601613858565b9250506020613b6485828601613858565b9150509250929050565b6000819050919050565b613b8181613b6e565b8114613b8c57600080fd5b50565b600081359050613b9e81613b78565b92915050565b600060208284031215613bba57613bb96136e2565b5b6000613bc884828501613b8f565b91505092915050565b6000613bdc8261393c565b9050919050565b613bec81613bd1565b82525050565b6000602082019050613c076000830184613be3565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c43602083613768565b9150613c4e82613c0d565b602082019050919050565b60006020820190508181036000830152613c7281613c36565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cb3826136e7565b9150613cbe836136e7565b9250828201905080821115613cd657613cd5613c79565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613d12601d83613768565b9150613d1d82613cdc565b602082019050919050565b60006020820190508181036000830152613d4181613d05565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d8f57607f821691505b602082108103613da257613da1613d48565b5b50919050565b6000613db3826136e7565b9150613dbe836136e7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613df757613df6613c79565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e3c826136e7565b9150613e47836136e7565b925082613e5757613e56613e02565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613ebe602f83613768565b9150613ec982613e62565b604082019050919050565b60006020820190508181036000830152613eed81613eb1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f50602883613768565b9150613f5b82613ef4565b604082019050919050565b60006020820190508181036000830152613f7f81613f43565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fe2603983613768565b9150613fed82613f86565b604082019050919050565b6000602082019050818103600083015261401181613fd5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614074602583613768565b915061407f82614018565b604082019050919050565b600060208201905081810360008301526140a381614067565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614106602483613768565b9150614111826140aa565b604082019050919050565b60006020820190508181036000830152614135816140f9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614198603583613768565b91506141a38261413c565b604082019050919050565b600060208201905081810360008301526141c78161418b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061422a603483613768565b9150614235826141ce565b604082019050919050565b600060208201905081810360008301526142598161421d565b9050919050565b61426981613b6e565b82525050565b60006060820190506142846000830186613a34565b6142916020830185613a34565b61429e6040830184614260565b949350505050565b6000815190506142b581613a95565b92915050565b6000602082840312156142d1576142d06136e2565b5b60006142df848285016142a6565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614344602683613768565b915061434f826142e8565b604082019050919050565b6000602082019050818103600083015261437381614337565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143d6602483613768565b91506143e18261437a565b604082019050919050565b60006020820190508181036000830152614405816143c9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614468602283613768565b91506144738261440c565b604082019050919050565b600060208201905081810360008301526144978161445b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144fa602583613768565b91506145058261449e565b604082019050919050565b60006020820190508181036000830152614529816144ed565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061458c602383613768565b915061459782614530565b604082019050919050565b600060208201905081810360008301526145bb8161457f565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145f8601683613768565b9150614603826145c2565b602082019050919050565b60006020820190508181036000830152614627816145eb565b9050919050565b7f417070726f76616c20666f722054726164696e672072657175697265642e0000600082015250565b6000614664601e83613768565b915061466f8261462e565b602082019050919050565b6000602082019050818103600083015261469381614657565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006146f6603583613768565b91506147018261469a565b604082019050919050565b60006020820190508181036000830152614725816146e9565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614762601383613768565b915061476d8261472c565b602082019050919050565b6000602082019050818103600083015261479181614755565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006147f4603683613768565b91506147ff82614798565b604082019050919050565b60006020820190508181036000830152614823816147e7565b9050919050565b6000614835826136e7565b9150614840836136e7565b925082820390508181111561485857614857613c79565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006148ba602683613768565b91506148c58261485e565b604082019050919050565b600060208201905081810360008301526148e9816148ad565b9050919050565b6000606082019050614905600083018661398a565b614912602083018561398a565b61491f604083018461398a565b949350505050565b600081905092915050565b50565b6000614942600083614927565b915061494d82614932565b600082019050919050565b600061496382614935565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506149da81613841565b92915050565b6000602082840312156149f6576149f56136e2565b5b6000614a04848285016149cb565b91505092915050565b6000819050919050565b6000614a32614a2d614a2884614a0d565b613910565b6136e7565b9050919050565b614a4281614a17565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a7d8161382f565b82525050565b6000614a8f8383614a74565b60208301905092915050565b6000602082019050919050565b6000614ab382614a48565b614abd8185614a53565b9350614ac883614a64565b8060005b83811015614af9578151614ae08882614a83565b9750614aeb83614a9b565b925050600181019050614acc565b5085935050505092915050565b600060a082019050614b1b600083018861398a565b614b286020830187614a39565b8181036040830152614b3a8186614aa8565b9050614b496060830185613a34565b614b56608083018461398a565b9695505050505050565b600060c082019050614b756000830189613a34565b614b82602083018861398a565b614b8f6040830187614a39565b614b9c6060830186614a39565b614ba96080830185613a34565b614bb660a083018461398a565b979650505050505050565b600081519050614bd0816136f1565b92915050565b600080600060608486031215614bef57614bee6136e2565b5b6000614bfd86828701614bc1565b9350506020614c0e86828701614bc1565b9250506040614c1f86828701614bc1565b915050925092509256fea2646970667358221220d4f33628511899b2e8d20056d96bde6582315cd507bb238fa67efcd15eb82f2764736f6c63430008100033

Deployed Bytecode Sourcemap

32791:14288:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39177:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9542:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11709:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33831:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32867:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10662:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33615:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37750:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12360:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32970:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10504:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13261:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32925:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33287:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40011:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38858:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33511:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33367:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10833:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2777:103;;;;;;;;;;;;;:::i;:::-;;37053:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38297:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36853:148;;;;;;;;;;;;;:::i;:::-;;2126:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33139:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38560:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9761:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39503:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33478:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33655:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33584:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13979:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11173:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33929:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34180:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33327:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33984:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38668:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38033:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33172:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37244:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33407:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40400:91;;;;;;;;;;;;;:::i;:::-;;11411:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40145:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33214:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33441:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3035:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33058:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33546:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33254:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39177:318;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39309:7:::1;39296:10;:20;;;;39346:13;39327:16;:32;;;;39399:16;;39386:10;;:29;;;;:::i;:::-;39370:13;:45;;;;39451:2;39434:13;;:19;;39426:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39177:318:::0;;:::o;9542:100::-;9596:13;9629:5;9622:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9542:100;:::o;11709:169::-;11792:4;11809:39;11818:12;:10;:12::i;:::-;11832:7;11841:6;11809:8;:39::i;:::-;11866:4;11859:11;;11709:169;;;;:::o;33831:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32867:51::-;;;:::o;10662:108::-;10723:7;10750:12;;10743:19;;10662:108;:::o;33615:33::-;;;;:::o;37750:275::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:4:::1;37879;37874:1;37858:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37857:26;;;;:::i;:::-;37856:35;;;;:::i;:::-;37846:6;:45;;37824:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38010:6;38000;:17;;;;:::i;:::-;37977:20;:40;;;;37750:275:::0;:::o;12360:492::-;12500:4;12517:36;12527:6;12535:9;12546:6;12517:9;:36::i;:::-;12566:24;12593:11;:19;12605:6;12593:19;;;;;;;;;;;;;;;:33;12613:12;:10;:12::i;:::-;12593:33;;;;;;;;;;;;;;;;12566:60;;12665:6;12645:16;:26;;12637:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12752:57;12761:6;12769:12;:10;:12::i;:::-;12802:6;12783:16;:25;12752:8;:57::i;:::-;12840:4;12833:11;;;12360:492;;;;;:::o;32970:53::-;33016:6;32970:53;:::o;10504:93::-;10562:5;10587:2;10580:9;;10504:93;:::o;13261:215::-;13349:4;13366:80;13375:12;:10;:12::i;:::-;13389:7;13435:10;13398:11;:25;13410:12;:10;:12::i;:::-;13398:25;;;;;;;;;;;;;;;:34;13424:7;13398:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13366:8;:80::i;:::-;13464:4;13457:11;;13261:215;;;;:::o;32925:38::-;;;:::o;33287:33::-;;;;;;;;;;;;;:::o;40011:126::-;40077:4;40101:19;:28;40121:7;40101:28;;;;;;;;;;;;;;;;;;;;;;;;;40094:35;;40011:126;;;:::o;38858:311::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38988:7:::1;38976:9;:19;;;;39024:13;39006:15;:31;;;;39075:15;;39063:9;;:27;;;;:::i;:::-;39048:12;:42;;;;39125:2;39109:12;;:18;;39101:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38858:311:::0;;:::o;33511:28::-;;;;:::o;33367:31::-;;;;;;;;;;;;;:::o;10833:127::-;10907:7;10934:9;:18;10944:7;10934:18;;;;;;;;;;;;;;;;10927:25;;10833:127;;;:::o;2777:103::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2842:30:::1;2869:1;2842:18;:30::i;:::-;2777:103::o:0;37053:121::-;37105:4;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37139:5:::1;37122:14;;:22;;;;;;;;;;;;;;;;;;37162:4;37155:11;;37053:121:::0;:::o;38297:167::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38452:4:::1;38410:31;:39;38442:6;38410:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38297:167:::0;;:::o;36853:148::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36929:4:::1;36908:18;;:25;;;;;;;;;;;;;;;;;;36960:4;36944:13;;:20;;;;;;;;;;;;;;;;;;36989:4;36975:11;;:18;;;;;;;;;;;;;;;;;;36853:148::o:0;2126:87::-;2172:7;2199:6;;;;;;;;;;;2192:13;;2126:87;:::o;33139:24::-;;;;;;;;;;;;;:::o;38560:100::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38645:7:::1;38631:11;;:21;;;;;;;;;;;;;;;;;;38560:100:::0;:::o;9761:104::-;9817:13;9850:7;9843:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9761:104;:::o;39503:304::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39647:13:::1;39639:21;;:4;:21;;::::0;39617:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39758:41;39787:4;39793:5;39758:28;:41::i;:::-;39503:304:::0;;:::o;33478:24::-;;;;:::o;33655:27::-;;;;:::o;33584:25::-;;;;:::o;13979:413::-;14072:4;14089:24;14116:11;:25;14128:12;:10;:12::i;:::-;14116:25;;;;;;;;;;;;;;;:34;14142:7;14116:34;;;;;;;;;;;;;;;;14089:61;;14189:15;14169:16;:35;;14161:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14282:67;14291:12;:10;:12::i;:::-;14305:7;14333:15;14314:16;:34;14282:8;:67::i;:::-;14380:4;14373:11;;;13979:413;;;;:::o;11173:175::-;11259:4;11276:42;11286:12;:10;:12::i;:::-;11300:9;11311:6;11276:9;:42::i;:::-;11336:4;11329:11;;11173:175;;;;:::o;33929:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;34180:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33327:33::-;;;;;;;;;;;;;:::o;33984:38::-;;;;;;;;;;;;;:::o;38668:182::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38784:8:::1;38753:19;:28;38773:7;38753:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38824:7;38808:34;;;38833:8;38808:34;;;;;;:::i;:::-;;;;;;;;38668:182:::0;;:::o;38033:256::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38173:4:::1;38165;38160:1;38144:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38143:26;;;;:::i;:::-;38142:35;;;;:::i;:::-;38132:6;:45;;38110:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38274:6;38264;:17;;;;:::i;:::-;38252:9;:29;;;;38033:256:::0;:::o;33172:35::-;;;;:::o;37244:497::-;37352:4;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37431:6:::1;37426:1;37410:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37409:28;;;;:::i;:::-;37396:9;:41;;37374:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37586:4;37581:1;37565:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37564:26;;;;:::i;:::-;37551:9;:39;;37529:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37702:9;37681:18;:30;;;;37729:4;37722:11;;37244:497:::0;;;:::o;33407:27::-;;;;:::o;40400:91::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40478:5:::1;40457:18;;:26;;;;;;;;;;;;;;;;;;40400:91::o:0;11411:151::-;11500:7;11527:11;:18;11539:5;11527:18;;;;;;;;;;;;;;;:27;11546:7;11527:27;;;;;;;;;;;;;;;;11520:34;;11411:151;;;;:::o;40145:247::-;40226:13;;;;;;;;;;;40204:46;;;;;;40265:6;:20;;;40286:12;:10;:12::i;:::-;40308:4;40314;40265:54;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40261:124;;;40369:4;40336:16;:30;40353:12;:10;:12::i;:::-;40336:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;40261:124;40145:247;:::o;33214:33::-;;;;:::o;33441:30::-;;;;:::o;3035:201::-;2357:12;:10;:12::i;:::-;2346:23;;:7;:5;:7::i;:::-;:23;;;2338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3144:1:::1;3124:22;;:8;:22;;::::0;3116:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3200:28;3219:8;3200:18;:28::i;:::-;3035:201:::0;:::o;33058:42::-;;;:::o;33546:31::-;;;;:::o;33254:24::-;;;;:::o;799:98::-;852:7;879:10;872:17;;799:98;:::o;17663:380::-;17816:1;17799:19;;:5;:19;;;17791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17897:1;17878:21;;:7;:21;;;17870:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17981:6;17951:11;:18;17963:5;17951:18;;;;;;;;;;;;;;;:27;17970:7;17951:27;;;;;;;;;;;;;;;:36;;;;18019:7;18003:32;;18012:5;18003:32;;;18028:6;18003:32;;;;;;:::i;:::-;;;;;;;;17663:380;;;:::o;40503:4030::-;40651:1;40635:18;;:4;:18;;;40627:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40728:1;40714:16;;:2;:16;;;40706:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40797:1;40787:6;:11;40783:93;;40815:28;40831:4;40837:2;40841:1;40815:15;:28::i;:::-;40858:7;;40783:93;40892:14;;;;;;;;;;;40888:1946;;;40953:7;:5;:7::i;:::-;40945:15;;:4;:15;;;;:49;;;;;40987:7;:5;:7::i;:::-;40981:13;;:2;:13;;;;40945:49;:86;;;;;41029:1;41015:16;;:2;:16;;;;40945:86;:128;;;;;41066:6;41052:21;;:2;:21;;;;40945:128;:158;;;;;41095:8;;;;;;;;;;;41094:9;40945:158;40923:1900;;;41143:13;;;;;;;;;;;41138:223;;41215:19;:25;41235:4;41215:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41244:19;:23;41264:2;41244:23;;;;;;;;;;;;;;;;;;;;;;;;;41215:52;41181:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41138:223;41435:25;:31;41461:4;41435:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41492:31;:35;41524:2;41492:35;;;;;;;;;;;;;;;;;;;;;;;;;41491:36;41435:92;41409:1399;;;41574:18;;;;;;;;;;;41570:231;;;41683:4;41659:28;;:16;:20;41676:2;41659:20;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;41621:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;41570:231;41866:20;;41856:6;:30;;41822:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;42074:9;;42057:13;42067:2;42057:9;:13::i;:::-;42048:6;:22;;;;:::i;:::-;:35;;42014:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41409:1399;;;42252:25;:29;42278:2;42252:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42307:31;:37;42339:4;42307:37;;;;;;;;;;;;;;;;;;;;;;;;;42306:38;42252:92;42226:582;;;42431:20;;42421:6;:30;;42387:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;42226:582;;;42588:31;:35;42620:2;42588:35;;;;;;;;;;;;;;;;;;;;;;;;;42583:225;;42708:9;;42691:13;42701:2;42691:9;:13::i;:::-;42682:6;:22;;;;:::i;:::-;:35;;42648:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42583:225;42226:582;41409:1399;40923:1900;40888:1946;42846:28;42877:24;42895:4;42877:9;:24::i;:::-;42846:55;;42914:12;42953:18;;42929:20;:42;;42914:57;;43002:7;:35;;;;;43026:11;;;;;;;;;;;43002:35;:61;;;;;43055:8;;;;;;;;;;;43054:9;43002:61;:110;;;;;43081:25;:31;43107:4;43081:31;;;;;;;;;;;;;;;;;;;;;;;;;43080:32;43002:110;:153;;;;;43130:19;:25;43150:4;43130:25;;;;;;;;;;;;;;;;;;;;;;;;;43129:26;43002:153;:194;;;;;43173:19;:23;43193:2;43173:23;;;;;;;;;;;;;;;;;;;;;;;;;43172:24;43002:194;42984:326;;;43234:4;43223:8;;:15;;;;;;;;;;;;;;;;;;43255:10;:8;:10::i;:::-;43293:5;43282:8;;:16;;;;;;;;;;;;;;;;;;42984:326;43322:12;43338:8;;;;;;;;;;;43337:9;43322:24;;43448:19;:25;43468:4;43448:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43477:19;:23;43497:2;43477:23;;;;;;;;;;;;;;;;;;;;;;;;;43448:52;43444:100;;;43527:5;43517:15;;43444:100;43556:12;43661:7;43657:823;;;43713:25;:29;43739:2;43713:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43762:1;43746:13;;:17;43713:50;43709:622;;;43791:34;43821:3;43791:25;43802:13;;43791:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43784:41;;43894:13;;43874:16;;43867:4;:23;;;;:::i;:::-;43866:41;;;;:::i;:::-;43844:18;;:63;;;;;;;:::i;:::-;;;;;;;;43964:13;;43950:10;;43943:4;:17;;;;:::i;:::-;43942:35;;;;:::i;:::-;43926:12;;:51;;;;;;;:::i;:::-;;;;;;;;43709:622;;;44055:25;:31;44081:4;44055:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;44105:1;44090:12;;:16;44055:51;44051:280;;;44134:33;44163:3;44134:24;44145:12;;44134:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44127:40;;44235:12;;44216:15;;44209:4;:22;;;;:::i;:::-;44208:39;;;;:::i;:::-;44186:18;;:61;;;;;;;:::i;:::-;;;;;;;;44303:12;;44290:9;;44283:4;:16;;;;:::i;:::-;44282:33;;;;:::i;:::-;44266:12;;:49;;;;;;;:::i;:::-;;;;;;;;44051:280;43709:622;44358:1;44351:4;:8;44347:91;;;44380:42;44396:4;44410;44417;44380:15;:42::i;:::-;44347:91;44464:4;44454:14;;;;;:::i;:::-;;;43657:823;44492:33;44508:4;44514:2;44518:6;44492:15;:33::i;:::-;40616:3917;;;;40503:4030;;;;:::o;3396:191::-;3470:16;3489:6;;;;;;;;;;;3470:25;;3515:8;3506:6;;:17;;;;;;;;;;;;;;;;;;3570:8;3539:40;;3560:8;3539:40;;;;;;;;;;;;3459:128;3396:191;:::o;39815:188::-;39932:5;39898:25;:31;39924:4;39898:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39989:5;39955:40;;39983:4;39955:40;;;;;;;;;;;;39815:188;;:::o;14882:733::-;15040:1;15022:20;;:6;:20;;;15014:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15124:1;15103:23;;:9;:23;;;15095:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15179:47;15200:6;15208:9;15219:6;15179:20;:47::i;:::-;15239:21;15263:9;:17;15273:6;15263:17;;;;;;;;;;;;;;;;15239:41;;15316:6;15299:13;:23;;15291:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15437:6;15421:13;:22;15401:9;:17;15411:6;15401:17;;;;;;;;;;;;;;;:42;;;;15489:6;15465:9;:20;15475:9;15465:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15530:9;15513:35;;15522:6;15513:35;;;15541:6;15513:35;;;;;;:::i;:::-;;;;;;;;15561:46;15581:6;15589:9;15600:6;15561:19;:46::i;:::-;15003:612;14882:733;;;:::o;45661:1413::-;45700:23;45726:24;45744:4;45726:9;:24::i;:::-;45700:50;;45761:25;45810:12;;45789:18;;:33;;;;:::i;:::-;45761:61;;45833:12;45881:1;45862:15;:20;:46;;;;45907:1;45886:17;:22;45862:46;45858:85;;;45925:7;;;;;45858:85;45998:2;45977:18;;:23;;;;:::i;:::-;45959:15;:41;45955:115;;;46056:2;46035:18;;:23;;;;:::i;:::-;46017:41;;45955:115;46131:23;46218:1;46198:17;46176:18;;46158:15;:36;;;;:::i;:::-;46157:58;;;;:::i;:::-;:62;;;;:::i;:::-;46131:88;;46230:26;46259:36;46279:15;46259;:19;;:36;;;;:::i;:::-;46230:65;;46308:25;46336:21;46308:49;;46370:36;46387:18;46370:16;:36::i;:::-;46419:18;46440:44;46466:17;46440:21;:25;;:44;;;;:::i;:::-;46419:65;;46498:17;46518:51;46551:17;46518:28;46533:12;;46518:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;46498:71;;46582:23;46621:9;46608:10;:22;;;;:::i;:::-;46582:48;;46664:1;46643:18;:22;;;;46691:1;46676:12;:16;;;;46727:1;46709:15;:19;:42;;;;;46750:1;46732:15;:19;46709:42;46705:278;;;46768:46;46781:15;46798;46768:12;:46::i;:::-;46834:137;46867:18;46904:15;46938:18;;46834:137;;;;;;;;:::i;:::-;;;;;;;;46705:278;47017:9;;;;;;;;;;;47009:23;;47040:21;47009:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46995:71;;;;;45689:1385;;;;;;;;;45661:1413;:::o;23116:98::-;23174:7;23205:1;23201;:5;;;;:::i;:::-;23194:12;;23116:98;;;;:::o;23515:::-;23573:7;23604:1;23600;:5;;;;:::i;:::-;23593:12;;23515:98;;;;:::o;18643:125::-;;;;:::o;19372:124::-;;;;:::o;22759:98::-;22817:7;22848:1;22844;:5;;;;:::i;:::-;22837:12;;22759:98;;;;:::o;44541:589::-;44667:21;44705:1;44691:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44667:40;;44736:4;44718;44723:1;44718:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44762:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44752:4;44757:1;44752:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44797:62;44814:4;44829:15;44847:11;44797:8;:62::i;:::-;44898:15;:66;;;44979:11;45005:1;45049:4;45076;45096:15;44898:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44596:534;44541:589;:::o;45138:515::-;45286:62;45303:4;45318:15;45336:11;45286:8;:62::i;:::-;45391:15;:31;;;45430:9;45463:4;45483:11;45509:1;45552;45595:9;;;;;;;;;;;45619:15;45391:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45138:515;;:::o;88:117:1:-;197:1;194;187: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:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:474::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:53;8846:7;8837:6;8826:9;8822:22;8801:53;:::i;:::-;8791:63;;8746:118;8397:474;;;;;:::o;8877:77::-;8914:7;8943:5;8932:16;;8877:77;;;:::o;8960:122::-;9033:24;9051:5;9033:24;:::i;:::-;9026:5;9023:35;9013:63;;9072:1;9069;9062:12;9013:63;8960:122;:::o;9088:139::-;9134:5;9172:6;9159:20;9150:29;;9188:33;9215:5;9188:33;:::i;:::-;9088:139;;;;:::o;9233:329::-;9292:6;9341:2;9329:9;9320:7;9316:23;9312:32;9309:119;;;9347:79;;:::i;:::-;9309:119;9467:1;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9438:117;9233:329;;;;:::o;9568:153::-;9645:9;9678:37;9709:5;9678:37;:::i;:::-;9665:50;;9568:153;;;:::o;9727:185::-;9841:64;9899:5;9841:64;:::i;:::-;9836:3;9829:77;9727:185;;:::o;9918:276::-;10038:4;10076:2;10065:9;10061:18;10053:26;;10089:98;10184:1;10173:9;10169:17;10160:6;10089:98;:::i;:::-;9918:276;;;;:::o;10200:182::-;10340:34;10336:1;10328:6;10324:14;10317:58;10200:182;:::o;10388:366::-;10530:3;10551:67;10615:2;10610:3;10551:67;:::i;:::-;10544:74;;10627:93;10716:3;10627:93;:::i;:::-;10745:2;10740:3;10736:12;10729:19;;10388:366;;;:::o;10760:419::-;10926:4;10964:2;10953:9;10949:18;10941:26;;11013:9;11007:4;11003:20;10999:1;10988:9;10984:17;10977:47;11041:131;11167:4;11041:131;:::i;:::-;11033:139;;10760:419;;;:::o;11185:180::-;11233:77;11230:1;11223:88;11330:4;11327:1;11320:15;11354:4;11351:1;11344:15;11371:191;11411:3;11430:20;11448:1;11430:20;:::i;:::-;11425:25;;11464:20;11482:1;11464:20;:::i;:::-;11459:25;;11507:1;11504;11500:9;11493:16;;11528:3;11525:1;11522:10;11519:36;;;11535:18;;:::i;:::-;11519:36;11371:191;;;;:::o;11568:179::-;11708:31;11704:1;11696:6;11692:14;11685:55;11568:179;:::o;11753:366::-;11895:3;11916:67;11980:2;11975:3;11916:67;:::i;:::-;11909:74;;11992:93;12081:3;11992:93;:::i;:::-;12110:2;12105:3;12101:12;12094:19;;11753:366;;;:::o;12125:419::-;12291:4;12329:2;12318:9;12314:18;12306:26;;12378:9;12372:4;12368:20;12364:1;12353:9;12349:17;12342:47;12406:131;12532:4;12406:131;:::i;:::-;12398:139;;12125:419;;;:::o;12550:180::-;12598:77;12595:1;12588:88;12695:4;12692:1;12685:15;12719:4;12716:1;12709:15;12736:320;12780:6;12817:1;12811:4;12807:12;12797:22;;12864:1;12858:4;12854:12;12885:18;12875:81;;12941:4;12933:6;12929:17;12919:27;;12875:81;13003:2;12995:6;12992:14;12972:18;12969:38;12966:84;;13022:18;;:::i;:::-;12966:84;12787:269;12736:320;;;:::o;13062:348::-;13102:7;13125:20;13143:1;13125:20;:::i;:::-;13120:25;;13159:20;13177:1;13159:20;:::i;:::-;13154:25;;13347:1;13279:66;13275:74;13272:1;13269:81;13264:1;13257:9;13250:17;13246:105;13243:131;;;13354:18;;:::i;:::-;13243:131;13402:1;13399;13395:9;13384:20;;13062:348;;;;:::o;13416:180::-;13464:77;13461:1;13454:88;13561:4;13558:1;13551:15;13585:4;13582:1;13575:15;13602:185;13642:1;13659:20;13677:1;13659:20;:::i;:::-;13654:25;;13693:20;13711:1;13693:20;:::i;:::-;13688:25;;13732:1;13722:35;;13737:18;;:::i;:::-;13722:35;13779:1;13776;13772:9;13767:14;;13602:185;;;;:::o;13793:234::-;13933:34;13929:1;13921:6;13917:14;13910:58;14002:17;13997:2;13989:6;13985:15;13978:42;13793:234;:::o;14033:366::-;14175:3;14196:67;14260:2;14255:3;14196:67;:::i;:::-;14189:74;;14272:93;14361:3;14272:93;:::i;:::-;14390:2;14385:3;14381:12;14374:19;;14033:366;;;:::o;14405:419::-;14571:4;14609:2;14598:9;14594:18;14586:26;;14658:9;14652:4;14648:20;14644:1;14633:9;14629:17;14622:47;14686:131;14812:4;14686:131;:::i;:::-;14678:139;;14405:419;;;:::o;14830:227::-;14970:34;14966:1;14958:6;14954:14;14947:58;15039:10;15034:2;15026:6;15022:15;15015:35;14830:227;:::o;15063:366::-;15205:3;15226:67;15290:2;15285:3;15226:67;:::i;:::-;15219:74;;15302:93;15391:3;15302:93;:::i;:::-;15420:2;15415:3;15411:12;15404:19;;15063:366;;;:::o;15435:419::-;15601:4;15639:2;15628:9;15624:18;15616:26;;15688:9;15682:4;15678:20;15674:1;15663:9;15659:17;15652:47;15716:131;15842:4;15716:131;:::i;:::-;15708:139;;15435:419;;;:::o;15860:244::-;16000:34;15996:1;15988:6;15984:14;15977:58;16069:27;16064:2;16056:6;16052:15;16045:52;15860:244;:::o;16110:366::-;16252:3;16273:67;16337:2;16332:3;16273:67;:::i;:::-;16266:74;;16349:93;16438:3;16349:93;:::i;:::-;16467:2;16462:3;16458:12;16451:19;;16110:366;;;:::o;16482:419::-;16648:4;16686:2;16675:9;16671:18;16663:26;;16735:9;16729:4;16725:20;16721:1;16710:9;16706:17;16699:47;16763:131;16889:4;16763:131;:::i;:::-;16755:139;;16482:419;;;:::o;16907:224::-;17047:34;17043:1;17035:6;17031:14;17024:58;17116:7;17111:2;17103:6;17099:15;17092:32;16907:224;:::o;17137:366::-;17279:3;17300:67;17364:2;17359:3;17300:67;:::i;:::-;17293:74;;17376:93;17465:3;17376:93;:::i;:::-;17494:2;17489:3;17485:12;17478:19;;17137:366;;;:::o;17509:419::-;17675:4;17713:2;17702:9;17698:18;17690:26;;17762:9;17756:4;17752:20;17748:1;17737:9;17733:17;17726:47;17790:131;17916:4;17790:131;:::i;:::-;17782:139;;17509:419;;;:::o;17934:223::-;18074:34;18070:1;18062:6;18058:14;18051:58;18143:6;18138:2;18130:6;18126:15;18119:31;17934:223;:::o;18163:366::-;18305:3;18326:67;18390:2;18385:3;18326:67;:::i;:::-;18319:74;;18402:93;18491:3;18402:93;:::i;:::-;18520:2;18515:3;18511:12;18504:19;;18163:366;;;:::o;18535:419::-;18701:4;18739:2;18728:9;18724:18;18716:26;;18788:9;18782:4;18778:20;18774:1;18763:9;18759:17;18752:47;18816:131;18942:4;18816:131;:::i;:::-;18808:139;;18535:419;;;:::o;18960:240::-;19100:34;19096:1;19088:6;19084:14;19077:58;19169:23;19164:2;19156:6;19152:15;19145:48;18960:240;:::o;19206:366::-;19348:3;19369:67;19433:2;19428:3;19369:67;:::i;:::-;19362:74;;19445:93;19534:3;19445:93;:::i;:::-;19563:2;19558:3;19554:12;19547:19;;19206:366;;;:::o;19578:419::-;19744:4;19782:2;19771:9;19767:18;19759:26;;19831:9;19825:4;19821:20;19817:1;19806:9;19802:17;19795:47;19859:131;19985:4;19859:131;:::i;:::-;19851:139;;19578:419;;;:::o;20003:239::-;20143:34;20139:1;20131:6;20127:14;20120:58;20212:22;20207:2;20199:6;20195:15;20188:47;20003:239;:::o;20248:366::-;20390:3;20411:67;20475:2;20470:3;20411:67;:::i;:::-;20404:74;;20487:93;20576:3;20487:93;:::i;:::-;20605:2;20600:3;20596:12;20589:19;;20248:366;;;:::o;20620:419::-;20786:4;20824:2;20813:9;20809:18;20801:26;;20873:9;20867:4;20863:20;20859:1;20848:9;20844:17;20837:47;20901:131;21027:4;20901:131;:::i;:::-;20893:139;;20620:419;;;:::o;21045:118::-;21132:24;21150:5;21132:24;:::i;:::-;21127:3;21120:37;21045:118;;:::o;21169:442::-;21318:4;21356:2;21345:9;21341:18;21333:26;;21369:71;21437:1;21426:9;21422:17;21413:6;21369:71;:::i;:::-;21450:72;21518:2;21507:9;21503:18;21494:6;21450:72;:::i;:::-;21532;21600:2;21589:9;21585:18;21576:6;21532:72;:::i;:::-;21169:442;;;;;;:::o;21617:137::-;21671:5;21702:6;21696:13;21687:22;;21718:30;21742:5;21718:30;:::i;:::-;21617:137;;;;:::o;21760:345::-;21827:6;21876:2;21864:9;21855:7;21851:23;21847:32;21844:119;;;21882:79;;:::i;:::-;21844:119;22002:1;22027:61;22080:7;22071:6;22060:9;22056:22;22027:61;:::i;:::-;22017:71;;21973:125;21760:345;;;;:::o;22111:225::-;22251:34;22247:1;22239:6;22235:14;22228:58;22320:8;22315:2;22307:6;22303:15;22296:33;22111:225;:::o;22342:366::-;22484:3;22505:67;22569:2;22564:3;22505:67;:::i;:::-;22498:74;;22581:93;22670:3;22581:93;:::i;:::-;22699:2;22694:3;22690:12;22683:19;;22342:366;;;:::o;22714:419::-;22880:4;22918:2;22907:9;22903:18;22895:26;;22967:9;22961:4;22957:20;22953:1;22942:9;22938:17;22931:47;22995:131;23121:4;22995:131;:::i;:::-;22987:139;;22714:419;;;:::o;23139:223::-;23279:34;23275:1;23267:6;23263:14;23256:58;23348:6;23343:2;23335:6;23331:15;23324:31;23139:223;:::o;23368:366::-;23510:3;23531:67;23595:2;23590:3;23531:67;:::i;:::-;23524:74;;23607:93;23696:3;23607:93;:::i;:::-;23725:2;23720:3;23716:12;23709:19;;23368:366;;;:::o;23740:419::-;23906:4;23944:2;23933:9;23929:18;23921:26;;23993:9;23987:4;23983:20;23979:1;23968:9;23964:17;23957:47;24021:131;24147:4;24021:131;:::i;:::-;24013:139;;23740:419;;;:::o;24165:221::-;24305:34;24301:1;24293:6;24289:14;24282:58;24374:4;24369:2;24361:6;24357:15;24350:29;24165:221;:::o;24392:366::-;24534:3;24555:67;24619:2;24614:3;24555:67;:::i;:::-;24548:74;;24631:93;24720:3;24631:93;:::i;:::-;24749:2;24744:3;24740:12;24733:19;;24392:366;;;:::o;24764:419::-;24930:4;24968:2;24957:9;24953:18;24945:26;;25017:9;25011:4;25007:20;25003:1;24992:9;24988:17;24981:47;25045:131;25171:4;25045:131;:::i;:::-;25037:139;;24764:419;;;:::o;25189:224::-;25329:34;25325:1;25317:6;25313:14;25306:58;25398:7;25393:2;25385:6;25381:15;25374:32;25189:224;:::o;25419:366::-;25561:3;25582:67;25646:2;25641:3;25582:67;:::i;:::-;25575:74;;25658:93;25747:3;25658:93;:::i;:::-;25776:2;25771:3;25767:12;25760:19;;25419:366;;;:::o;25791:419::-;25957:4;25995:2;25984:9;25980:18;25972:26;;26044:9;26038:4;26034:20;26030:1;26019:9;26015:17;26008:47;26072:131;26198:4;26072:131;:::i;:::-;26064:139;;25791:419;;;:::o;26216:222::-;26356:34;26352:1;26344:6;26340:14;26333:58;26425:5;26420:2;26412:6;26408:15;26401:30;26216:222;:::o;26444:366::-;26586:3;26607:67;26671:2;26666:3;26607:67;:::i;:::-;26600:74;;26683:93;26772:3;26683:93;:::i;:::-;26801:2;26796:3;26792:12;26785:19;;26444:366;;;:::o;26816:419::-;26982:4;27020:2;27009:9;27005:18;26997:26;;27069:9;27063:4;27059:20;27055:1;27044:9;27040:17;27033:47;27097:131;27223:4;27097:131;:::i;:::-;27089:139;;26816:419;;;:::o;27241:172::-;27381:24;27377:1;27369:6;27365:14;27358:48;27241:172;:::o;27419:366::-;27561:3;27582:67;27646:2;27641:3;27582:67;:::i;:::-;27575:74;;27658:93;27747:3;27658:93;:::i;:::-;27776:2;27771:3;27767:12;27760:19;;27419:366;;;:::o;27791:419::-;27957:4;27995:2;27984:9;27980:18;27972:26;;28044:9;28038:4;28034:20;28030:1;28019:9;28015:17;28008:47;28072:131;28198:4;28072:131;:::i;:::-;28064:139;;27791:419;;;:::o;28216:180::-;28356:32;28352:1;28344:6;28340:14;28333:56;28216:180;:::o;28402:366::-;28544:3;28565:67;28629:2;28624:3;28565:67;:::i;:::-;28558:74;;28641:93;28730:3;28641:93;:::i;:::-;28759:2;28754:3;28750:12;28743:19;;28402:366;;;:::o;28774:419::-;28940:4;28978:2;28967:9;28963:18;28955:26;;29027:9;29021:4;29017:20;29013:1;29002:9;28998:17;28991:47;29055:131;29181:4;29055:131;:::i;:::-;29047:139;;28774:419;;;:::o;29199:240::-;29339:34;29335:1;29327:6;29323:14;29316:58;29408:23;29403:2;29395:6;29391:15;29384:48;29199:240;:::o;29445:366::-;29587:3;29608:67;29672:2;29667:3;29608:67;:::i;:::-;29601:74;;29684:93;29773:3;29684:93;:::i;:::-;29802:2;29797:3;29793:12;29786:19;;29445:366;;;:::o;29817:419::-;29983:4;30021:2;30010:9;30006:18;29998:26;;30070:9;30064:4;30060:20;30056:1;30045:9;30041:17;30034:47;30098:131;30224:4;30098:131;:::i;:::-;30090:139;;29817:419;;;:::o;30242:169::-;30382:21;30378:1;30370:6;30366:14;30359:45;30242:169;:::o;30417:366::-;30559:3;30580:67;30644:2;30639:3;30580:67;:::i;:::-;30573:74;;30656:93;30745:3;30656:93;:::i;:::-;30774:2;30769:3;30765:12;30758:19;;30417:366;;;:::o;30789:419::-;30955:4;30993:2;30982:9;30978:18;30970:26;;31042:9;31036:4;31032:20;31028:1;31017:9;31013:17;31006:47;31070:131;31196:4;31070:131;:::i;:::-;31062:139;;30789:419;;;:::o;31214:241::-;31354:34;31350:1;31342:6;31338:14;31331:58;31423:24;31418:2;31410:6;31406:15;31399:49;31214:241;:::o;31461:366::-;31603:3;31624:67;31688:2;31683:3;31624:67;:::i;:::-;31617:74;;31700:93;31789:3;31700:93;:::i;:::-;31818:2;31813:3;31809:12;31802:19;;31461:366;;;:::o;31833:419::-;31999:4;32037:2;32026:9;32022:18;32014:26;;32086:9;32080:4;32076:20;32072:1;32061:9;32057:17;32050:47;32114:131;32240:4;32114:131;:::i;:::-;32106:139;;31833:419;;;:::o;32258:194::-;32298:4;32318:20;32336:1;32318:20;:::i;:::-;32313:25;;32352:20;32370:1;32352:20;:::i;:::-;32347:25;;32396:1;32393;32389:9;32381:17;;32420:1;32414:4;32411:11;32408:37;;;32425:18;;:::i;:::-;32408:37;32258:194;;;;:::o;32458:225::-;32598:34;32594:1;32586:6;32582:14;32575:58;32667:8;32662:2;32654:6;32650:15;32643:33;32458:225;:::o;32689:366::-;32831:3;32852:67;32916:2;32911:3;32852:67;:::i;:::-;32845:74;;32928:93;33017:3;32928:93;:::i;:::-;33046:2;33041:3;33037:12;33030:19;;32689:366;;;:::o;33061:419::-;33227:4;33265:2;33254:9;33250:18;33242:26;;33314:9;33308:4;33304:20;33300:1;33289:9;33285:17;33278:47;33342:131;33468:4;33342:131;:::i;:::-;33334:139;;33061:419;;;:::o;33486:442::-;33635:4;33673:2;33662:9;33658:18;33650:26;;33686:71;33754:1;33743:9;33739:17;33730:6;33686:71;:::i;:::-;33767:72;33835:2;33824:9;33820:18;33811:6;33767:72;:::i;:::-;33849;33917:2;33906:9;33902:18;33893:6;33849:72;:::i;:::-;33486:442;;;;;;:::o;33934:147::-;34035:11;34072:3;34057:18;;33934:147;;;;:::o;34087:114::-;;:::o;34207:398::-;34366:3;34387:83;34468:1;34463:3;34387:83;:::i;:::-;34380:90;;34479:93;34568:3;34479:93;:::i;:::-;34597:1;34592:3;34588:11;34581:18;;34207:398;;;:::o;34611:379::-;34795:3;34817:147;34960:3;34817:147;:::i;:::-;34810:154;;34981:3;34974:10;;34611:379;;;:::o;34996:180::-;35044:77;35041:1;35034:88;35141:4;35138:1;35131:15;35165:4;35162:1;35155:15;35182:180;35230:77;35227:1;35220:88;35327:4;35324:1;35317:15;35351:4;35348:1;35341:15;35368:143;35425:5;35456:6;35450:13;35441:22;;35472:33;35499:5;35472:33;:::i;:::-;35368:143;;;;:::o;35517:351::-;35587:6;35636:2;35624:9;35615:7;35611:23;35607:32;35604:119;;;35642:79;;:::i;:::-;35604:119;35762:1;35787:64;35843:7;35834:6;35823:9;35819:22;35787:64;:::i;:::-;35777:74;;35733:128;35517:351;;;;:::o;35874:85::-;35919:7;35948:5;35937:16;;35874:85;;;:::o;35965:158::-;36023:9;36056:61;36074:42;36083:32;36109:5;36083:32;:::i;:::-;36074:42;:::i;:::-;36056:61;:::i;:::-;36043:74;;35965:158;;;:::o;36129:147::-;36224:45;36263:5;36224:45;:::i;:::-;36219:3;36212:58;36129:147;;:::o;36282:114::-;36349:6;36383:5;36377:12;36367:22;;36282:114;;;:::o;36402:184::-;36501:11;36535:6;36530:3;36523:19;36575:4;36570:3;36566:14;36551:29;;36402:184;;;;:::o;36592:132::-;36659:4;36682:3;36674:11;;36712:4;36707:3;36703:14;36695:22;;36592:132;;;:::o;36730:108::-;36807:24;36825:5;36807:24;:::i;:::-;36802:3;36795:37;36730:108;;:::o;36844:179::-;36913:10;36934:46;36976:3;36968:6;36934:46;:::i;:::-;37012:4;37007:3;37003:14;36989:28;;36844:179;;;;:::o;37029:113::-;37099:4;37131;37126:3;37122:14;37114:22;;37029:113;;;:::o;37178:732::-;37297:3;37326:54;37374:5;37326:54;:::i;:::-;37396:86;37475:6;37470:3;37396:86;:::i;:::-;37389:93;;37506:56;37556:5;37506:56;:::i;:::-;37585:7;37616:1;37601:284;37626:6;37623:1;37620:13;37601:284;;;37702:6;37696:13;37729:63;37788:3;37773:13;37729:63;:::i;:::-;37722:70;;37815:60;37868:6;37815:60;:::i;:::-;37805:70;;37661:224;37648:1;37645;37641:9;37636:14;;37601:284;;;37605:14;37901:3;37894:10;;37302:608;;;37178:732;;;;:::o;37916:831::-;38179:4;38217:3;38206:9;38202:19;38194:27;;38231:71;38299:1;38288:9;38284:17;38275:6;38231:71;:::i;:::-;38312:80;38388:2;38377:9;38373:18;38364:6;38312:80;:::i;:::-;38439:9;38433:4;38429:20;38424:2;38413:9;38409:18;38402:48;38467:108;38570:4;38561:6;38467:108;:::i;:::-;38459:116;;38585:72;38653:2;38642:9;38638:18;38629:6;38585:72;:::i;:::-;38667:73;38735:3;38724:9;38720:19;38711:6;38667:73;:::i;:::-;37916:831;;;;;;;;:::o;38753:807::-;39002:4;39040:3;39029:9;39025:19;39017:27;;39054:71;39122:1;39111:9;39107:17;39098:6;39054:71;:::i;:::-;39135:72;39203:2;39192:9;39188:18;39179:6;39135:72;:::i;:::-;39217:80;39293:2;39282:9;39278:18;39269:6;39217:80;:::i;:::-;39307;39383:2;39372:9;39368:18;39359:6;39307:80;:::i;:::-;39397:73;39465:3;39454:9;39450:19;39441:6;39397:73;:::i;:::-;39480;39548:3;39537:9;39533:19;39524:6;39480:73;:::i;:::-;38753:807;;;;;;;;;:::o;39566:143::-;39623:5;39654:6;39648:13;39639:22;;39670:33;39697:5;39670:33;:::i;:::-;39566:143;;;;:::o;39715:663::-;39803:6;39811;39819;39868:2;39856:9;39847:7;39843:23;39839:32;39836:119;;;39874:79;;:::i;:::-;39836:119;39994:1;40019:64;40075:7;40066:6;40055:9;40051:22;40019:64;:::i;:::-;40009:74;;39965:128;40132:2;40158:64;40214:7;40205:6;40194:9;40190:22;40158:64;:::i;:::-;40148:74;;40103:129;40271:2;40297:64;40353:7;40344:6;40333:9;40329:22;40297:64;:::i;:::-;40287:74;;40242:129;39715:663;;;;;:::o

Swarm Source

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