Token NAPA Society

 

Overview [ERC-20]

Max Total Supply:
1,000,000,000 NAPA

Holders:
24 (0.00%)

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

NAPA Society is an innovative social media and crypto-based ecosystem that returns control and the benefits of using social media back to the user.

# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NAPA

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.0;
// SPDX-License-Identifier: GPL

library SafeMath {
  /**
   * @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) {
    uint256 c = a + b;
    require(c >= a, "SafeMath: addition overflow");

    return c;
  }

  /**
   * @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 sub(a, b, "SafeMath: subtraction overflow");
  }

  /**
   * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
   * overflow (when the result is negative).
   *
   * Counterpart to Solidity's `-` operator.
   *
   * Requirements:
   * - Subtraction cannot overflow.
   */
  function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;

    return c;
  }

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

    uint256 c = a * b;
    require(c / a == b, "SafeMath: multiplication overflow");

    return c;
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
    return div(a, b, "SafeMath: division by zero");
  }

  /**
   * @dev Returns the integer division of two unsigned integers. Reverts 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) {
    // Solidity only automatically asserts when dividing by 0
    require(b > 0, errorMessage);
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
  }

  /**
   * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
   * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

/*
 * @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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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


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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

    // uniswapV3 router address
    address public uniswapRouter;

    // treasury wallet
    address public treasuryWallet;

    // addresses that are excluded from buying and selling fees
    mapping (address => bool) private isExcludedFromFees;

    // store addresses that are automatic market maker pairs
    mapping (address => bool) public automatedMarketMakerPairs;

    // buy & sell fee
    uint256 internal buyFee;
    uint256 internal sellFee;
    
    // buy & sell limits
    uint256 public buyLimit;
    uint256 public sellLimit;

    // time lock
    bool public timeLimit = false;


    uint public buyTimeLock = 86400;
    uint public sellTimeLock = 86400;

    // pause trading
    bool public paused = false;

    mapping (address => uint256) _sellTime;
    mapping (address => uint256) _buyTime;

    // black listed address
    mapping(address => bool) public _isBlacklisted;

    // events

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

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

    event Blacklisted(address account);

    // constructor

    constructor() ERC20("NAPA Society", "NAPA") {
        buyFee = 1;
        sellFee = 2;

        treasuryWallet = address(0x2BC68c7D1a1DfFFE08F02e3eF3c7ED8d322B9CfB);
        address owner_ = address(0xC3330271fC4465f2481476AD96FcF635F07Aa2Dc);

        // exclude from paying fees
        excludeFromFees(address(this), true);
        excludeFromFees(owner_, true);
        excludeFromFees(treasuryWallet, true);

        buyLimit = 500000000000000000000;
        sellLimit = 500000000000000000000000;

        // minting only once when deployed.
        uint256 initialSupply = 1000000000 * (10 ** 18);

        _mint(owner_, initialSupply.mul(90).div(100));

        _mint(treasuryWallet, initialSupply.mul(10).div(100));

        transferOwnership(owner_);
    }

    function updateUniswapRouter(address newUniswapRouter) public onlyOwner {
        uniswapRouter = newUniswapRouter;
    }

    function updateTreasuryWallet(address newAddress) public onlyOwner {
        require(newAddress != treasuryWallet, "NAPA: The treasury wallet already has that address");
        emit UpdateTreasuryWallet(newAddress, treasuryWallet);
        treasuryWallet = newAddress;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(isExcludedFromFees[account] != excluded, "NAPA: Account is already the value of 'excluded'");
        isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(automatedMarketMakerPairs[pair] != value, "NAPA: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // functions

    function _isBuy(address from) internal view returns (bool) {
        // Transfer from pair is a buy swap
        return automatedMarketMakerPairs[from];
    }

    function _isSell(address from, address to) internal view returns (bool) {
        // Transfer to pair from non-router address is a sell swap
        return from != uniswapRouter && automatedMarketMakerPairs[to];
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(!paused, "Trading is paused");
        require(from != to, "Sending to yourself is disallowed");
        require(!_isBlacklisted[from] && !_isBlacklisted[to],    "Blacklisted account");
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
 
        // indicates if fee should be deducted from transfer
        bool takeFee = true;

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

        _validateTransfer(from, to, amount, takeFee);

        if(timeLimit){
            _validateTime(from , to , takeFee);
        }

        if (_isBuy(from) && !isExcludedFromFees[to]) {
            uint256 buyingFee = amount.mul(buyFee).div(100);

            amount -= buyingFee;

            super._transfer(from, treasuryWallet, buyingFee);
        }

        if (_isSell(from, to) && !isExcludedFromFees[from]) {
            uint256 sellingFee = amount.mul(sellFee).div(100);

            amount -= sellingFee;

            super._transfer(from, treasuryWallet, sellingFee);
        }

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

    function _validateTransfer(address sender,address recipient,uint256 amount,bool takeFee ) private view {
        // Excluded addresses don't have limits
        if (takeFee) {
            if (_isBuy(sender) && buyLimit != 0) {
                require(amount <= buyLimit, "Buy amount exceeds limit");
            } else if (_isSell(sender, recipient) && sellLimit != 0) {
                require(amount <= sellLimit, "Sell amount exceeds limit");
            }
        }
    }

    function _validateTime(address sender, address recipient, bool takeFee) private {   
         // Excluded addresses don't have time limits
        if (takeFee) {
            if (_isBuy(sender)) {
                require(_buyTime[recipient] + buyTimeLock <= block.timestamp, "wait 4 minutes to buy again");
                _buyTime[recipient] = block.timestamp;
            } else if (_isSell(sender, recipient)) {
                require(_sellTime[sender] + sellTimeLock <= block.timestamp, "wait 5 minutes to sell again");
                _sellTime[sender] = block.timestamp;
            }
        }
    }

    function updateBuyLimit(uint256 limit) external onlyOwner {
        buyLimit = limit;
    }

    function updateSellLimit(uint256 limit) external onlyOwner {
        sellLimit = limit;
    }

    function addToBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = true;
        emit Blacklisted(account);
    }

    function removeFromBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

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

    function updateBuyFee(uint256 _fee) external onlyOwner {
        buyFee = _fee;
    }

    function updateSellFee(uint256 _fee) external onlyOwner {
        sellFee = _fee;
    }

    function updateBuyTimeLimit(uint256 _time) external onlyOwner {
        buyTimeLock = _time;
    }

    function updateSellTimeLimit(uint256 _time) external onlyOwner {
        sellTimeLock = _time;
    }

    function updatePauseState() external onlyOwner {
        paused = !paused;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Blacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":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":"UpdateTreasuryWallet","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTimeLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTimeLock","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"updateBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"updateBuyTimeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePauseState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"updateSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"updateSellTimeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newUniswapRouter","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600e60006101000a81548160ff02191690831515021790555062015180600f55620151806010556000601160006101000a81548160ff0219169083151502179055503480156200005557600080fd5b506040518060400160405280600c81526020017f4e41504120536f636965747900000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e415041000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000da92919062000987565b508060049080519060200190620000f392919062000987565b505050620001166200010a620002e860201b60201c565b620002f060201b60201c565b6001600a819055506002600b81905550732bc68c7d1a1dfffe08f02e3ef3c7ed8d322b9cfb600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073c3330271fc4465f2481476ad96fcf635f07aa2dc9050620001a7306001620003b660201b60201c565b620001ba816001620003b660201b60201c565b620001ef600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620003b660201b60201c565b681b1ae4d6e2ef500000600c819055506969e10de76676d0800000600d8190555060006b033b2e3c9fd0803ce8000000905062000267826200025b606462000247605a866200058660201b62001a391790919060201c565b6200060a60201b62001ab41790919060201c565b6200065c60201b60201c565b620002cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620002c36064620002af600a866200058660201b62001a391790919060201c565b6200060a60201b62001ab41790919060201c565b6200065c60201b60201c565b620002e082620007d560201b60201c565b505062000fd6565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003c6620002e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003ec620008eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000445576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043c9062000a98565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415620004db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d29062000b30565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200057a919062000b6f565b60405180910390a25050565b6000808314156200059b576000905062000604565b60008284620005ab919062000bc5565b9050828482620005bc919062000c55565b14620005ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005f69062000d03565b60405180910390fd5b809150505b92915050565b60006200065483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200091560201b60201c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006c69062000d75565b60405180910390fd5b620006e3600083836200097d60201b60201c565b8060026000828254620006f7919062000d97565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200074e919062000d97565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007b5919062000e05565b60405180910390a3620007d1600083836200098260201b60201c565b5050565b620007e5620002e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200080b620008eb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000864576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085b9062000a98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620008d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ce9062000e98565b60405180910390fd5b620008e881620002f060201b60201c565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080831182906200095f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000956919062000f4d565b60405180910390fd5b506000838562000970919062000c55565b9050809150509392505050565b505050565b505050565b828054620009959062000fa0565b90600052602060002090601f016020900481019282620009b9576000855562000a05565b82601f10620009d457805160ff191683800117855562000a05565b8280016001018555821562000a05579182015b8281111562000a04578251825591602001919060010190620009e7565b5b50905062000a14919062000a18565b5090565b5b8082111562000a3357600081600090555060010162000a19565b5090565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000a8060208362000a37565b915062000a8d8262000a48565b602082019050919050565b6000602082019050818103600083015262000ab38162000a71565b9050919050565b7f4e4150413a204163636f756e7420697320616c7265616479207468652076616c60008201527f7565206f6620276578636c756465642700000000000000000000000000000000602082015250565b600062000b1860308362000a37565b915062000b258262000aba565b604082019050919050565b6000602082019050818103600083015262000b4b8162000b09565b9050919050565b60008115159050919050565b62000b698162000b52565b82525050565b600060208201905062000b86600083018462000b5e565b92915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000bd28262000b8c565b915062000bdf8362000b8c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c1b5762000c1a62000b96565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c628262000b8c565b915062000c6f8362000b8c565b92508262000c825762000c8162000c26565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600062000ceb60218362000a37565b915062000cf88262000c8d565b604082019050919050565b6000602082019050818103600083015262000d1e8162000cdc565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d5d601f8362000a37565b915062000d6a8262000d25565b602082019050919050565b6000602082019050818103600083015262000d908162000d4e565b9050919050565b600062000da48262000b8c565b915062000db18362000b8c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000de95762000de862000b96565b5b828201905092915050565b62000dff8162000b8c565b82525050565b600060208201905062000e1c600083018462000df4565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062000e8060268362000a37565b915062000e8d8262000e22565b604082019050919050565b6000602082019050818103600083015262000eb38162000e71565b9050919050565b600081519050919050565b60005b8381101562000ee557808201518184015260208101905062000ec8565b8381111562000ef5576000848401525b50505050565b6000601f19601f8301169050919050565b600062000f198262000eba565b62000f25818562000a37565b935062000f3781856020860162000ec5565b62000f428162000efb565b840191505092915050565b6000602082019050818103600083015262000f69818462000f0c565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fb957607f821691505b6020821081141562000fd05762000fcf62000f71565b5b50919050565b613ccf8062000fe66000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806370a082311161013b578063a2a5802a116100b8578063c08d1fe51161007c578063c08d1fe5146106a0578063c492f046146106be578063dd62ed3e146106da578063f2fde38b1461070a578063fd1149af146107265761023d565b8063a2a5802a146105d8578063a457c2d7146105f4578063a9059cbb14610624578063b62496f514610654578063c0246668146106845761023d565b8063809d458d116100ff578063809d458d146105485780638da5cb5b14610564578063908bb2ae1461058257806395d89b411461059e5780639a7a23d6146105bc5761023d565b806370a08231146104b6578063715018a6146104e6578063735de9f7146104f0578063767419fa1461050e578063768dc710146105185761023d565b806344337ea1116101c95780634f91e48c1161018d5780634f91e48c14610424578063537df3b614610442578063589210d91461045e57806358d88d6f1461047c5780635c975abb146104985761023d565b806344337ea1146103965780634626402b146103b2578063467abe0a146103d05780634d1b2f9e146103ec5780634f4bf2aa146104085761023d565b80631cdd3be3116102105780631cdd3be3146102cc5780631d933a4a146102fc57806323b872dd14610318578063313ce5671461034857806339509351146103665761023d565b806306fdde0314610242578063095ea7b3146102605780630d51d6941461029057806318160ddd146102ae575b600080fd5b61024a610744565b6040516102579190612aaf565b60405180910390f35b61027a60048036038101906102759190612b6f565b6107d6565b6040516102879190612bca565b60405180910390f35b6102986107f9565b6040516102a59190612bf4565b60405180910390f35b6102b66107ff565b6040516102c39190612bf4565b60405180910390f35b6102e660048036038101906102e19190612c0f565b610809565b6040516102f39190612bca565b60405180910390f35b61031660048036038101906103119190612c3c565b610829565b005b610332600480360381019061032d9190612c69565b6108af565b60405161033f9190612bca565b60405180910390f35b6103506108de565b60405161035d9190612cd8565b60405180910390f35b610380600480360381019061037b9190612b6f565b6108e7565b60405161038d9190612bca565b60405180910390f35b6103b060048036038101906103ab9190612c0f565b61091e565b005b6103ba610a2c565b6040516103c79190612d02565b60405180910390f35b6103ea60048036038101906103e59190612c3c565b610a52565b005b61040660048036038101906104019190612c3c565b610ad8565b005b610422600480360381019061041d9190612c3c565b610b5e565b005b61042c610be4565b6040516104399190612bf4565b60405180910390f35b61045c60048036038101906104579190612c0f565b610bea565b005b610466610cc1565b6040516104739190612bf4565b60405180910390f35b61049660048036038101906104919190612c3c565b610cc7565b005b6104a0610d4d565b6040516104ad9190612bca565b60405180910390f35b6104d060048036038101906104cb9190612c0f565b610d60565b6040516104dd9190612bf4565b60405180910390f35b6104ee610da8565b005b6104f8610e30565b6040516105059190612d02565b60405180910390f35b610516610e56565b005b610532600480360381019061052d9190612c0f565b610efe565b60405161053f9190612bca565b60405180910390f35b610562600480360381019061055d9190612c0f565b610f54565b005b61056c611121565b6040516105799190612d02565b60405180910390f35b61059c60048036038101906105979190612c0f565b61114b565b005b6105a661120b565b6040516105b39190612aaf565b60405180910390f35b6105d660048036038101906105d19190612d49565b61129d565b005b6105f260048036038101906105ed9190612c3c565b61144d565b005b61060e60048036038101906106099190612b6f565b6114d3565b60405161061b9190612bca565b60405180910390f35b61063e60048036038101906106399190612b6f565b61154a565b60405161064b9190612bca565b60405180910390f35b61066e60048036038101906106699190612c0f565b61156d565b60405161067b9190612bca565b60405180910390f35b61069e60048036038101906106999190612d49565b61158d565b005b6106a8611745565b6040516106b59190612bca565b60405180910390f35b6106d860048036038101906106d39190612dee565b611758565b005b6106f460048036038101906106ef9190612e4e565b6118b4565b6040516107019190612bf4565b60405180910390f35b610724600480360381019061071f9190612c0f565b61193b565b005b61072e611a33565b60405161073b9190612bf4565b60405180910390f35b60606003805461075390612ebd565b80601f016020809104026020016040519081016040528092919081815260200182805461077f90612ebd565b80156107cc5780601f106107a1576101008083540402835291602001916107cc565b820191906000526020600020905b8154815290600101906020018083116107af57829003601f168201915b5050505050905090565b6000806107e1611afe565b90506107ee818585611b06565b600191505092915050565b600f5481565b6000600254905090565b60146020528060005260406000206000915054906101000a900460ff1681565b610831611afe565b73ffffffffffffffffffffffffffffffffffffffff1661084f611121565b73ffffffffffffffffffffffffffffffffffffffff16146108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90612f3b565b60405180910390fd5b80600b8190555050565b6000806108ba611afe565b90506108c7858285611cd1565b6108d2858585611d5d565b60019150509392505050565b60006012905090565b6000806108f2611afe565b905061091381858561090485896118b4565b61090e9190612f8a565b611b06565b600191505092915050565b610926611afe565b73ffffffffffffffffffffffffffffffffffffffff16610944611121565b73ffffffffffffffffffffffffffffffffffffffff161461099a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099190612f3b565b60405180910390fd5b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffa4e6181777692565cf28528fc88fd1516ea86b56da075235fa575af6a4b85581604051610a219190612d02565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a5a611afe565b73ffffffffffffffffffffffffffffffffffffffff16610a78611121565b73ffffffffffffffffffffffffffffffffffffffff1614610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac590612f3b565b60405180910390fd5b80600a8190555050565b610ae0611afe565b73ffffffffffffffffffffffffffffffffffffffff16610afe611121565b73ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90612f3b565b60405180910390fd5b80600c8190555050565b610b66611afe565b73ffffffffffffffffffffffffffffffffffffffff16610b84611121565b73ffffffffffffffffffffffffffffffffffffffff1614610bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd190612f3b565b60405180910390fd5b80600f8190555050565b600d5481565b610bf2611afe565b73ffffffffffffffffffffffffffffffffffffffff16610c10611121565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90612f3b565b60405180910390fd5b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600c5481565b610ccf611afe565b73ffffffffffffffffffffffffffffffffffffffff16610ced611121565b73ffffffffffffffffffffffffffffffffffffffff1614610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a90612f3b565b60405180910390fd5b8060108190555050565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db0611afe565b73ffffffffffffffffffffffffffffffffffffffff16610dce611121565b73ffffffffffffffffffffffffffffffffffffffff1614610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90612f3b565b60405180910390fd5b610e2e60006122ac565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e5e611afe565b73ffffffffffffffffffffffffffffffffffffffff16610e7c611121565b73ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990612f3b565b60405180910390fd5b601160009054906101000a900460ff1615601160006101000a81548160ff021916908315150217905550565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f5c611afe565b73ffffffffffffffffffffffffffffffffffffffff16610f7a611121565b73ffffffffffffffffffffffffffffffffffffffff1614610fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc790612f3b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105890613052565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f79a52cbec002ef70283103eb4140713100276944fca2819713130141d04df18360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611153611afe565b73ffffffffffffffffffffffffffffffffffffffff16611171611121565b73ffffffffffffffffffffffffffffffffffffffff16146111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90612f3b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606004805461121a90612ebd565b80601f016020809104026020016040519081016040528092919081815260200182805461124690612ebd565b80156112935780601f1061126857610100808354040283529160200191611293565b820191906000526020600020905b81548152906001019060200180831161127657829003601f168201915b5050505050905090565b6112a5611afe565b73ffffffffffffffffffffffffffffffffffffffff166112c3611121565b73ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612f3b565b60405180910390fd5b801515600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a3906130e4565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b611455611afe565b73ffffffffffffffffffffffffffffffffffffffff16611473611121565b73ffffffffffffffffffffffffffffffffffffffff16146114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c090612f3b565b60405180910390fd5b80600d8190555050565b6000806114de611afe565b905060006114ec82866118b4565b905083811015611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890613176565b60405180910390fd5b61153e8286868403611b06565b60019250505092915050565b600080611555611afe565b9050611562818585611d5d565b600191505092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b611595611afe565b73ffffffffffffffffffffffffffffffffffffffff166115b3611121565b73ffffffffffffffffffffffffffffffffffffffff1614611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090612f3b565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561169c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169390613208565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516117399190612bca565b60405180910390a25050565b600e60009054906101000a900460ff1681565b611760611afe565b73ffffffffffffffffffffffffffffffffffffffff1661177e611121565b73ffffffffffffffffffffffffffffffffffffffff16146117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90612f3b565b60405180910390fd5b60005b838390508110156118735781600860008686858181106117fa576117f9613228565b5b905060200201602081019061180f9190612c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061186b90613257565b9150506117d7565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516118a793929190613363565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611943611afe565b73ffffffffffffffffffffffffffffffffffffffff16611961611121565b73ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90612f3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90613407565b60405180910390fd5b611a30816122ac565b50565b60105481565b600080831415611a4c5760009050611aae565b60008284611a5a9190613427565b9050828482611a6991906134b0565b14611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa090613553565b60405180910390fd5b809150505b92915050565b6000611af683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612372565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d906135e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90613677565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cc49190612bf4565b60405180910390a3505050565b6000611cdd84846118b4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d575781811015611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d40906136e3565b60405180910390fd5b611d568484848403611b06565b5b50505050565b601160009054906101000a900460ff1615611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da49061374f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e13906137e1565b60405180910390fd5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ec05750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef69061384d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f66906138df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613971565b60405180910390fd5b60008111612022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201990613a03565b60405180910390fd5b600060019050600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120c95750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120d357600090505b6120df848484846123d5565b600e60009054906101000a900460ff1615612100576120ff8484836124ae565b5b61210984612684565b801561215f5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121cd57600061218e6064612180600a5486611a3990919063ffffffff16565b611ab490919063ffffffff16565b9050808361219c9190613a23565b92506121cb85600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126da565b505b6121d7848461295b565b801561222d5750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561229b57600061225c606461224e600b5486611a3990919063ffffffff16565b611ab490919063ffffffff16565b9050808361226a9190613a23565b925061229985600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126da565b505b6122a68484846126da565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080831182906123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b09190612aaf565b60405180910390fd5b50600083856123c891906134b0565b9050809150509392505050565b80156124a8576123e484612684565b80156123f357506000600c5414155b1561244257600c5482111561243d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243490613aa3565b60405180910390fd5b6124a7565b61244c848461295b565b801561245b57506000600d5414155b156124a657600d548211156124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c90613b0f565b60405180910390fd5b5b5b5b50505050565b801561267f576124bd83612684565b1561259a5742600f54601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125109190612f8a565b1115612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890613b7b565b60405180910390fd5b42601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061267e565b6125a4838361295b565b1561267d5742601054601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f79190612f8a565b1115612638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262f90613be7565b60405180910390fd5b42601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561274a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612741906138df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b190613971565b60405180910390fd5b6127c5838383612a0c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561284b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284290613c79565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128de9190612f8a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129429190612bf4565b60405180910390a3612955848484612a11565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a045750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a50578082015181840152602081019050612a35565b83811115612a5f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a8182612a16565b612a8b8185612a21565b9350612a9b818560208601612a32565b612aa481612a65565b840191505092915050565b60006020820190508181036000830152612ac98184612a76565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b0682612adb565b9050919050565b612b1681612afb565b8114612b2157600080fd5b50565b600081359050612b3381612b0d565b92915050565b6000819050919050565b612b4c81612b39565b8114612b5757600080fd5b50565b600081359050612b6981612b43565b92915050565b60008060408385031215612b8657612b85612ad1565b5b6000612b9485828601612b24565b9250506020612ba585828601612b5a565b9150509250929050565b60008115159050919050565b612bc481612baf565b82525050565b6000602082019050612bdf6000830184612bbb565b92915050565b612bee81612b39565b82525050565b6000602082019050612c096000830184612be5565b92915050565b600060208284031215612c2557612c24612ad1565b5b6000612c3384828501612b24565b91505092915050565b600060208284031215612c5257612c51612ad1565b5b6000612c6084828501612b5a565b91505092915050565b600080600060608486031215612c8257612c81612ad1565b5b6000612c9086828701612b24565b9350506020612ca186828701612b24565b9250506040612cb286828701612b5a565b9150509250925092565b600060ff82169050919050565b612cd281612cbc565b82525050565b6000602082019050612ced6000830184612cc9565b92915050565b612cfc81612afb565b82525050565b6000602082019050612d176000830184612cf3565b92915050565b612d2681612baf565b8114612d3157600080fd5b50565b600081359050612d4381612d1d565b92915050565b60008060408385031215612d6057612d5f612ad1565b5b6000612d6e85828601612b24565b9250506020612d7f85828601612d34565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112612dae57612dad612d89565b5b8235905067ffffffffffffffff811115612dcb57612dca612d8e565b5b602083019150836020820283011115612de757612de6612d93565b5b9250929050565b600080600060408486031215612e0757612e06612ad1565b5b600084013567ffffffffffffffff811115612e2557612e24612ad6565b5b612e3186828701612d98565b93509350506020612e4486828701612d34565b9150509250925092565b60008060408385031215612e6557612e64612ad1565b5b6000612e7385828601612b24565b9250506020612e8485828601612b24565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ed557607f821691505b60208210811415612ee957612ee8612e8e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f25602083612a21565b9150612f3082612eef565b602082019050919050565b60006020820190508181036000830152612f5481612f18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f9582612b39565b9150612fa083612b39565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fd557612fd4612f5b565b5b828201905092915050565b7f4e4150413a205468652074726561737572792077616c6c657420616c7265616460008201527f7920686173207468617420616464726573730000000000000000000000000000602082015250565b600061303c603283612a21565b915061304782612fe0565b604082019050919050565b6000602082019050818103600083015261306b8161302f565b9050919050565b7f4e4150413a204175746f6d61746564206d61726b6574206d616b65722070616960008201527f7220697320616c72656164792073657420746f20746861742076616c75650000602082015250565b60006130ce603e83612a21565b91506130d982613072565b604082019050919050565b600060208201905081810360008301526130fd816130c1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613160602583612a21565b915061316b82613104565b604082019050919050565b6000602082019050818103600083015261318f81613153565b9050919050565b7f4e4150413a204163636f756e7420697320616c7265616479207468652076616c60008201527f7565206f6620276578636c756465642700000000000000000000000000000000602082015250565b60006131f2603083612a21565b91506131fd82613196565b604082019050919050565b60006020820190508181036000830152613221816131e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061326282612b39565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561329557613294612f5b565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b6132c481612afb565b82525050565b60006132d683836132bb565b60208301905092915050565b60006132f16020840184612b24565b905092915050565b6000602082019050919050565b600061331283856132a0565b935061331d826132b1565b8060005b858110156133565761333382846132e2565b61333d88826132ca565b9750613348836132f9565b925050600181019050613321565b5085925050509392505050565b6000604082019050818103600083015261337e818587613306565b905061338d6020830184612bbb565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133f1602683612a21565b91506133fc82613395565b604082019050919050565b60006020820190508181036000830152613420816133e4565b9050919050565b600061343282612b39565b915061343d83612b39565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561347657613475612f5b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134bb82612b39565b91506134c683612b39565b9250826134d6576134d5613481565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061353d602183612a21565b9150613548826134e1565b604082019050919050565b6000602082019050818103600083015261356c81613530565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135cf602483612a21565b91506135da82613573565b604082019050919050565b600060208201905081810360008301526135fe816135c2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613661602283612a21565b915061366c82613605565b604082019050919050565b6000602082019050818103600083015261369081613654565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006136cd601d83612a21565b91506136d882613697565b602082019050919050565b600060208201905081810360008301526136fc816136c0565b9050919050565b7f54726164696e6720697320706175736564000000000000000000000000000000600082015250565b6000613739601183612a21565b915061374482613703565b602082019050919050565b600060208201905081810360008301526137688161372c565b9050919050565b7f53656e64696e6720746f20796f757273656c6620697320646973616c6c6f776560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006137cb602183612a21565b91506137d68261376f565b604082019050919050565b600060208201905081810360008301526137fa816137be565b9050919050565b7f426c61636b6c6973746564206163636f756e7400000000000000000000000000600082015250565b6000613837601383612a21565b915061384282613801565b602082019050919050565b600060208201905081810360008301526138668161382a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006138c9602583612a21565b91506138d48261386d565b604082019050919050565b600060208201905081810360008301526138f8816138bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061395b602383612a21565b9150613966826138ff565b604082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006139ed602983612a21565b91506139f882613991565b604082019050919050565b60006020820190508181036000830152613a1c816139e0565b9050919050565b6000613a2e82612b39565b9150613a3983612b39565b925082821015613a4c57613a4b612f5b565b5b828203905092915050565b7f42757920616d6f756e742065786365656473206c696d69740000000000000000600082015250565b6000613a8d601883612a21565b9150613a9882613a57565b602082019050919050565b60006020820190508181036000830152613abc81613a80565b9050919050565b7f53656c6c20616d6f756e742065786365656473206c696d697400000000000000600082015250565b6000613af9601983612a21565b9150613b0482613ac3565b602082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f776169742034206d696e7574657320746f2062757920616761696e0000000000600082015250565b6000613b65601b83612a21565b9150613b7082613b2f565b602082019050919050565b60006020820190508181036000830152613b9481613b58565b9050919050565b7f776169742035206d696e7574657320746f2073656c6c20616761696e00000000600082015250565b6000613bd1601c83612a21565b9150613bdc82613b9b565b602082019050919050565b60006020820190508181036000830152613c0081613bc4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613c63602683612a21565b9150613c6e82613c07565b604082019050919050565b60006020820190508181036000830152613c9281613c56565b905091905056fea26469706673582212207b47da08a5b166ea818af575279061f172e4940a137b3dbb393417830483e77064736f6c634300080a0033

Deployed ByteCode Sourcemap

23323:7700:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12537:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14888:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24021:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13657:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24277:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30623:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15669:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13499:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16373:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30120:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23491:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30528:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29916:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30720:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23930:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30273:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23900:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30828:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24122:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13828:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6442:103;;;:::i;:::-;;23430:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30938:82;;;:::i;:::-;;30396:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25671:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5791:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25540:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12756:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26571:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30017:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17114:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14161:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23717:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25958:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23981:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26260:303;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14417:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6700:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24059:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12537:100;12591:13;12624:5;12617:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12537:100;:::o;14888:201::-;14971:4;14988:13;15004:12;:10;:12::i;:::-;14988:28;;15027:32;15036:5;15043:7;15052:6;15027:8;:32::i;:::-;15077:4;15070:11;;;14888:201;;;;:::o;24021:31::-;;;;:::o;13657:108::-;13718:7;13745:12;;13738:19;;13657:108;:::o;24277:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;30623:89::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30700:4:::1;30690:7;:14;;;;30623:89:::0;:::o;15669:295::-;15800:4;15817:15;15835:12;:10;:12::i;:::-;15817:30;;15858:38;15874:4;15880:7;15889:6;15858:15;:38::i;:::-;15907:27;15917:4;15923:2;15927:6;15907:9;:27::i;:::-;15952:4;15945:11;;;15669:295;;;;;:::o;13499:93::-;13557:5;13582:2;13575:9;;13499:93;:::o;16373:238::-;16461:4;16478:13;16494:12;:10;:12::i;:::-;16478:28;;16517:64;16526:5;16533:7;16570:10;16542:25;16552:5;16559:7;16542:9;:25::i;:::-;:38;;;;:::i;:::-;16517:8;:64::i;:::-;16599:4;16592:11;;;16373:238;;;;:::o;30120:145::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30217:4:::1;30191:14;:23;30206:7;30191:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;30237:20;30249:7;30237:20;;;;;;:::i;:::-;;;;;;;;30120:145:::0;:::o;23491:29::-;;;;;;;;;;;;;:::o;30528:87::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30603:4:::1;30594:6;:13;;;;30528:87:::0;:::o;29916:93::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29996:5:::1;29985:8;:16;;;;29916:93:::0;:::o;30720:100::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30807:5:::1;30793:11;:19;;;;30720:100:::0;:::o;23930:24::-;;;;:::o;30273:115::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30375:5:::1;30349:14;:23;30364:7;30349:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;30273:115:::0;:::o;23900:23::-;;;;:::o;30828:102::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30917:5:::1;30902:12;:20;;;;30828:102:::0;:::o;24122:26::-;;;;;;;;;;;;;:::o;13828:127::-;13902:7;13929:9;:18;13939:7;13929:18;;;;;;;;;;;;;;;;13922:25;;13828:127;;;:::o;6442:103::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6507:30:::1;6534:1;6507:18;:30::i;:::-;6442:103::o:0;23430:28::-;;;;;;;;;;;;;:::o;30938:82::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31006:6:::1;;;;;;;;;;;31005:7;30996:6;;:16;;;;;;;;;;;;;;;;;;30938:82::o:0;30396:124::-;30461:4;30485:18;:27;30504:7;30485:27;;;;;;;;;;;;;;;;;;;;;;;;;30478:34;;30396:124;;;:::o;25671:279::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25771:14:::1;;;;;;;;;;;25757:28;;:10;:28;;;;25749:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;25889:14;;;;;;;;;;;25856:48;;25877:10;25856:48;;;;;;;;;;;;25932:10;25915:14;;:27;;;;;;;;;;;;;;;;;;25671:279:::0;:::o;5791:87::-;5837:7;5864:6;;;;;;;;;;;5857:13;;5791:87;:::o;25540:123::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25639:16:::1;25623:13;;:32;;;;;;;;;;;;;;;;;;25540:123:::0;:::o;12756:104::-;12812:13;12845:7;12838:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12756:104;:::o;26571:322::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26705:5:::1;26670:40;;:25;:31;26696:4;26670:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;26662:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;26822:5;26788:25;:31;26814:4;26788:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26879:5;26845:40;;26873:4;26845:40;;;;;;;;;;;;26571:322:::0;;:::o;30017:95::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30099:5:::1;30087:9;:17;;;;30017:95:::0;:::o;17114:436::-;17207:4;17224:13;17240:12;:10;:12::i;:::-;17224:28;;17263:24;17290:25;17300:5;17307:7;17290:9;:25::i;:::-;17263:52;;17354:15;17334:16;:35;;17326:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17447:60;17456:5;17463:7;17491:15;17472:16;:34;17447:8;:60::i;:::-;17538:4;17531:11;;;;17114:436;;;;:::o;14161:193::-;14240:4;14257:13;14273:12;:10;:12::i;:::-;14257:28;;14296;14306:5;14313:2;14317:6;14296:9;:28::i;:::-;14342:4;14335:11;;;14161:193;;;;:::o;23717:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25958:294::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:8:::1;26051:39;;:18;:27;26070:7;26051:27;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;26043:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26184:8;26154:18;:27;26173:7;26154:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;26226:7;26210:34;;;26235:8;26210:34;;;;;;:::i;:::-;;;;;;;;25958:294:::0;;:::o;23981:29::-;;;;;;;;;;;;;:::o;26260:303::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26377:9:::1;26373:114;26396:8;;:15;;26392:1;:19;26373:114;;;26467:8;26433:18;:31;26452:8;;26461:1;26452:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26433:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;26413:3;;;;;:::i;:::-;;;;26373:114;;;;26504:51;26536:8;;26546;26504:51;;;;;;;;:::i;:::-;;;;;;;;26260:303:::0;;;:::o;14417:151::-;14506:7;14533:11;:18;14545:5;14533:18;;;;;;;;;;;;;;;:27;14552:7;14533:27;;;;;;;;;;;;;;;;14526:34;;14417:151;;;;:::o;6700:201::-;6022:12;:10;:12::i;:::-;6011:23;;:7;:5;:7::i;:::-;:23;;;6003:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6809:1:::1;6789:22;;:8;:22;;;;6781:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6865:28;6884:8;6865:18;:28::i;:::-;6700:201:::0;:::o;24059:32::-;;;;:::o;1531:431::-;1589:7;1823:1;1818;:6;1814:37;;;1842:1;1835:8;;;;1814:37;1859:9;1875:1;1871;:5;;;;:::i;:::-;1859:17;;1900:1;1895;1891;:5;;;;:::i;:::-;:10;1883:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1955:1;1948:8;;;1531:431;;;;;:::o;2406:126::-;2464:7;2487:39;2491:1;2494;2487:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2480:46;;2406:126;;;;:::o;5031:98::-;5084:7;5111:10;5104:17;;5031:98;:::o;20739:380::-;20892:1;20875:19;;:5;:19;;;;20867:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20973:1;20954:21;;:7;:21;;;;20946:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21057:6;21027:11;:18;21039:5;21027:18;;;;;;;;;;;;;;;:27;21046:7;21027:27;;;;;;;;;;;;;;;:36;;;;21095:7;21079:32;;21088:5;21079:32;;;21104:6;21079:32;;;;;;:::i;:::-;;;;;;;;20739:380;;;:::o;21410:453::-;21545:24;21572:25;21582:5;21589:7;21572:9;:25::i;:::-;21545:52;;21632:17;21612:16;:37;21608:248;;21694:6;21674:16;:26;;21666:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21778:51;21787:5;21794:7;21822:6;21803:16;:25;21778:8;:51::i;:::-;21608:248;21534:329;21410:453;;;:::o;27318:1473::-;27417:6;;;;;;;;;;;27416:7;27408:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;27472:2;27464:10;;:4;:10;;;;27456:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27532:14;:20;27547:4;27532:20;;;;;;;;;;;;;;;;;;;;;;;;;27531:21;:44;;;;;27557:14;:18;27572:2;27557:18;;;;;;;;;;;;;;;;;;;;;;;;;27556:19;27531:44;27523:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27637:1;27621:18;;:4;:18;;;;27613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27714:1;27700:16;;:2;:16;;;;27692:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27784:1;27775:6;:10;27767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27907:12;27922:4;27907:19;;28027:18;:24;28046:4;28027:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;28055:18;:22;28074:2;28055:22;;;;;;;;;;;;;;;;;;;;;;;;;28027:50;28024:96;;;28103:5;28093:15;;28024:96;28132:44;28150:4;28156:2;28160:6;28168:7;28132:17;:44::i;:::-;28192:9;;;;;;;;;;;28189:74;;;28217:34;28231:4;28238:2;28243:7;28217:13;:34::i;:::-;28189:74;28279:12;28286:4;28279:6;:12::i;:::-;:39;;;;;28296:18;:22;28315:2;28296:22;;;;;;;;;;;;;;;;;;;;;;;;;28295:23;28279:39;28275:220;;;28335:17;28355:27;28378:3;28355:18;28366:6;;28355;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;28335:47;;28409:9;28399:19;;;;;:::i;:::-;;;28435:48;28451:4;28457:14;;;;;;;;;;;28473:9;28435:15;:48::i;:::-;28320:175;28275:220;28511:17;28519:4;28525:2;28511:7;:17::i;:::-;:46;;;;;28533:18;:24;28552:4;28533:24;;;;;;;;;;;;;;;;;;;;;;;;;28532:25;28511:46;28507:231;;;28574:18;28595:28;28619:3;28595:19;28606:7;;28595:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;28574:49;;28650:10;28640:20;;;;;:::i;:::-;;;28677:49;28693:4;28699:14;;;;;;;;;;;28715:10;28677:15;:49::i;:::-;28559:179;28507:231;28750:33;28766:4;28772:2;28776:6;28750:15;:33::i;:::-;27397:1394;27318:1473;;;:::o;7061:191::-;7135:16;7154:6;;;;;;;;;;;7135:25;;7180:8;7171:6;;:17;;;;;;;;;;;;;;;;;;7235:8;7204:40;;7225:8;7204:40;;;;;;;;;;;;7124:128;7061:191;:::o;2996:323::-;3082:7;3173:1;3169;:5;3176:12;3161:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3196:9;3212:1;3208;:5;;;;:::i;:::-;3196:17;;3312:1;3305:8;;;2996:323;;;;;:::o;28799:484::-;28966:7;28962:314;;;28994:14;29001:6;28994;:14::i;:::-;:31;;;;;29024:1;29012:8;;:13;;28994:31;28990:275;;;29064:8;;29054:6;:18;;29046:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28990:275;;;29127:26;29135:6;29143:9;29127:7;:26::i;:::-;:44;;;;;29170:1;29157:9;;:14;;29127:44;29123:142;;;29210:9;;29200:6;:19;;29192:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29123:142;28990:275;28962:314;28799:484;;;;:::o;29291:617::-;29444:7;29440:461;;;29472:14;29479:6;29472;:14::i;:::-;29468:422;;;29552:15;29537:11;;29515:8;:19;29524:9;29515:19;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;:52;;29507:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;29640:15;29618:8;:19;29627:9;29618:19;;;;;;;;;;;;;;;:37;;;;29468:422;;;29681:26;29689:6;29697:9;29681:7;:26::i;:::-;29677:213;;;29772:15;29756:12;;29736:9;:17;29746:6;29736:17;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:51;;29728:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;29859:15;29839:9;:17;29849:6;29839:17;;;;;;;;;;;;;;;:35;;;;29677:213;29468:422;29440:461;29291:617;;;:::o;26921:161::-;26974:4;27043:25;:31;27069:4;27043:31;;;;;;;;;;;;;;;;;;;;;;;;;27036:38;;26921:161;;;:::o;18020:671::-;18167:1;18151:18;;:4;:18;;;;18143:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18244:1;18230:16;;:2;:16;;;;18222:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18299:38;18320:4;18326:2;18330:6;18299:20;:38::i;:::-;18350:19;18372:9;:15;18382:4;18372:15;;;;;;;;;;;;;;;;18350:37;;18421:6;18406:11;:21;;18398:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;18538:6;18524:11;:20;18506:9;:15;18516:4;18506:15;;;;;;;;;;;;;;;:38;;;;18583:6;18566:9;:13;18576:2;18566:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;18622:2;18607:26;;18616:4;18607:26;;;18626:6;18607:26;;;;;;:::i;:::-;;;;;;;;18646:37;18666:4;18672:2;18676:6;18646:19;:37::i;:::-;18132:559;18020:671;;;:::o;27090:220::-;27156:4;27256:13;;;;;;;;;;;27248:21;;:4;:21;;;;:54;;;;;27273:25;:29;27299:2;27273:29;;;;;;;;;;;;;;;;;;;;;;;;;27248:54;27241:61;;27090:220;;;;:::o;22463:125::-;;;;:::o;23192:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:619::-;4593:6;4601;4609;4658:2;4646:9;4637:7;4633:23;4629:32;4626:119;;;4664:79;;:::i;:::-;4626:119;4784:1;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4755:117;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;5039:2;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5010:118;4516:619;;;;;:::o;5141:86::-;5176:7;5216:4;5209:5;5205:16;5194:27;;5141:86;;;:::o;5233:112::-;5316:22;5332:5;5316:22;:::i;:::-;5311:3;5304:35;5233:112;;:::o;5351:214::-;5440:4;5478:2;5467:9;5463:18;5455:26;;5491:67;5555:1;5544:9;5540:17;5531:6;5491:67;:::i;:::-;5351:214;;;;:::o;5571:118::-;5658:24;5676:5;5658:24;:::i;:::-;5653:3;5646:37;5571:118;;:::o;5695:222::-;5788:4;5826:2;5815:9;5811:18;5803:26;;5839:71;5907:1;5896:9;5892:17;5883:6;5839:71;:::i;:::-;5695:222;;;;:::o;5923:116::-;5993:21;6008:5;5993:21;:::i;:::-;5986:5;5983:32;5973:60;;6029:1;6026;6019:12;5973:60;5923:116;:::o;6045:133::-;6088:5;6126:6;6113:20;6104:29;;6142:30;6166:5;6142:30;:::i;:::-;6045:133;;;;:::o;6184:468::-;6249:6;6257;6306:2;6294:9;6285:7;6281:23;6277:32;6274:119;;;6312:79;;:::i;:::-;6274:119;6432:1;6457:53;6502:7;6493:6;6482:9;6478:22;6457:53;:::i;:::-;6447:63;;6403:117;6559:2;6585:50;6627:7;6618:6;6607:9;6603:22;6585:50;:::i;:::-;6575:60;;6530:115;6184:468;;;;;:::o;6658:117::-;6767:1;6764;6757:12;6781:117;6890:1;6887;6880:12;6904:117;7013:1;7010;7003:12;7044:568;7117:8;7127:6;7177:3;7170:4;7162:6;7158:17;7154:27;7144:122;;7185:79;;:::i;:::-;7144:122;7298:6;7285:20;7275:30;;7328:18;7320:6;7317:30;7314:117;;;7350:79;;:::i;:::-;7314:117;7464:4;7456:6;7452:17;7440:29;;7518:3;7510:4;7502:6;7498:17;7488:8;7484:32;7481:41;7478:128;;;7525:79;;:::i;:::-;7478:128;7044:568;;;;;:::o;7618:698::-;7710:6;7718;7726;7775:2;7763:9;7754:7;7750:23;7746:32;7743:119;;;7781:79;;:::i;:::-;7743:119;7929:1;7918:9;7914:17;7901:31;7959:18;7951:6;7948:30;7945:117;;;7981:79;;:::i;:::-;7945:117;8094:80;8166:7;8157:6;8146:9;8142:22;8094:80;:::i;:::-;8076:98;;;;7872:312;8223:2;8249:50;8291:7;8282:6;8271:9;8267:22;8249:50;:::i;:::-;8239:60;;8194:115;7618:698;;;;;:::o;8322:474::-;8390:6;8398;8447:2;8435:9;8426:7;8422:23;8418:32;8415:119;;;8453:79;;:::i;:::-;8415:119;8573:1;8598:53;8643:7;8634:6;8623:9;8619:22;8598:53;:::i;:::-;8588:63;;8544:117;8700:2;8726:53;8771:7;8762:6;8751:9;8747:22;8726:53;:::i;:::-;8716:63;;8671:118;8322:474;;;;;:::o;8802:180::-;8850:77;8847:1;8840:88;8947:4;8944:1;8937:15;8971:4;8968:1;8961:15;8988:320;9032:6;9069:1;9063:4;9059:12;9049:22;;9116:1;9110:4;9106:12;9137:18;9127:81;;9193:4;9185:6;9181:17;9171:27;;9127:81;9255:2;9247:6;9244:14;9224:18;9221:38;9218:84;;;9274:18;;:::i;:::-;9218:84;9039:269;8988:320;;;:::o;9314:182::-;9454:34;9450:1;9442:6;9438:14;9431:58;9314:182;:::o;9502:366::-;9644:3;9665:67;9729:2;9724:3;9665:67;:::i;:::-;9658:74;;9741:93;9830:3;9741:93;:::i;:::-;9859:2;9854:3;9850:12;9843:19;;9502:366;;;:::o;9874:419::-;10040:4;10078:2;10067:9;10063:18;10055:26;;10127:9;10121:4;10117:20;10113:1;10102:9;10098:17;10091:47;10155:131;10281:4;10155:131;:::i;:::-;10147:139;;9874:419;;;:::o;10299:180::-;10347:77;10344:1;10337:88;10444:4;10441:1;10434:15;10468:4;10465:1;10458:15;10485:305;10525:3;10544:20;10562:1;10544:20;:::i;:::-;10539:25;;10578:20;10596:1;10578:20;:::i;:::-;10573:25;;10732:1;10664:66;10660:74;10657:1;10654:81;10651:107;;;10738:18;;:::i;:::-;10651:107;10782:1;10779;10775:9;10768:16;;10485:305;;;;:::o;10796:237::-;10936:34;10932:1;10924:6;10920:14;10913:58;11005:20;11000:2;10992:6;10988:15;10981:45;10796:237;:::o;11039:366::-;11181:3;11202:67;11266:2;11261:3;11202:67;:::i;:::-;11195:74;;11278:93;11367:3;11278:93;:::i;:::-;11396:2;11391:3;11387:12;11380:19;;11039:366;;;:::o;11411:419::-;11577:4;11615:2;11604:9;11600:18;11592:26;;11664:9;11658:4;11654:20;11650:1;11639:9;11635:17;11628:47;11692:131;11818:4;11692:131;:::i;:::-;11684:139;;11411:419;;;:::o;11836:249::-;11976:34;11972:1;11964:6;11960:14;11953:58;12045:32;12040:2;12032:6;12028:15;12021:57;11836:249;:::o;12091:366::-;12233:3;12254:67;12318:2;12313:3;12254:67;:::i;:::-;12247:74;;12330:93;12419:3;12330:93;:::i;:::-;12448:2;12443:3;12439:12;12432:19;;12091:366;;;:::o;12463:419::-;12629:4;12667:2;12656:9;12652:18;12644:26;;12716:9;12710:4;12706:20;12702:1;12691:9;12687:17;12680:47;12744:131;12870:4;12744:131;:::i;:::-;12736:139;;12463:419;;;:::o;12888:224::-;13028:34;13024:1;13016:6;13012:14;13005:58;13097:7;13092:2;13084:6;13080:15;13073:32;12888:224;:::o;13118:366::-;13260:3;13281:67;13345:2;13340:3;13281:67;:::i;:::-;13274:74;;13357:93;13446:3;13357:93;:::i;:::-;13475:2;13470:3;13466:12;13459:19;;13118:366;;;:::o;13490:419::-;13656:4;13694:2;13683:9;13679:18;13671:26;;13743:9;13737:4;13733:20;13729:1;13718:9;13714:17;13707:47;13771:131;13897:4;13771:131;:::i;:::-;13763:139;;13490:419;;;:::o;13915:235::-;14055:34;14051:1;14043:6;14039:14;14032:58;14124:18;14119:2;14111:6;14107:15;14100:43;13915:235;:::o;14156:366::-;14298:3;14319:67;14383:2;14378:3;14319:67;:::i;:::-;14312:74;;14395:93;14484:3;14395:93;:::i;:::-;14513:2;14508:3;14504:12;14497:19;;14156:366;;;:::o;14528:419::-;14694:4;14732:2;14721:9;14717:18;14709:26;;14781:9;14775:4;14771:20;14767:1;14756:9;14752:17;14745:47;14809:131;14935:4;14809:131;:::i;:::-;14801:139;;14528:419;;;:::o;14953:180::-;15001:77;14998:1;14991:88;15098:4;15095:1;15088:15;15122:4;15119:1;15112:15;15139:233;15178:3;15201:24;15219:5;15201:24;:::i;:::-;15192:33;;15247:66;15240:5;15237:77;15234:103;;;15317:18;;:::i;:::-;15234:103;15364:1;15357:5;15353:13;15346:20;;15139:233;;;:::o;15378:184::-;15477:11;15511:6;15506:3;15499:19;15551:4;15546:3;15542:14;15527:29;;15378:184;;;;:::o;15568:102::-;15637:4;15660:3;15652:11;;15568:102;;;:::o;15676:108::-;15753:24;15771:5;15753:24;:::i;:::-;15748:3;15741:37;15676:108;;:::o;15790:179::-;15859:10;15880:46;15922:3;15914:6;15880:46;:::i;:::-;15958:4;15953:3;15949:14;15935:28;;15790:179;;;;:::o;15975:122::-;16027:5;16052:39;16087:2;16082:3;16078:12;16073:3;16052:39;:::i;:::-;16043:48;;15975:122;;;;:::o;16103:115::-;16175:4;16207;16202:3;16198:14;16190:22;;16103:115;;;:::o;16254:699::-;16383:3;16406:86;16485:6;16480:3;16406:86;:::i;:::-;16399:93;;16516:58;16568:5;16516:58;:::i;:::-;16597:7;16628:1;16613:315;16638:6;16635:1;16632:13;16613:315;;;16708:42;16743:6;16734:7;16708:42;:::i;:::-;16770:63;16829:3;16814:13;16770:63;:::i;:::-;16763:70;;16856:62;16911:6;16856:62;:::i;:::-;16846:72;;16673:255;16660:1;16657;16653:9;16648:14;;16613:315;;;16617:14;16944:3;16937:10;;16388:565;;16254:699;;;;;:::o;16959:491::-;17134:4;17172:2;17161:9;17157:18;17149:26;;17221:9;17215:4;17211:20;17207:1;17196:9;17192:17;17185:47;17249:118;17362:4;17353:6;17345;17249:118;:::i;:::-;17241:126;;17377:66;17439:2;17428:9;17424:18;17415:6;17377:66;:::i;:::-;16959:491;;;;;;:::o;17456:225::-;17596:34;17592:1;17584:6;17580:14;17573:58;17665:8;17660:2;17652:6;17648:15;17641:33;17456:225;:::o;17687:366::-;17829:3;17850:67;17914:2;17909:3;17850:67;:::i;:::-;17843:74;;17926:93;18015:3;17926:93;:::i;:::-;18044:2;18039:3;18035:12;18028:19;;17687:366;;;:::o;18059:419::-;18225:4;18263:2;18252:9;18248:18;18240:26;;18312:9;18306:4;18302:20;18298:1;18287:9;18283:17;18276:47;18340:131;18466:4;18340:131;:::i;:::-;18332:139;;18059:419;;;:::o;18484:348::-;18524:7;18547:20;18565:1;18547:20;:::i;:::-;18542:25;;18581:20;18599:1;18581:20;:::i;:::-;18576:25;;18769:1;18701:66;18697:74;18694:1;18691:81;18686:1;18679:9;18672:17;18668:105;18665:131;;;18776:18;;:::i;:::-;18665:131;18824:1;18821;18817:9;18806:20;;18484:348;;;;:::o;18838:180::-;18886:77;18883:1;18876:88;18983:4;18980:1;18973:15;19007:4;19004:1;18997:15;19024:185;19064:1;19081:20;19099:1;19081:20;:::i;:::-;19076:25;;19115:20;19133:1;19115:20;:::i;:::-;19110:25;;19154:1;19144:35;;19159:18;;:::i;:::-;19144:35;19201:1;19198;19194:9;19189:14;;19024:185;;;;:::o;19215:220::-;19355:34;19351:1;19343:6;19339:14;19332:58;19424:3;19419:2;19411:6;19407:15;19400:28;19215:220;:::o;19441:366::-;19583:3;19604:67;19668:2;19663:3;19604:67;:::i;:::-;19597:74;;19680:93;19769:3;19680:93;:::i;:::-;19798:2;19793:3;19789:12;19782:19;;19441:366;;;:::o;19813:419::-;19979:4;20017:2;20006:9;20002:18;19994:26;;20066:9;20060:4;20056:20;20052:1;20041:9;20037:17;20030:47;20094:131;20220:4;20094:131;:::i;:::-;20086:139;;19813:419;;;:::o;20238:223::-;20378:34;20374:1;20366:6;20362:14;20355:58;20447:6;20442:2;20434:6;20430:15;20423:31;20238:223;:::o;20467:366::-;20609:3;20630:67;20694:2;20689:3;20630:67;:::i;:::-;20623:74;;20706:93;20795:3;20706:93;:::i;:::-;20824:2;20819:3;20815:12;20808:19;;20467:366;;;:::o;20839:419::-;21005:4;21043:2;21032:9;21028:18;21020:26;;21092:9;21086:4;21082:20;21078:1;21067:9;21063:17;21056:47;21120:131;21246:4;21120:131;:::i;:::-;21112:139;;20839:419;;;:::o;21264:221::-;21404:34;21400:1;21392:6;21388:14;21381:58;21473:4;21468:2;21460:6;21456:15;21449:29;21264:221;:::o;21491:366::-;21633:3;21654:67;21718:2;21713:3;21654:67;:::i;:::-;21647:74;;21730:93;21819:3;21730:93;:::i;:::-;21848:2;21843:3;21839:12;21832:19;;21491:366;;;:::o;21863:419::-;22029:4;22067:2;22056:9;22052:18;22044:26;;22116:9;22110:4;22106:20;22102:1;22091:9;22087:17;22080:47;22144:131;22270:4;22144:131;:::i;:::-;22136:139;;21863:419;;;:::o;22288:179::-;22428:31;22424:1;22416:6;22412:14;22405:55;22288:179;:::o;22473:366::-;22615:3;22636:67;22700:2;22695:3;22636:67;:::i;:::-;22629:74;;22712:93;22801:3;22712:93;:::i;:::-;22830:2;22825:3;22821:12;22814:19;;22473:366;;;:::o;22845:419::-;23011:4;23049:2;23038:9;23034:18;23026:26;;23098:9;23092:4;23088:20;23084:1;23073:9;23069:17;23062:47;23126:131;23252:4;23126:131;:::i;:::-;23118:139;;22845:419;;;:::o;23270:167::-;23410:19;23406:1;23398:6;23394:14;23387:43;23270:167;:::o;23443:366::-;23585:3;23606:67;23670:2;23665:3;23606:67;:::i;:::-;23599:74;;23682:93;23771:3;23682:93;:::i;:::-;23800:2;23795:3;23791:12;23784:19;;23443:366;;;:::o;23815:419::-;23981:4;24019:2;24008:9;24004:18;23996:26;;24068:9;24062:4;24058:20;24054:1;24043:9;24039:17;24032:47;24096:131;24222:4;24096:131;:::i;:::-;24088:139;;23815:419;;;:::o;24240:220::-;24380:34;24376:1;24368:6;24364:14;24357:58;24449:3;24444:2;24436:6;24432:15;24425:28;24240:220;:::o;24466:366::-;24608:3;24629:67;24693:2;24688:3;24629:67;:::i;:::-;24622:74;;24705:93;24794:3;24705:93;:::i;:::-;24823:2;24818:3;24814:12;24807:19;;24466:366;;;:::o;24838:419::-;25004:4;25042:2;25031:9;25027:18;25019:26;;25091:9;25085:4;25081:20;25077:1;25066:9;25062:17;25055:47;25119:131;25245:4;25119:131;:::i;:::-;25111:139;;24838:419;;;:::o;25263:169::-;25403:21;25399:1;25391:6;25387:14;25380:45;25263:169;:::o;25438:366::-;25580:3;25601:67;25665:2;25660:3;25601:67;:::i;:::-;25594:74;;25677:93;25766:3;25677:93;:::i;:::-;25795:2;25790:3;25786:12;25779:19;;25438:366;;;:::o;25810:419::-;25976:4;26014:2;26003:9;25999:18;25991:26;;26063:9;26057:4;26053:20;26049:1;26038:9;26034:17;26027:47;26091:131;26217:4;26091:131;:::i;:::-;26083:139;;25810:419;;;:::o;26235:224::-;26375:34;26371:1;26363:6;26359:14;26352:58;26444:7;26439:2;26431:6;26427:15;26420:32;26235:224;:::o;26465:366::-;26607:3;26628:67;26692:2;26687:3;26628:67;:::i;:::-;26621:74;;26704:93;26793:3;26704:93;:::i;:::-;26822:2;26817:3;26813:12;26806:19;;26465:366;;;:::o;26837:419::-;27003:4;27041:2;27030:9;27026:18;27018:26;;27090:9;27084:4;27080:20;27076:1;27065:9;27061:17;27054:47;27118:131;27244:4;27118:131;:::i;:::-;27110:139;;26837:419;;;:::o;27262:222::-;27402:34;27398:1;27390:6;27386:14;27379:58;27471:5;27466:2;27458:6;27454:15;27447:30;27262:222;:::o;27490:366::-;27632:3;27653:67;27717:2;27712:3;27653:67;:::i;:::-;27646:74;;27729:93;27818:3;27729:93;:::i;:::-;27847:2;27842:3;27838:12;27831:19;;27490:366;;;:::o;27862:419::-;28028:4;28066:2;28055:9;28051:18;28043:26;;28115:9;28109:4;28105:20;28101:1;28090:9;28086:17;28079:47;28143:131;28269:4;28143:131;:::i;:::-;28135:139;;27862:419;;;:::o;28287:228::-;28427:34;28423:1;28415:6;28411:14;28404:58;28496:11;28491:2;28483:6;28479:15;28472:36;28287:228;:::o;28521:366::-;28663:3;28684:67;28748:2;28743:3;28684:67;:::i;:::-;28677:74;;28760:93;28849:3;28760:93;:::i;:::-;28878:2;28873:3;28869:12;28862:19;;28521:366;;;:::o;28893:419::-;29059:4;29097:2;29086:9;29082:18;29074:26;;29146:9;29140:4;29136:20;29132:1;29121:9;29117:17;29110:47;29174:131;29300:4;29174:131;:::i;:::-;29166:139;;28893:419;;;:::o;29318:191::-;29358:4;29378:20;29396:1;29378:20;:::i;:::-;29373:25;;29412:20;29430:1;29412:20;:::i;:::-;29407:25;;29451:1;29448;29445:8;29442:34;;;29456:18;;:::i;:::-;29442:34;29501:1;29498;29494:9;29486:17;;29318:191;;;;:::o;29515:174::-;29655:26;29651:1;29643:6;29639:14;29632:50;29515:174;:::o;29695:366::-;29837:3;29858:67;29922:2;29917:3;29858:67;:::i;:::-;29851:74;;29934:93;30023:3;29934:93;:::i;:::-;30052:2;30047:3;30043:12;30036:19;;29695:366;;;:::o;30067:419::-;30233:4;30271:2;30260:9;30256:18;30248:26;;30320:9;30314:4;30310:20;30306:1;30295:9;30291:17;30284:47;30348:131;30474:4;30348:131;:::i;:::-;30340:139;;30067:419;;;:::o;30492:175::-;30632:27;30628:1;30620:6;30616:14;30609:51;30492:175;:::o;30673:366::-;30815:3;30836:67;30900:2;30895:3;30836:67;:::i;:::-;30829:74;;30912:93;31001:3;30912:93;:::i;:::-;31030:2;31025:3;31021:12;31014:19;;30673:366;;;:::o;31045:419::-;31211:4;31249:2;31238:9;31234:18;31226:26;;31298:9;31292:4;31288:20;31284:1;31273:9;31269:17;31262:47;31326:131;31452:4;31326:131;:::i;:::-;31318:139;;31045:419;;;:::o;31470:177::-;31610:29;31606:1;31598:6;31594:14;31587:53;31470:177;:::o;31653:366::-;31795:3;31816:67;31880:2;31875:3;31816:67;:::i;:::-;31809:74;;31892:93;31981:3;31892:93;:::i;:::-;32010:2;32005:3;32001:12;31994:19;;31653:366;;;:::o;32025:419::-;32191:4;32229:2;32218:9;32214:18;32206:26;;32278:9;32272:4;32268:20;32264:1;32253:9;32249:17;32242:47;32306:131;32432:4;32306:131;:::i;:::-;32298:139;;32025:419;;;:::o;32450:178::-;32590:30;32586:1;32578:6;32574:14;32567:54;32450:178;:::o;32634:366::-;32776:3;32797:67;32861:2;32856:3;32797:67;:::i;:::-;32790:74;;32873:93;32962:3;32873:93;:::i;:::-;32991:2;32986:3;32982:12;32975:19;;32634:366;;;:::o;33006:419::-;33172:4;33210:2;33199:9;33195:18;33187:26;;33259:9;33253:4;33249:20;33245:1;33234:9;33230:17;33223:47;33287:131;33413:4;33287:131;:::i;:::-;33279:139;;33006:419;;;:::o;33431:225::-;33571:34;33567:1;33559:6;33555:14;33548:58;33640:8;33635:2;33627:6;33623:15;33616:33;33431:225;:::o;33662:366::-;33804:3;33825:67;33889:2;33884:3;33825:67;:::i;:::-;33818:74;;33901:93;33990:3;33901:93;:::i;:::-;34019:2;34014:3;34010:12;34003:19;;33662:366;;;:::o;34034:419::-;34200:4;34238:2;34227:9;34223:18;34215:26;;34287:9;34281:4;34277:20;34273:1;34262:9;34258:17;34251:47;34315:131;34441:4;34315:131;:::i;:::-;34307:139;;34034:419;;;:::o

Swarm Source

ipfs://7b47da08a5b166ea818af575279061f172e4940a137b3dbb393417830483e770

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.