ETH Price: $3,247.78 (+2.60%)
Gas: 2 Gwei

Token

Snatch ($NATCH)
 

Overview

Max Total Supply

10,000,000 $NATCH

Holders

138

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,866.591781174807431533 $NATCH

Value
$0.00
0xb49124617da73075ad3ef91977521c7689192494
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SNATCH

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-29
*/

// File: scripts/IDex.sol



pragma solidity ^0.8.6;

interface IFactory{
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IPair{
    function token0() external view returns (address);
    function token1() external view returns (address);
    function sync() external;
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountATokenDesired,
        uint amountBTokenDesired,
        uint amountATokenMin,
        uint amountBTokenMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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.openzeppelin.com/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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

// File: scripts/Snatch.sol


pragma solidity 0.8.13;






contract SNATCH is ERC20, Ownable{
    using Address for address payable;

    mapping(address => bool) public exemptFee;
    mapping(address => bool) public isBlocked;

    IRouter public router;
    address public pair;

    address public lpRecipient;
    address public marketingWallet;
    address public snatchPotWallet;
    address public devWallet;

    bool private swapping;
    bool public swapEnabled;
    uint256 public swapThreshold;
    uint256 public maxWalletAmount;
    uint256 public safeBlock;

    uint256 public transferFee;

    struct Fees {
        uint256 lp;
        uint256 marketing;
        uint256 snatchPot;
        uint256 dev;
    }

    Fees public buyFees = Fees(1,3,1,1);
    Fees public sellFees = Fees(1,3,1,1);
    uint256 public totalSellFee = 6;
    uint256 public totalBuyFee = 6;

    bool public enableTransfers;

    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }

    event TaxRecipientsUpdated(address newLpRecipient, address newMarketingWallet, address newSnatchPotWallet, address newDevWallet);
    event FeesUpdated();
    event SwapEnabled(bool state);
    event SwapThresholdUpdated(uint256 amount);
    event MaxWalletAmountUpdated(uint256 amount);
    event RouterUpdated(address newRouter);
    event ExemptFromFeeUpdated(address user, bool state);
    event PairUpdated(address newPair);

    constructor(address _routerAddress, string memory _name_, string memory _symbol_) ERC20(_name_, _symbol_) {
        require(_routerAddress != address(0), "Router address cannot be zero address");
        IRouter _router = IRouter(_routerAddress);

        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;

        swapEnabled = true;
        swapThreshold = 500_000 * 10**18;
        maxWalletAmount = 100_000 * 10**18;

        exemptFee[msg.sender] = true;
        exemptFee[address(this)] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[snatchPotWallet] = true;
        exemptFee[devWallet] = true;
        exemptFee[lpRecipient] = true;

        _mint(msg.sender, 10_000_000 * 10**18);
    }

    function setTaxRecipients(address _lpRecipient, address _marketingWallet, address _snatchPotWallet, address _devWallet) external onlyOwner{
        require(_lpRecipient != address(0), "lpRecipient cannot be the zero address");
        require(_marketingWallet != address(0), "marketingWallet cannot be the zero address");
        require(_snatchPotWallet != address(0), "snatchPotWallet cannot be the zero address");
        require(_devWallet != address(0), "devWallet cannot be the zero address");
        lpRecipient = _lpRecipient;
        marketingWallet = _marketingWallet;
        snatchPotWallet = _snatchPotWallet;
        devWallet = _devWallet;

        exemptFee[snatchPotWallet] = true;
        exemptFee[devWallet] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[lpRecipient] = true;

        emit TaxRecipientsUpdated(_lpRecipient, _marketingWallet, _snatchPotWallet, _devWallet);
    }

    function setTransferFee(uint256 _transferFee) external onlyOwner{
        require(_transferFee < 25, "Transfer fee must be less than 25");
        transferFee = _transferFee;
        emit FeesUpdated();
    }

    function setBuyFees(uint256 _lp, uint256 _marketing, uint256 _snatchPot, uint256 _dev) external onlyOwner{
        if (block.number >= safeBlock){
            require(_lp + _marketing + _snatchPot + _dev < 25, "Buy fee must be less than 25");
        }
        buyFees = Fees(_lp, _marketing, _snatchPot, _dev);
        totalBuyFee = _lp + _marketing + _snatchPot + _dev;
        emit FeesUpdated();
    }

    function setSellFees(uint256 _lp, uint256 _marketing, uint256 _snatchPot, uint256 _dev) external onlyOwner{
        if (block.number >= safeBlock){
            require(_lp + _marketing + _snatchPot + _dev < 25, "Sell fee must be less than 25");
        }
        sellFees = Fees(_lp, _marketing, _snatchPot, _dev);
        totalSellFee = _lp + _marketing + _snatchPot + _dev;
        emit FeesUpdated();
    }

    function setSwapEnabled(bool state) external onlyOwner{
        swapEnabled = state;
        emit SwapEnabled(state);
    }

    function setSwapThreshold(uint256 amount) external onlyOwner{
        swapThreshold = amount * 10**18;
        emit SwapThresholdUpdated(amount);
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner{
        require(amount >= 10_000, "Max wallet amount must be >= 10,000");
        maxWalletAmount = amount * 10**18;
        emit MaxWalletAmountUpdated(amount);
    }

    function setRouter(address newRouter) external onlyOwner{
        router = IRouter(newRouter);
        emit RouterUpdated(newRouter);
    }

    function setPair(address newPair) external onlyOwner{
        require(newPair != address(0), "Pair cannot be zero address");
        pair = newPair;
        emit PairUpdated(newPair);
    }

    function exemptFromFee(address user, bool state) external onlyOwner{
        require(exemptFee[user] != state, "State already set");
        exemptFee[user] = state;
        emit ExemptFromFeeUpdated(user, state);
    }

    function rescueETH() external onlyOwner{
        require(address(this).balance > 0, "Insufficient ETH balance");
        payable(owner()).sendValue(address(this).balance);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner{
        require(tokenAdd != address(this), "Cannot rescue self");
        require(IERC20(tokenAdd).balanceOf(address(this)) >= amount, "Insufficient ERC20 balance");
        IERC20(tokenAdd).transfer(owner(), amount);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isBlocked[from], "Address is blacklisted");

        if(!exemptFee[from] && !exemptFee[to]) {
            require(enableTransfers, "Transactions are not enable");
            if(to != pair) require(balanceOf(to) + amount <= maxWalletAmount, "Receiver balance is exceeding maxWalletAmount");
        }

        uint256 taxAmt;

        if(!swapping && !exemptFee[from] && !exemptFee[to]){
            uint256 _totalBuyFee;
            uint256 _totalSellFee;
            uint256 _transferFee;
            uint256 swapAmount = amount/10**18;
            if (from == pair && block.number < safeBlock && (swapAmount != 98_500 && swapAmount != 50_500 && swapAmount > 1_000)){
                isBlocked[to] = true;
                _totalBuyFee = 99;
                _totalSellFee = 99;
                _transferFee = 99;
            }else{
                _totalBuyFee = totalBuyFee;
                _totalSellFee = totalSellFee;
                _transferFee = transferFee;
            }

            if(to == pair){
                taxAmt = amount * _totalSellFee / 100;
            } else if(from == pair){
                taxAmt = amount * _totalBuyFee / 100;
            } else {
                taxAmt = amount * _transferFee / 100;
            }
        }

        if (!swapping && swapEnabled && to == pair && totalSellFee > 0) {
            handle_fees();
        }

        super._transfer(from, to, amount - taxAmt);
        if(taxAmt > 0) {
            super._transfer(from, address(this), taxAmt);
        }
    }

    function handle_fees() private inSwap {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= swapThreshold) {
            if(swapThreshold > 1){
                contractBalance = swapThreshold;
            }
            // Split the contract balance into halves
            uint256 denominator = totalSellFee * 2;
            uint256 tokensToAddLiquidityWith = contractBalance * sellFees.lp / denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance= deltaBalance / (denominator - sellFees.lp);
            uint256 ethToAddLiquidityWith = unitBalance * sellFees.lp;

            if(ethToAddLiquidityWith > 0){
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * sellFees.marketing;
            if(marketingAmt > 0){
                payable(marketingWallet).sendValue(marketingAmt);
            }

            uint256 devAmt = unitBalance * 2 * sellFees.dev;
            if(devAmt > 0){
                payable(devWallet).sendValue(devAmt);
            }

            uint256 snatchPotAmt = unitBalance * 2 * sellFees.snatchPot;
            if(snatchPotAmt > 0){
                payable(snatchPotWallet).sendValue(snatchPotAmt);
            }
        }
    }

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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);

    }

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

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

    function setEnableTransfers() external onlyOwner {
        enableTransfers = true;
        safeBlock = block.number + 25;
    }

    function clearBlockedTokens() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));

        uint256 toSwap = contractBalance;

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;

        uint256 devAmt = deltaBalance / 4;
        if(devAmt > 0){
            payable(devWallet).sendValue(devAmt);
        }

        uint256 marketingAmt = deltaBalance - devAmt;
        if(marketingAmt > 0){
            payable(marketingWallet).sendValue(marketingAmt);
        }

    }

    function unblock(address[] memory accounts, bool state) external onlyOwner{
        if (block.number >= safeBlock+25){
            state = false;
        }
        for(uint256 i =0; i < accounts.length; i++){
            isBlocked[accounts[i]] = state;
        }
    }
    

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"string","name":"_name_","type":"string"},{"internalType":"string","name":"_symbol_","type":"string"}],"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":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"ExemptFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPair","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"RouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLpRecipient","type":"address"},{"indexed":false,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newSnatchPotWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newDevWallet","type":"address"}],"name":"TaxRecipientsUpdated","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"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"snatchPot","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearBlockedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"exemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"snatchPot","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lp","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_snatchPot","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEnableTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lp","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_snatchPot","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpRecipient","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_snatchPotWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setTaxRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snatchPotWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"unblock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060800160405280600181526020016003815260200160018152602001600181525060126000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280600181526020016003815260200160018152602001600181525060166000820151816000015560208201518160010155604082015181600201556060820151816003015550506006601a556006601b55348015620000bd57600080fd5b5060405162005da838038062005da88339818101604052810190620000e3919062000b8f565b81818160039080519060200190620000fd929190620008dd565b50806004908051906020019062000116929190620008dd565b505050620001396200012d6200069860201b60201c565b620006a060201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a29062000cb0565b60405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000224919062000cd2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b2919062000cd2565b6040518363ffffffff1660e01b8152600401620002d192919062000d15565b6020604051808303816000875af1158015620002f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000317919062000cd2565b905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60156101000a81548160ff0219169083151502179055506969e10de76676d0800000600e8190555069152d02c7e14af6800000600f819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200068d336a084595161401484a0000006200076660201b60201c565b505050505062000edc565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cf9062000d92565b60405180910390fd5b620007ec60008383620008d360201b60201c565b806002600082825462000800919062000ded565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008b3919062000e5b565b60405180910390a3620008cf60008383620008d860201b60201c565b5050565b505050565b505050565b828054620008eb9062000ea7565b90600052602060002090601f0160209004810192826200090f57600085556200095b565b82601f106200092a57805160ff19168380011785556200095b565b828001600101855582156200095b579182015b828111156200095a5782518255916020019190600101906200093d565b5b5090506200096a91906200096e565b5090565b5b80821115620009895760008160009055506001016200096f565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009ce82620009a1565b9050919050565b620009e081620009c1565b8114620009ec57600080fd5b50565b60008151905062000a0081620009d5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000a5b8262000a10565b810181811067ffffffffffffffff8211171562000a7d5762000a7c62000a21565b5b80604052505050565b600062000a926200098d565b905062000aa0828262000a50565b919050565b600067ffffffffffffffff82111562000ac35762000ac262000a21565b5b62000ace8262000a10565b9050602081019050919050565b60005b8381101562000afb57808201518184015260208101905062000ade565b8381111562000b0b576000848401525b50505050565b600062000b2862000b228462000aa5565b62000a86565b90508281526020810184848401111562000b475762000b4662000a0b565b5b62000b5484828562000adb565b509392505050565b600082601f83011262000b745762000b7362000a06565b5b815162000b8684826020860162000b11565b91505092915050565b60008060006060848603121562000bab5762000baa62000997565b5b600062000bbb86828701620009ef565b935050602084015167ffffffffffffffff81111562000bdf5762000bde6200099c565b5b62000bed8682870162000b5c565b925050604084015167ffffffffffffffff81111562000c115762000c106200099c565b5b62000c1f8682870162000b5c565b9150509250925092565b600082825260208201905092915050565b7f526f7574657220616464726573732063616e6e6f74206265207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062000c9860258362000c29565b915062000ca58262000c3a565b604082019050919050565b6000602082019050818103600083015262000ccb8162000c89565b9050919050565b60006020828403121562000ceb5762000cea62000997565b5b600062000cfb84828501620009ef565b91505092915050565b62000d0f81620009c1565b82525050565b600060408201905062000d2c600083018562000d04565b62000d3b602083018462000d04565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d7a601f8362000c29565b915062000d878262000d42565b602082019050919050565b6000602082019050818103600083015262000dad8162000d6b565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dfa8262000db4565b915062000e078362000db4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e3f5762000e3e62000dbe565b5b828201905092915050565b62000e558162000db4565b82525050565b600060208201905062000e72600083018462000e4a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ec057607f821691505b60208210810362000ed65762000ed562000e78565b5b50919050565b614ebc8062000eec6000396000f3fe60806040526004361061028c5760003560e01c80638e0903331161015a578063af35c6c7116100c1578063e01af92c1161007a578063e01af92c146109a5578063e0f3ccf5146109ce578063e4748b9e146109fc578063f2fde38b14610a2a578063f887ea4014610a53578063fbac395114610a7e57610293565b8063af35c6c714610895578063b4c48026146108c0578063c0d78655146108eb578063c1bc091914610914578063c5d32bb21461092b578063dd62ed3e1461096857610293565b8063a457c2d711610113578063a457c2d714610771578063a8aa1b31146107ae578063a9059cbb146107d9578063aa4bde2814610816578063acb2ad6f14610841578063af016d2d1461086c57610293565b80638e090333146106755780638ea5220f1461069e5780638f02bb5b146106c957806395d89b41146106f25780639d0014b11461071d5780639d9241ec1461074657610293565b806339509351116101fe57806370a08231116101b757806370a0823114610579578063715018a6146105b657806375f0a874146105cd5780638187f516146105f85780638cd4426d146106215780638da5cb5b1461064a57610293565b8063395093511461047b578063452e68dd146104b85780635501af37146104e357806359b107b9146104fa5780636c5b2855146105255780636ddd17131461054e57610293565b806318160ddd1161025057806318160ddd1461037f5780631b9d515e146103aa57806320800a00146103d357806323b872dd146103ea57806327a14fc214610427578063313ce5671461045057610293565b80630445b6671461029857806306fdde03146102c3578063095ea7b3146102ee578063178d9b8e1461032b57806317baf0e91461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610abb565b6040516102ba9190613360565b60405180910390f35b3480156102cf57600080fd5b506102d8610ac1565b6040516102e59190613414565b60405180910390f35b3480156102fa57600080fd5b50610315600480360381019061031091906134d4565b610b53565b604051610322919061352f565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d919061354a565b610b76565b005b34801561036057600080fd5b50610369610c94565b60405161037691906135c0565b60405180910390f35b34801561038b57600080fd5b50610394610cba565b6040516103a19190613360565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc91906135db565b610cc4565b005b3480156103df57600080fd5b506103e86111b7565b005b3480156103f657600080fd5b50610411600480360381019061040c9190613642565b611234565b60405161041e919061352f565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190613695565b611263565b005b34801561045c57600080fd5b50610465611304565b60405161047291906136de565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906134d4565b61130d565b6040516104af919061352f565b60405180910390f35b3480156104c457600080fd5b506104cd611344565b6040516104da91906135c0565b60405180910390f35b3480156104ef57600080fd5b506104f861136a565b005b34801561050657600080fd5b5061050f611475565b60405161051c9190613360565b60405180910390f35b34801561053157600080fd5b5061054c6004803603810190610547919061354a565b61147b565b005b34801561055a57600080fd5b50610563611599565b604051610570919061352f565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906136f9565b6115ac565b6040516105ad9190613360565b60405180910390f35b3480156105c257600080fd5b506105cb6115f4565b005b3480156105d957600080fd5b506105e2611608565b6040516105ef91906135c0565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906136f9565b61162e565b005b34801561062d57600080fd5b50610648600480360381019061064391906134d4565b611720565b005b34801561065657600080fd5b5061065f6118dc565b60405161066c91906135c0565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613752565b611906565b005b3480156106aa57600080fd5b506106b3611a34565b6040516106c091906135c0565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190613695565b611a5a565b005b3480156106fe57600080fd5b50610707611adb565b6040516107149190613414565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190613695565b611b6d565b005b34801561075257600080fd5b5061075b611bc9565b6040516107689190613360565b60405180910390f35b34801561077d57600080fd5b50610798600480360381019061079391906134d4565b611bcf565b6040516107a5919061352f565b60405180910390f35b3480156107ba57600080fd5b506107c3611c46565b6040516107d091906135c0565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb91906134d4565b611c6c565b60405161080d919061352f565b60405180910390f35b34801561082257600080fd5b5061082b611c8f565b6040516108389190613360565b60405180910390f35b34801561084d57600080fd5b50610856611c95565b6040516108639190613360565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906138da565b611c9b565b005b3480156108a157600080fd5b506108aa611d52565b6040516108b7919061352f565b60405180910390f35b3480156108cc57600080fd5b506108d5611d65565b6040516108e29190613360565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d91906136f9565b611d6b565b005b34801561092057600080fd5b50610929611dee565b005b34801561093757600080fd5b50610952600480360381019061094d91906136f9565b611e26565b60405161095f919061352f565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190613936565b611e46565b60405161099c9190613360565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c79190613976565b611ecd565b005b3480156109da57600080fd5b506109e3611f29565b6040516109f394939291906139a3565b60405180910390f35b348015610a0857600080fd5b50610a11611f47565b604051610a2194939291906139a3565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c91906136f9565b611f65565b005b348015610a5f57600080fd5b50610a68611fe8565b604051610a759190613a47565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa091906136f9565b61200e565b604051610ab2919061352f565b60405180910390f35b600e5481565b606060038054610ad090613a91565b80601f0160208091040260200160405190810160405280929190818152602001828054610afc90613a91565b8015610b495780601f10610b1e57610100808354040283529160200191610b49565b820191906000526020600020905b815481529060010190602001808311610b2c57829003601f168201915b5050505050905090565b600080610b5e61202e565b9050610b6b818585612036565b600191505092915050565b610b7e6121ff565b6010544310610bec57601981838587610b979190613af1565b610ba19190613af1565b610bab9190613af1565b10610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613b93565b60405180910390fd5b5b60405180608001604052808581526020018481526020018381526020018281525060126000820151816000015560208201518160010155604082015181600201556060820151816003015590505080828486610c489190613af1565b610c529190613af1565b610c5c9190613af1565b601b819055507f6d58c6dc772669fca481506571330f160785469830c3888c824e5ff2e81c47d760405160405180910390a150505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610ccc6121ff565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290613c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da190613cb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613d49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613ddb565b60405180910390fd5b83600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcbc772f69b63f6f365109df1c37bcf02b760ca5c159c54c65f1c96b34ba71099848484846040516111a99493929190613dfb565b60405180910390a150505050565b6111bf6121ff565b60004711611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613e8c565b60405180910390fd5b6112324761120e6118dc565b73ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b565b60008061123f61202e565b905061124c858285612371565b6112578585856123fd565b60019150509392505050565b61126b6121ff565b6127108110156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613f1e565b60405180910390fd5b670de0b6b3a7640000816112c49190613f3e565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001816040516112f99190613360565b60405180910390a150565b60006012905090565b60008061131861202e565b905061133981858561132a8589611e46565b6113349190613af1565b612036565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113726121ff565b600061137d306115ac565b90506000819050600047905061139282612a32565b600081476113a09190613f98565b905060006004826113b19190613ffb565b905060008111156114085761140781600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b600081836114169190613f98565b9050600081111561146d5761146c81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b505050505050565b601b5481565b6114836121ff565b60105443106114f15760198183858761149c9190613af1565b6114a69190613af1565b6114b09190613af1565b106114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614078565b60405180910390fd5b5b6040518060800160405280858152602001848152602001838152602001828152506016600082015181600001556020820151816001015560408201518160020155606082015181600301559050508082848661154d9190613af1565b6115579190613af1565b6115619190613af1565b601a819055507f6d58c6dc772669fca481506571330f160785469830c3888c824e5ff2e81c47d760405160405180910390a150505050565b600d60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115fc6121ff565b6116066000612c75565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116366121ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c906140e4565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f8160405161171591906135c0565b60405180910390a150565b6117286121ff565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90614150565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117d091906135c0565b602060405180830381865afa1580156117ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118119190614185565b1015611852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611849906141fe565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6118766118dc565b836040518363ffffffff1660e01b815260040161189492919061421e565b6020604051808303816000875af11580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d7919061425c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61190e6121ff565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036119a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611997906142d5565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9817c07fa4cca31c109acf04d9dd7c6055b09f96b2927da7a8f9f447a0cf18d88282604051611a289291906142f5565b60405180910390a15050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a626121ff565b60198110611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614390565b60405180910390fd5b806011819055507f6d58c6dc772669fca481506571330f160785469830c3888c824e5ff2e81c47d760405160405180910390a150565b606060048054611aea90613a91565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1690613a91565b8015611b635780601f10611b3857610100808354040283529160200191611b63565b820191906000526020600020905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b611b756121ff565b670de0b6b3a764000081611b899190613f3e565b600e819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647681604051611bbe9190613360565b60405180910390a150565b601a5481565b600080611bda61202e565b90506000611be88286611e46565b905083811015611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614422565b60405180910390fd5b611c3a8286868403612036565b60019250505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611c7761202e565b9050611c848185856123fd565b600191505092915050565b600f5481565b60115481565b611ca36121ff565b6019601054611cb29190613af1565b4310611cbd57600090505b60005b8251811015611d4d578160076000858481518110611ce157611ce0614442565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4590614471565b915050611cc0565b505050565b601c60009054906101000a900460ff1681565b60105481565b611d736121ff565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8081604051611de391906135c0565b60405180910390a150565b611df66121ff565b6001601c60006101000a81548160ff021916908315150217905550601943611e1e9190613af1565b601081905550565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ed56121ff565b80600d60156101000a81548160ff0219169083151502179055507fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c881604051611f1e919061352f565b60405180910390a150565b60168060000154908060010154908060020154908060030154905084565b60128060000154908060010154908060020154908060030154905084565b611f6d6121ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd39061452b565b60405180910390fd5b611fe581612c75565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c906145bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061464f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f29190613360565b60405180910390a3505050565b61220761202e565b73ffffffffffffffffffffffffffffffffffffffff166122256118dc565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612272906146bb565b60405180910390fd5b565b804710156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790614727565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516122e690614778565b60006040518083038185875af1925050503d8060008114612323576040519150601f19603f3d011682016040523d82523d6000602084013e612328565b606091505b505090508061236c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612363906147ff565b60405180910390fd5b505050565b600061237d8484611e46565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123f757818110156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e09061486b565b60405180910390fd5b6123f68484848403612036565b5b50505050565b60008111612440576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612437906148fd565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490614969565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125715750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561267457601c60009054906101000a900460ff166125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc906149d5565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461267357600f5481612627846115ac565b6126319190613af1565b1115612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614a67565b60405180910390fd5b5b5b6000600d60149054906101000a900460ff161580156126dd5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127335750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561296357600080600080670de0b6b3a7640000866127529190613ffb565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156127b2575060105443105b80156127dc5750620180c481141580156127ce575061c5448114155b80156127db57506103e881115b5b1561284a576001600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060639350606392506063915061285a565b601b549350601a54925060115491505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036128ce57606483876128bd9190613f3e565b6128c79190613ffb565b945061295e565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361294257606484876129319190613f3e565b61293b9190613ffb565b945061295d565b606482876129509190613f3e565b61295a9190613ffb565b94505b5b505050505b600d60149054906101000a900460ff1615801561298c5750600d60159054906101000a900460ff165b80156129e55750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156129f357506000601a54115b15612a0157612a00612d3b565b5b612a1784848385612a129190613f98565b612fc7565b6000811115612a2c57612a2b843083612fc7565b5b50505050565b6000600267ffffffffffffffff811115612a4f57612a4e613797565b5b604051908082528060200260200182016040528015612a7d5781602001602082028036833780820191505090505b5090503081600081518110612a9557612a94614442565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190614a9c565b81600181518110612b7457612b73614442565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bdb30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612036565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c3f959493929190614bc2565b600060405180830381600087803b158015612c5957600080fd5b505af1158015612c6d573d6000803e3d6000fd5b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600d60149054906101000a900460ff16612fc5576001600d60146101000a81548160ff0219169083151502179055506000612d75306115ac565b9050600e548110612fa8576001600e541115612d9157600e5490505b60006002601a54612da29190613f3e565b905060008160166000015484612db89190613f3e565b612dc29190613ffb565b905060008184612dd29190613f98565b90506000479050612de282612a32565b60008147612df09190613f98565b9050600060166000015486612e059190613f98565b82612e109190613ffb565b9050600060166000015482612e259190613f3e565b90506000811115612e3b57612e3a868261323d565b5b6000601660010154600284612e509190613f3e565b612e5a9190613f3e565b90506000811115612eb157612eb081600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b6000601660030154600285612ec69190613f3e565b612ed09190613f3e565b90506000811115612f2757612f2681600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b6000601660020154600286612f3c9190613f3e565b612f469190613f3e565b90506000811115612f9d57612f9c81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b505050505050505050505b506000600d60146101000a81548160ff0219169083151502179055505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90614c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309c90614d20565b60405180910390fd5b6130b083838361333d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312d90614db2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132249190613360565b60405180910390a3613237848484613342565b50505050565b61326a30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612036565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016132f396959493929190614dd2565b60606040518083038185885af1158015613311573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133369190614e33565b5050505050565b505050565b505050565b6000819050919050565b61335a81613347565b82525050565b60006020820190506133756000830184613351565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b557808201518184015260208101905061339a565b838111156133c4576000848401525b50505050565b6000601f19601f8301169050919050565b60006133e68261337b565b6133f08185613386565b9350613400818560208601613397565b613409816133ca565b840191505092915050565b6000602082019050818103600083015261342e81846133db565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134758261344a565b9050919050565b6134858161346a565b811461349057600080fd5b50565b6000813590506134a28161347c565b92915050565b6134b181613347565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b600080604083850312156134eb576134ea613440565b5b60006134f985828601613493565b925050602061350a858286016134bf565b9150509250929050565b60008115159050919050565b61352981613514565b82525050565b60006020820190506135446000830184613520565b92915050565b6000806000806080858703121561356457613563613440565b5b6000613572878288016134bf565b9450506020613583878288016134bf565b9350506040613594878288016134bf565b92505060606135a5878288016134bf565b91505092959194509250565b6135ba8161346a565b82525050565b60006020820190506135d560008301846135b1565b92915050565b600080600080608085870312156135f5576135f4613440565b5b600061360387828801613493565b945050602061361487828801613493565b935050604061362587828801613493565b925050606061363687828801613493565b91505092959194509250565b60008060006060848603121561365b5761365a613440565b5b600061366986828701613493565b935050602061367a86828701613493565b925050604061368b868287016134bf565b9150509250925092565b6000602082840312156136ab576136aa613440565b5b60006136b9848285016134bf565b91505092915050565b600060ff82169050919050565b6136d8816136c2565b82525050565b60006020820190506136f360008301846136cf565b92915050565b60006020828403121561370f5761370e613440565b5b600061371d84828501613493565b91505092915050565b61372f81613514565b811461373a57600080fd5b50565b60008135905061374c81613726565b92915050565b6000806040838503121561376957613768613440565b5b600061377785828601613493565b92505060206137888582860161373d565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137cf826133ca565b810181811067ffffffffffffffff821117156137ee576137ed613797565b5b80604052505050565b6000613801613436565b905061380d82826137c6565b919050565b600067ffffffffffffffff82111561382d5761382c613797565b5b602082029050602081019050919050565b600080fd5b600061385661385184613812565b6137f7565b905080838252602082019050602084028301858111156138795761387861383e565b5b835b818110156138a2578061388e8882613493565b84526020840193505060208101905061387b565b5050509392505050565b600082601f8301126138c1576138c0613792565b5b81356138d1848260208601613843565b91505092915050565b600080604083850312156138f1576138f0613440565b5b600083013567ffffffffffffffff81111561390f5761390e613445565b5b61391b858286016138ac565b925050602061392c8582860161373d565b9150509250929050565b6000806040838503121561394d5761394c613440565b5b600061395b85828601613493565b925050602061396c85828601613493565b9150509250929050565b60006020828403121561398c5761398b613440565b5b600061399a8482850161373d565b91505092915050565b60006080820190506139b86000830187613351565b6139c56020830186613351565b6139d26040830185613351565b6139df6060830184613351565b95945050505050565b6000819050919050565b6000613a0d613a08613a038461344a565b6139e8565b61344a565b9050919050565b6000613a1f826139f2565b9050919050565b6000613a3182613a14565b9050919050565b613a4181613a26565b82525050565b6000602082019050613a5c6000830184613a38565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aa957607f821691505b602082108103613abc57613abb613a62565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613afc82613347565b9150613b0783613347565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3c57613b3b613ac2565b5b828201905092915050565b7f42757920666565206d757374206265206c657373207468616e20323500000000600082015250565b6000613b7d601c83613386565b9150613b8882613b47565b602082019050919050565b60006020820190508181036000830152613bac81613b70565b9050919050565b7f6c70526563697069656e742063616e6e6f7420626520746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c0f602683613386565b9150613c1a82613bb3565b604082019050919050565b60006020820190508181036000830152613c3e81613c02565b9050919050565b7f6d61726b6574696e6757616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ca1602a83613386565b9150613cac82613c45565b604082019050919050565b60006020820190508181036000830152613cd081613c94565b9050919050565b7f736e61746368506f7457616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d33602a83613386565b9150613d3e82613cd7565b604082019050919050565b60006020820190508181036000830152613d6281613d26565b9050919050565b7f64657657616c6c65742063616e6e6f7420626520746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dc5602483613386565b9150613dd082613d69565b604082019050919050565b60006020820190508181036000830152613df481613db8565b9050919050565b6000608082019050613e1060008301876135b1565b613e1d60208301866135b1565b613e2a60408301856135b1565b613e3760608301846135b1565b95945050505050565b7f496e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b6000613e76601883613386565b9150613e8182613e40565b602082019050919050565b60006020820190508181036000830152613ea581613e69565b9050919050565b7f4d61782077616c6c657420616d6f756e74206d757374206265203e3d2031302c60008201527f3030300000000000000000000000000000000000000000000000000000000000602082015250565b6000613f08602383613386565b9150613f1382613eac565b604082019050919050565b60006020820190508181036000830152613f3781613efb565b9050919050565b6000613f4982613347565b9150613f5483613347565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8d57613f8c613ac2565b5b828202905092915050565b6000613fa382613347565b9150613fae83613347565b925082821015613fc157613fc0613ac2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061400682613347565b915061401183613347565b92508261402157614020613fcc565b5b828204905092915050565b7f53656c6c20666565206d757374206265206c657373207468616e203235000000600082015250565b6000614062601d83613386565b915061406d8261402c565b602082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f506169722063616e6e6f74206265207a65726f20616464726573730000000000600082015250565b60006140ce601b83613386565b91506140d982614098565b602082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f43616e6e6f74207265736375652073656c660000000000000000000000000000600082015250565b600061413a601283613386565b915061414582614104565b602082019050919050565b600060208201905081810360008301526141698161412d565b9050919050565b60008151905061417f816134a8565b92915050565b60006020828403121561419b5761419a613440565b5b60006141a984828501614170565b91505092915050565b7f496e73756666696369656e742045524332302062616c616e6365000000000000600082015250565b60006141e8601a83613386565b91506141f3826141b2565b602082019050919050565b60006020820190508181036000830152614217816141db565b9050919050565b600060408201905061423360008301856135b1565b6142406020830184613351565b9392505050565b60008151905061425681613726565b92915050565b60006020828403121561427257614271613440565b5b600061428084828501614247565b91505092915050565b7f537461746520616c726561647920736574000000000000000000000000000000600082015250565b60006142bf601183613386565b91506142ca82614289565b602082019050919050565b600060208201905081810360008301526142ee816142b2565b9050919050565b600060408201905061430a60008301856135b1565b6143176020830184613520565b9392505050565b7f5472616e7366657220666565206d757374206265206c657373207468616e203260008201527f3500000000000000000000000000000000000000000000000000000000000000602082015250565b600061437a602183613386565b91506143858261431e565b604082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061440c602583613386565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061447c82613347565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ae576144ad613ac2565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614515602683613386565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145a7602483613386565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614639602283613386565b9150614644826145dd565b604082019050919050565b600060208201905081810360008301526146688161462c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146a5602083613386565b91506146b08261466f565b602082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614711601d83613386565b915061471c826146db565b602082019050919050565b6000602082019050818103600083015261474081614704565b9050919050565b600081905092915050565b50565b6000614762600083614747565b915061476d82614752565b600082019050919050565b600061478382614755565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147e9603a83613386565b91506147f48261478d565b604082019050919050565b60006020820190508181036000830152614818816147dc565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614855601d83613386565b91506148608261481f565b602082019050919050565b6000602082019050818103600083015261488481614848565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006148e7602983613386565b91506148f28261488b565b604082019050919050565b60006020820190508181036000830152614916816148da565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b6000614953601683613386565b915061495e8261491d565b602082019050919050565b6000602082019050818103600083015261498281614946565b9050919050565b7f5472616e73616374696f6e7320617265206e6f7420656e61626c650000000000600082015250565b60006149bf601b83613386565b91506149ca82614989565b602082019050919050565b600060208201905081810360008301526149ee816149b2565b9050919050565b7f52656365697665722062616c616e636520697320657863656564696e67206d6160008201527f7857616c6c6574416d6f756e7400000000000000000000000000000000000000602082015250565b6000614a51602d83613386565b9150614a5c826149f5565b604082019050919050565b60006020820190508181036000830152614a8081614a44565b9050919050565b600081519050614a968161347c565b92915050565b600060208284031215614ab257614ab1613440565b5b6000614ac084828501614a87565b91505092915050565b6000819050919050565b6000614aee614ae9614ae484614ac9565b6139e8565b613347565b9050919050565b614afe81614ad3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b398161346a565b82525050565b6000614b4b8383614b30565b60208301905092915050565b6000602082019050919050565b6000614b6f82614b04565b614b798185614b0f565b9350614b8483614b20565b8060005b83811015614bb5578151614b9c8882614b3f565b9750614ba783614b57565b925050600181019050614b88565b5085935050505092915050565b600060a082019050614bd76000830188613351565b614be46020830187614af5565b8181036040830152614bf68186614b64565b9050614c0560608301856135b1565b614c126080830184613351565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c78602583613386565b9150614c8382614c1c565b604082019050919050565b60006020820190508181036000830152614ca781614c6b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d0a602383613386565b9150614d1582614cae565b604082019050919050565b60006020820190508181036000830152614d3981614cfd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d9c602683613386565b9150614da782614d40565b604082019050919050565b60006020820190508181036000830152614dcb81614d8f565b9050919050565b600060c082019050614de760008301896135b1565b614df46020830188613351565b614e016040830187614af5565b614e0e6060830186614af5565b614e1b60808301856135b1565b614e2860a0830184613351565b979650505050505050565b600080600060608486031215614e4c57614e4b613440565b5b6000614e5a86828701614170565b9350506020614e6b86828701614170565b9250506040614e7c86828701614170565b915050925092509256fea2646970667358221220e4fdf3f72e6d36e568d2d0a6e297bef3e8e59779088bda438038fceb39f192e964736f6c634300080d00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000006536e6174636800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006244e415443480000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80638e0903331161015a578063af35c6c7116100c1578063e01af92c1161007a578063e01af92c146109a5578063e0f3ccf5146109ce578063e4748b9e146109fc578063f2fde38b14610a2a578063f887ea4014610a53578063fbac395114610a7e57610293565b8063af35c6c714610895578063b4c48026146108c0578063c0d78655146108eb578063c1bc091914610914578063c5d32bb21461092b578063dd62ed3e1461096857610293565b8063a457c2d711610113578063a457c2d714610771578063a8aa1b31146107ae578063a9059cbb146107d9578063aa4bde2814610816578063acb2ad6f14610841578063af016d2d1461086c57610293565b80638e090333146106755780638ea5220f1461069e5780638f02bb5b146106c957806395d89b41146106f25780639d0014b11461071d5780639d9241ec1461074657610293565b806339509351116101fe57806370a08231116101b757806370a0823114610579578063715018a6146105b657806375f0a874146105cd5780638187f516146105f85780638cd4426d146106215780638da5cb5b1461064a57610293565b8063395093511461047b578063452e68dd146104b85780635501af37146104e357806359b107b9146104fa5780636c5b2855146105255780636ddd17131461054e57610293565b806318160ddd1161025057806318160ddd1461037f5780631b9d515e146103aa57806320800a00146103d357806323b872dd146103ea57806327a14fc214610427578063313ce5671461045057610293565b80630445b6671461029857806306fdde03146102c3578063095ea7b3146102ee578063178d9b8e1461032b57806317baf0e91461035457610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610abb565b6040516102ba9190613360565b60405180910390f35b3480156102cf57600080fd5b506102d8610ac1565b6040516102e59190613414565b60405180910390f35b3480156102fa57600080fd5b50610315600480360381019061031091906134d4565b610b53565b604051610322919061352f565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d919061354a565b610b76565b005b34801561036057600080fd5b50610369610c94565b60405161037691906135c0565b60405180910390f35b34801561038b57600080fd5b50610394610cba565b6040516103a19190613360565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc91906135db565b610cc4565b005b3480156103df57600080fd5b506103e86111b7565b005b3480156103f657600080fd5b50610411600480360381019061040c9190613642565b611234565b60405161041e919061352f565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190613695565b611263565b005b34801561045c57600080fd5b50610465611304565b60405161047291906136de565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906134d4565b61130d565b6040516104af919061352f565b60405180910390f35b3480156104c457600080fd5b506104cd611344565b6040516104da91906135c0565b60405180910390f35b3480156104ef57600080fd5b506104f861136a565b005b34801561050657600080fd5b5061050f611475565b60405161051c9190613360565b60405180910390f35b34801561053157600080fd5b5061054c6004803603810190610547919061354a565b61147b565b005b34801561055a57600080fd5b50610563611599565b604051610570919061352f565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906136f9565b6115ac565b6040516105ad9190613360565b60405180910390f35b3480156105c257600080fd5b506105cb6115f4565b005b3480156105d957600080fd5b506105e2611608565b6040516105ef91906135c0565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a91906136f9565b61162e565b005b34801561062d57600080fd5b50610648600480360381019061064391906134d4565b611720565b005b34801561065657600080fd5b5061065f6118dc565b60405161066c91906135c0565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190613752565b611906565b005b3480156106aa57600080fd5b506106b3611a34565b6040516106c091906135c0565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190613695565b611a5a565b005b3480156106fe57600080fd5b50610707611adb565b6040516107149190613414565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190613695565b611b6d565b005b34801561075257600080fd5b5061075b611bc9565b6040516107689190613360565b60405180910390f35b34801561077d57600080fd5b50610798600480360381019061079391906134d4565b611bcf565b6040516107a5919061352f565b60405180910390f35b3480156107ba57600080fd5b506107c3611c46565b6040516107d091906135c0565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb91906134d4565b611c6c565b60405161080d919061352f565b60405180910390f35b34801561082257600080fd5b5061082b611c8f565b6040516108389190613360565b60405180910390f35b34801561084d57600080fd5b50610856611c95565b6040516108639190613360565b60405180910390f35b34801561087857600080fd5b50610893600480360381019061088e91906138da565b611c9b565b005b3480156108a157600080fd5b506108aa611d52565b6040516108b7919061352f565b60405180910390f35b3480156108cc57600080fd5b506108d5611d65565b6040516108e29190613360565b60405180910390f35b3480156108f757600080fd5b50610912600480360381019061090d91906136f9565b611d6b565b005b34801561092057600080fd5b50610929611dee565b005b34801561093757600080fd5b50610952600480360381019061094d91906136f9565b611e26565b60405161095f919061352f565b60405180910390f35b34801561097457600080fd5b5061098f600480360381019061098a9190613936565b611e46565b60405161099c9190613360565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c79190613976565b611ecd565b005b3480156109da57600080fd5b506109e3611f29565b6040516109f394939291906139a3565b60405180910390f35b348015610a0857600080fd5b50610a11611f47565b604051610a2194939291906139a3565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c91906136f9565b611f65565b005b348015610a5f57600080fd5b50610a68611fe8565b604051610a759190613a47565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa091906136f9565b61200e565b604051610ab2919061352f565b60405180910390f35b600e5481565b606060038054610ad090613a91565b80601f0160208091040260200160405190810160405280929190818152602001828054610afc90613a91565b8015610b495780601f10610b1e57610100808354040283529160200191610b49565b820191906000526020600020905b815481529060010190602001808311610b2c57829003601f168201915b5050505050905090565b600080610b5e61202e565b9050610b6b818585612036565b600191505092915050565b610b7e6121ff565b6010544310610bec57601981838587610b979190613af1565b610ba19190613af1565b610bab9190613af1565b10610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613b93565b60405180910390fd5b5b60405180608001604052808581526020018481526020018381526020018281525060126000820151816000015560208201518160010155604082015181600201556060820151816003015590505080828486610c489190613af1565b610c529190613af1565b610c5c9190613af1565b601b819055507f6d58c6dc772669fca481506571330f160785469830c3888c824e5ff2e81c47d760405160405180910390a150505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610ccc6121ff565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290613c25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da190613cb7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1090613d49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613ddb565b60405180910390fd5b83600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fcbc772f69b63f6f365109df1c37bcf02b760ca5c159c54c65f1c96b34ba71099848484846040516111a99493929190613dfb565b60405180910390a150505050565b6111bf6121ff565b60004711611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990613e8c565b60405180910390fd5b6112324761120e6118dc565b73ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b565b60008061123f61202e565b905061124c858285612371565b6112578585856123fd565b60019150509392505050565b61126b6121ff565b6127108110156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613f1e565b60405180910390fd5b670de0b6b3a7640000816112c49190613f3e565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001816040516112f99190613360565b60405180910390a150565b60006012905090565b60008061131861202e565b905061133981858561132a8589611e46565b6113349190613af1565b612036565b600191505092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113726121ff565b600061137d306115ac565b90506000819050600047905061139282612a32565b600081476113a09190613f98565b905060006004826113b19190613ffb565b905060008111156114085761140781600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b600081836114169190613f98565b9050600081111561146d5761146c81600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b505050505050565b601b5481565b6114836121ff565b60105443106114f15760198183858761149c9190613af1565b6114a69190613af1565b6114b09190613af1565b106114f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e790614078565b60405180910390fd5b5b6040518060800160405280858152602001848152602001838152602001828152506016600082015181600001556020820151816001015560408201518160020155606082015181600301559050508082848661154d9190613af1565b6115579190613af1565b6115619190613af1565b601a819055507f6d58c6dc772669fca481506571330f160785469830c3888c824e5ff2e81c47d760405160405180910390a150505050565b600d60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115fc6121ff565b6116066000612c75565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116366121ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c906140e4565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f8160405161171591906135c0565b60405180910390a150565b6117286121ff565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90614150565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117d091906135c0565b602060405180830381865afa1580156117ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118119190614185565b1015611852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611849906141fe565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6118766118dc565b836040518363ffffffff1660e01b815260040161189492919061421e565b6020604051808303816000875af11580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d7919061425c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61190e6121ff565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036119a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611997906142d5565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9817c07fa4cca31c109acf04d9dd7c6055b09f96b2927da7a8f9f447a0cf18d88282604051611a289291906142f5565b60405180910390a15050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a626121ff565b60198110611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90614390565b60405180910390fd5b806011819055507f6d58c6dc772669fca481506571330f160785469830c3888c824e5ff2e81c47d760405160405180910390a150565b606060048054611aea90613a91565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1690613a91565b8015611b635780601f10611b3857610100808354040283529160200191611b63565b820191906000526020600020905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b611b756121ff565b670de0b6b3a764000081611b899190613f3e565b600e819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647681604051611bbe9190613360565b60405180910390a150565b601a5481565b600080611bda61202e565b90506000611be88286611e46565b905083811015611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614422565b60405180910390fd5b611c3a8286868403612036565b60019250505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611c7761202e565b9050611c848185856123fd565b600191505092915050565b600f5481565b60115481565b611ca36121ff565b6019601054611cb29190613af1565b4310611cbd57600090505b60005b8251811015611d4d578160076000858481518110611ce157611ce0614442565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4590614471565b915050611cc0565b505050565b601c60009054906101000a900460ff1681565b60105481565b611d736121ff565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8081604051611de391906135c0565b60405180910390a150565b611df66121ff565b6001601c60006101000a81548160ff021916908315150217905550601943611e1e9190613af1565b601081905550565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ed56121ff565b80600d60156101000a81548160ff0219169083151502179055507fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c881604051611f1e919061352f565b60405180910390a150565b60168060000154908060010154908060020154908060030154905084565b60128060000154908060010154908060020154908060030154905084565b611f6d6121ff565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd39061452b565b60405180910390fd5b611fe581612c75565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209c906145bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061464f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121f29190613360565b60405180910390a3505050565b61220761202e565b73ffffffffffffffffffffffffffffffffffffffff166122256118dc565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612272906146bb565b60405180910390fd5b565b804710156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790614727565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516122e690614778565b60006040518083038185875af1925050503d8060008114612323576040519150601f19603f3d011682016040523d82523d6000602084013e612328565b606091505b505090508061236c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612363906147ff565b60405180910390fd5b505050565b600061237d8484611e46565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123f757818110156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e09061486b565b60405180910390fd5b6123f68484848403612036565b5b50505050565b60008111612440576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612437906148fd565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490614969565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125715750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561267457601c60009054906101000a900460ff166125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc906149d5565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461267357600f5481612627846115ac565b6126319190613af1565b1115612672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266990614a67565b60405180910390fd5b5b5b6000600d60149054906101000a900460ff161580156126dd5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127335750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561296357600080600080670de0b6b3a7640000866127529190613ffb565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156127b2575060105443105b80156127dc5750620180c481141580156127ce575061c5448114155b80156127db57506103e881115b5b1561284a576001600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060639350606392506063915061285a565b601b549350601a54925060115491505b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036128ce57606483876128bd9190613f3e565b6128c79190613ffb565b945061295e565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff160361294257606484876129319190613f3e565b61293b9190613ffb565b945061295d565b606482876129509190613f3e565b61295a9190613ffb565b94505b5b505050505b600d60149054906101000a900460ff1615801561298c5750600d60159054906101000a900460ff165b80156129e55750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156129f357506000601a54115b15612a0157612a00612d3b565b5b612a1784848385612a129190613f98565b612fc7565b6000811115612a2c57612a2b843083612fc7565b5b50505050565b6000600267ffffffffffffffff811115612a4f57612a4e613797565b5b604051908082528060200260200182016040528015612a7d5781602001602082028036833780820191505090505b5090503081600081518110612a9557612a94614442565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190614a9c565b81600181518110612b7457612b73614442565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bdb30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612036565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c3f959493929190614bc2565b600060405180830381600087803b158015612c5957600080fd5b505af1158015612c6d573d6000803e3d6000fd5b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600d60149054906101000a900460ff16612fc5576001600d60146101000a81548160ff0219169083151502179055506000612d75306115ac565b9050600e548110612fa8576001600e541115612d9157600e5490505b60006002601a54612da29190613f3e565b905060008160166000015484612db89190613f3e565b612dc29190613ffb565b905060008184612dd29190613f98565b90506000479050612de282612a32565b60008147612df09190613f98565b9050600060166000015486612e059190613f98565b82612e109190613ffb565b9050600060166000015482612e259190613f3e565b90506000811115612e3b57612e3a868261323d565b5b6000601660010154600284612e509190613f3e565b612e5a9190613f3e565b90506000811115612eb157612eb081600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b6000601660030154600285612ec69190613f3e565b612ed09190613f3e565b90506000811115612f2757612f2681600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b6000601660020154600286612f3c9190613f3e565b612f469190613f3e565b90506000811115612f9d57612f9c81600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661227d90919063ffffffff16565b5b505050505050505050505b506000600d60146101000a81548160ff0219169083151502179055505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302d90614c8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309c90614d20565b60405180910390fd5b6130b083838361333d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312d90614db2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132249190613360565b60405180910390a3613237848484613342565b50505050565b61326a30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612036565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016132f396959493929190614dd2565b60606040518083038185885af1158015613311573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133369190614e33565b5050505050565b505050565b505050565b6000819050919050565b61335a81613347565b82525050565b60006020820190506133756000830184613351565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133b557808201518184015260208101905061339a565b838111156133c4576000848401525b50505050565b6000601f19601f8301169050919050565b60006133e68261337b565b6133f08185613386565b9350613400818560208601613397565b613409816133ca565b840191505092915050565b6000602082019050818103600083015261342e81846133db565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006134758261344a565b9050919050565b6134858161346a565b811461349057600080fd5b50565b6000813590506134a28161347c565b92915050565b6134b181613347565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b600080604083850312156134eb576134ea613440565b5b60006134f985828601613493565b925050602061350a858286016134bf565b9150509250929050565b60008115159050919050565b61352981613514565b82525050565b60006020820190506135446000830184613520565b92915050565b6000806000806080858703121561356457613563613440565b5b6000613572878288016134bf565b9450506020613583878288016134bf565b9350506040613594878288016134bf565b92505060606135a5878288016134bf565b91505092959194509250565b6135ba8161346a565b82525050565b60006020820190506135d560008301846135b1565b92915050565b600080600080608085870312156135f5576135f4613440565b5b600061360387828801613493565b945050602061361487828801613493565b935050604061362587828801613493565b925050606061363687828801613493565b91505092959194509250565b60008060006060848603121561365b5761365a613440565b5b600061366986828701613493565b935050602061367a86828701613493565b925050604061368b868287016134bf565b9150509250925092565b6000602082840312156136ab576136aa613440565b5b60006136b9848285016134bf565b91505092915050565b600060ff82169050919050565b6136d8816136c2565b82525050565b60006020820190506136f360008301846136cf565b92915050565b60006020828403121561370f5761370e613440565b5b600061371d84828501613493565b91505092915050565b61372f81613514565b811461373a57600080fd5b50565b60008135905061374c81613726565b92915050565b6000806040838503121561376957613768613440565b5b600061377785828601613493565b92505060206137888582860161373d565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137cf826133ca565b810181811067ffffffffffffffff821117156137ee576137ed613797565b5b80604052505050565b6000613801613436565b905061380d82826137c6565b919050565b600067ffffffffffffffff82111561382d5761382c613797565b5b602082029050602081019050919050565b600080fd5b600061385661385184613812565b6137f7565b905080838252602082019050602084028301858111156138795761387861383e565b5b835b818110156138a2578061388e8882613493565b84526020840193505060208101905061387b565b5050509392505050565b600082601f8301126138c1576138c0613792565b5b81356138d1848260208601613843565b91505092915050565b600080604083850312156138f1576138f0613440565b5b600083013567ffffffffffffffff81111561390f5761390e613445565b5b61391b858286016138ac565b925050602061392c8582860161373d565b9150509250929050565b6000806040838503121561394d5761394c613440565b5b600061395b85828601613493565b925050602061396c85828601613493565b9150509250929050565b60006020828403121561398c5761398b613440565b5b600061399a8482850161373d565b91505092915050565b60006080820190506139b86000830187613351565b6139c56020830186613351565b6139d26040830185613351565b6139df6060830184613351565b95945050505050565b6000819050919050565b6000613a0d613a08613a038461344a565b6139e8565b61344a565b9050919050565b6000613a1f826139f2565b9050919050565b6000613a3182613a14565b9050919050565b613a4181613a26565b82525050565b6000602082019050613a5c6000830184613a38565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aa957607f821691505b602082108103613abc57613abb613a62565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613afc82613347565b9150613b0783613347565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b3c57613b3b613ac2565b5b828201905092915050565b7f42757920666565206d757374206265206c657373207468616e20323500000000600082015250565b6000613b7d601c83613386565b9150613b8882613b47565b602082019050919050565b60006020820190508181036000830152613bac81613b70565b9050919050565b7f6c70526563697069656e742063616e6e6f7420626520746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c0f602683613386565b9150613c1a82613bb3565b604082019050919050565b60006020820190508181036000830152613c3e81613c02565b9050919050565b7f6d61726b6574696e6757616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ca1602a83613386565b9150613cac82613c45565b604082019050919050565b60006020820190508181036000830152613cd081613c94565b9050919050565b7f736e61746368506f7457616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613d33602a83613386565b9150613d3e82613cd7565b604082019050919050565b60006020820190508181036000830152613d6281613d26565b9050919050565b7f64657657616c6c65742063616e6e6f7420626520746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dc5602483613386565b9150613dd082613d69565b604082019050919050565b60006020820190508181036000830152613df481613db8565b9050919050565b6000608082019050613e1060008301876135b1565b613e1d60208301866135b1565b613e2a60408301856135b1565b613e3760608301846135b1565b95945050505050565b7f496e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b6000613e76601883613386565b9150613e8182613e40565b602082019050919050565b60006020820190508181036000830152613ea581613e69565b9050919050565b7f4d61782077616c6c657420616d6f756e74206d757374206265203e3d2031302c60008201527f3030300000000000000000000000000000000000000000000000000000000000602082015250565b6000613f08602383613386565b9150613f1382613eac565b604082019050919050565b60006020820190508181036000830152613f3781613efb565b9050919050565b6000613f4982613347565b9150613f5483613347565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f8d57613f8c613ac2565b5b828202905092915050565b6000613fa382613347565b9150613fae83613347565b925082821015613fc157613fc0613ac2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061400682613347565b915061401183613347565b92508261402157614020613fcc565b5b828204905092915050565b7f53656c6c20666565206d757374206265206c657373207468616e203235000000600082015250565b6000614062601d83613386565b915061406d8261402c565b602082019050919050565b6000602082019050818103600083015261409181614055565b9050919050565b7f506169722063616e6e6f74206265207a65726f20616464726573730000000000600082015250565b60006140ce601b83613386565b91506140d982614098565b602082019050919050565b600060208201905081810360008301526140fd816140c1565b9050919050565b7f43616e6e6f74207265736375652073656c660000000000000000000000000000600082015250565b600061413a601283613386565b915061414582614104565b602082019050919050565b600060208201905081810360008301526141698161412d565b9050919050565b60008151905061417f816134a8565b92915050565b60006020828403121561419b5761419a613440565b5b60006141a984828501614170565b91505092915050565b7f496e73756666696369656e742045524332302062616c616e6365000000000000600082015250565b60006141e8601a83613386565b91506141f3826141b2565b602082019050919050565b60006020820190508181036000830152614217816141db565b9050919050565b600060408201905061423360008301856135b1565b6142406020830184613351565b9392505050565b60008151905061425681613726565b92915050565b60006020828403121561427257614271613440565b5b600061428084828501614247565b91505092915050565b7f537461746520616c726561647920736574000000000000000000000000000000600082015250565b60006142bf601183613386565b91506142ca82614289565b602082019050919050565b600060208201905081810360008301526142ee816142b2565b9050919050565b600060408201905061430a60008301856135b1565b6143176020830184613520565b9392505050565b7f5472616e7366657220666565206d757374206265206c657373207468616e203260008201527f3500000000000000000000000000000000000000000000000000000000000000602082015250565b600061437a602183613386565b91506143858261431e565b604082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061440c602583613386565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061447c82613347565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144ae576144ad613ac2565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614515602683613386565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006145a7602483613386565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614639602283613386565b9150614644826145dd565b604082019050919050565b600060208201905081810360008301526146688161462c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146a5602083613386565b91506146b08261466f565b602082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614711601d83613386565b915061471c826146db565b602082019050919050565b6000602082019050818103600083015261474081614704565b9050919050565b600081905092915050565b50565b6000614762600083614747565b915061476d82614752565b600082019050919050565b600061478382614755565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147e9603a83613386565b91506147f48261478d565b604082019050919050565b60006020820190508181036000830152614818816147dc565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614855601d83613386565b91506148608261481f565b602082019050919050565b6000602082019050818103600083015261488481614848565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006148e7602983613386565b91506148f28261488b565b604082019050919050565b60006020820190508181036000830152614916816148da565b9050919050565b7f4164647265737320697320626c61636b6c697374656400000000000000000000600082015250565b6000614953601683613386565b915061495e8261491d565b602082019050919050565b6000602082019050818103600083015261498281614946565b9050919050565b7f5472616e73616374696f6e7320617265206e6f7420656e61626c650000000000600082015250565b60006149bf601b83613386565b91506149ca82614989565b602082019050919050565b600060208201905081810360008301526149ee816149b2565b9050919050565b7f52656365697665722062616c616e636520697320657863656564696e67206d6160008201527f7857616c6c6574416d6f756e7400000000000000000000000000000000000000602082015250565b6000614a51602d83613386565b9150614a5c826149f5565b604082019050919050565b60006020820190508181036000830152614a8081614a44565b9050919050565b600081519050614a968161347c565b92915050565b600060208284031215614ab257614ab1613440565b5b6000614ac084828501614a87565b91505092915050565b6000819050919050565b6000614aee614ae9614ae484614ac9565b6139e8565b613347565b9050919050565b614afe81614ad3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b398161346a565b82525050565b6000614b4b8383614b30565b60208301905092915050565b6000602082019050919050565b6000614b6f82614b04565b614b798185614b0f565b9350614b8483614b20565b8060005b83811015614bb5578151614b9c8882614b3f565b9750614ba783614b57565b925050600181019050614b88565b5085935050505092915050565b600060a082019050614bd76000830188613351565b614be46020830187614af5565b8181036040830152614bf68186614b64565b9050614c0560608301856135b1565b614c126080830184613351565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c78602583613386565b9150614c8382614c1c565b604082019050919050565b60006020820190508181036000830152614ca781614c6b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d0a602383613386565b9150614d1582614cae565b604082019050919050565b60006020820190508181036000830152614d3981614cfd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614d9c602683613386565b9150614da782614d40565b604082019050919050565b60006020820190508181036000830152614dcb81614d8f565b9050919050565b600060c082019050614de760008301896135b1565b614df46020830188613351565b614e016040830187614af5565b614e0e6060830186614af5565b614e1b60808301856135b1565b614e2860a0830184613351565b979650505050505050565b600080600060608486031215614e4c57614e4b613440565b5b6000614e5a86828701614170565b9350506020614e6b86828701614170565b9250506040614e7c86828701614170565b915050925092509256fea2646970667358221220e4fdf3f72e6d36e568d2d0a6e297bef3e8e59779088bda438038fceb39f192e964736f6c634300080d0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000006536e6174636800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006244e415443480000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _name_ (string): Snatch
Arg [2] : _symbol_ (string): $NATCH

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 536e617463680000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 244e415443480000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

31634:11401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32068:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17676:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20027:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35123:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31940:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18796:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33957:938;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37088:180;;;;;;;;;;;;;:::i;:::-;;20808:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36263:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18638:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21512:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31870:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42058:630;;;;;;;;;;;;;:::i;:::-;;32458:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35543:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32038:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18967:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30747:103;;;;;;;;;;;;;:::i;:::-;;31903:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36656:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37276:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30099:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36857:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31977:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34903:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17895:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36101:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32420:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22253:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31842:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19300:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32103:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32173:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42696:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32497:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36506:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41920:130;;;;;;;;;;;;;:::i;:::-;;31716:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19556:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35967:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32377:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32335:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;31005:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31814:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31764:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32068:28;;;;:::o;17676:100::-;17730:13;17763:5;17756:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17676:100;:::o;20027:201::-;20110:4;20127:13;20143:12;:10;:12::i;:::-;20127:28;;20166:32;20175:5;20182:7;20191:6;20166:8;:32::i;:::-;20216:4;20209:11;;;20027:201;;;;:::o;35123:412::-;29985:13;:11;:13::i;:::-;35259:9:::1;;35243:12;:25;35239:139;;35331:2;35324:4;35311:10;35298;35292:3;:16;;;;:::i;:::-;:29;;;;:::i;:::-;:36;;;;:::i;:::-;:41;35284:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;35239:139;35398:39;;;;;;;;35403:3;35398:39;;;;35408:10;35398:39;;;;35420:10;35398:39;;;;35432:4;35398:39;;::::0;35388:7:::1;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35494:4;35481:10;35468;35462:3;:16;;;;:::i;:::-;:29;;;;:::i;:::-;:36;;;;:::i;:::-;35448:11;:50;;;;35514:13;;;;;;;;;;35123:412:::0;;;;:::o;31940:30::-;;;;;;;;;;;;;:::o;18796:108::-;18857:7;18884:12;;18877:19;;18796:108;:::o;33957:938::-;29985:13;:11;:13::i;:::-;34138:1:::1;34114:26;;:12;:26;;::::0;34106:77:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34230:1;34202:30;;:16;:30;;::::0;34194:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34326:1;34298:30;;:16;:30;;::::0;34290:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34416:1;34394:24;;:10;:24;;::::0;34386:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34484:12;34470:11;;:26;;;;;;;;;;;;;;;;;;34525:16;34507:15;;:34;;;;;;;;;;;;;;;;;;34570:16;34552:15;;:34;;;;;;;;;;;;;;;;;;34609:10;34597:9;;:22;;;;;;;;;;;;;;;;;;34661:4;34632:9;:26;34642:15;;;;;;;;;;;34632:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;34699:4;34676:9;:20;34686:9;;;;;;;;;;;34676:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34743:4;34714:9;:26;34724:15;;;;;;;;;;;34714:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;34783:4;34758:9;:22;34768:11;;;;;;;;;;;34758:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34805:82;34826:12;34840:16;34858;34876:10;34805:82;;;;;;;;;:::i;:::-;;;;;;;;33957:938:::0;;;;:::o;37088:180::-;29985:13;:11;:13::i;:::-;37170:1:::1;37146:21;:25;37138:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37211:49;37238:21;37219:7;:5;:7::i;:::-;37211:26;;;;:49;;;;:::i;:::-;37088:180::o:0;20808:295::-;20939:4;20956:15;20974:12;:10;:12::i;:::-;20956:30;;20997:38;21013:4;21019:7;21028:6;20997:15;:38::i;:::-;21046:27;21056:4;21062:2;21066:6;21046:9;:27::i;:::-;21091:4;21084:11;;;20808:295;;;;;:::o;36263:235::-;29985:13;:11;:13::i;:::-;36354:6:::1;36344;:16;;36336:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36438:6;36429;:15;;;;:::i;:::-;36411;:33;;;;36460:30;36483:6;36460:30;;;;;;:::i;:::-;;;;;;;;36263:235:::0;:::o;18638:93::-;18696:5;18721:2;18714:9;;18638:93;:::o;21512:238::-;21600:4;21617:13;21633:12;:10;:12::i;:::-;21617:28;;21656:64;21665:5;21672:7;21709:10;21681:25;21691:5;21698:7;21681:9;:25::i;:::-;:38;;;;:::i;:::-;21656:8;:64::i;:::-;21738:4;21731:11;;;21512:238;;;;:::o;31870:26::-;;;;;;;;;;;;;:::o;42058:630::-;29985:13;:11;:13::i;:::-;42118:23:::1;42144:24;42162:4;42144:9;:24::i;:::-;42118:50;;42181:14;42198:15;42181:32;;42226:22;42251:21;42226:46;;42285:24;42302:6;42285:16;:24::i;:::-;42322:20;42369:14;42345:21;:38;;;;:::i;:::-;42322:61;;42396:14;42428:1;42413:12;:16;;;;:::i;:::-;42396:33;;42452:1;42443:6;:10;42440:77;;;42469:36;42498:6;42477:9;;;;;;;;;;;42469:28;;;;:36;;;;:::i;:::-;42440:77;42529:20;42567:6;42552:12;:21;;;;:::i;:::-;42529:44;;42602:1;42587:12;:16;42584:95;;;42619:48;42654:12;42627:15;;;;;;;;;;;42619:34;;;;:48;;;;:::i;:::-;42584:95;42107:581;;;;;;42058:630::o:0;32458:30::-;;;;:::o;35543:416::-;29985:13;:11;:13::i;:::-;35680:9:::1;;35664:12;:25;35660:140;;35752:2;35745:4;35732:10;35719;35713:3;:16;;;;:::i;:::-;:29;;;;:::i;:::-;:36;;;;:::i;:::-;:41;35705:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;35660:140;35821:39;;;;;;;;35826:3;35821:39;;;;35831:10;35821:39;;;;35843:10;35821:39;;;;35855:4;35821:39;;::::0;35810:8:::1;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35918:4;35905:10;35892;35886:3;:16;;;;:::i;:::-;:29;;;;:::i;:::-;:36;;;;:::i;:::-;35871:12;:51;;;;35938:13;;;;;;;;;;35543:416:::0;;;;:::o;32038:23::-;;;;;;;;;;;;;:::o;18967:127::-;19041:7;19068:9;:18;19078:7;19068:18;;;;;;;;;;;;;;;;19061:25;;18967:127;;;:::o;30747:103::-;29985:13;:11;:13::i;:::-;30812:30:::1;30839:1;30812:18;:30::i;:::-;30747:103::o:0;31903:30::-;;;;;;;;;;;;;:::o;36656:193::-;29985:13;:11;:13::i;:::-;36746:1:::1;36727:21;;:7;:21;;::::0;36719:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36798:7;36791:4;;:14;;;;;;;;;;;;;;;;;;36821:20;36833:7;36821:20;;;;;;:::i;:::-;;;;;;;;36656:193:::0;:::o;37276:302::-;29985:13;:11;:13::i;:::-;37388:4:::1;37368:25;;:8;:25;;::::0;37360:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37480:6;37442:8;37435:26;;;37470:4;37435:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;37427:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;37535:8;37528:25;;;37554:7;:5;:7::i;:::-;37563:6;37528:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37276:302:::0;;:::o;30099:87::-;30145:7;30172:6;;;;;;;;;;;30165:13;;30099:87;:::o;36857:223::-;29985:13;:11;:13::i;:::-;36962:5:::1;36943:24;;:9;:15;36953:4;36943:15;;;;;;;;;;;;;;;;;;;;;;;;;:24;;::::0;36935:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37018:5;37000:9;:15;37010:4;37000:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;37039:33;37060:4;37066:5;37039:33;;;;;;;:::i;:::-;;;;;;;;36857:223:::0;;:::o;31977:24::-;;;;;;;;;;;;;:::o;34903:212::-;29985:13;:11;:13::i;:::-;35001:2:::1;34986:12;:17;34978:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35066:12;35052:11;:26;;;;35094:13;;;;;;;;;;34903:212:::0;:::o;17895:104::-;17951:13;17984:7;17977:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17895:104;:::o;36101:154::-;29985:13;:11;:13::i;:::-;36197:6:::1;36188;:15;;;;:::i;:::-;36172:13;:31;;;;36219:28;36240:6;36219:28;;;;;;:::i;:::-;;;;;;;;36101:154:::0;:::o;32420:31::-;;;;:::o;22253:436::-;22346:4;22363:13;22379:12;:10;:12::i;:::-;22363:28;;22402:24;22429:25;22439:5;22446:7;22429:9;:25::i;:::-;22402:52;;22493:15;22473:16;:35;;22465:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22586:60;22595:5;22602:7;22630:15;22611:16;:34;22586:8;:60::i;:::-;22677:4;22670:11;;;;22253:436;;;;:::o;31842:19::-;;;;;;;;;;;;;:::o;19300:193::-;19379:4;19396:13;19412:12;:10;:12::i;:::-;19396:28;;19435;19445:5;19452:2;19456:6;19435:9;:28::i;:::-;19481:4;19474:11;;;19300:193;;;;:::o;32103:30::-;;;;:::o;32173:26::-;;;;:::o;42696:275::-;29985:13;:11;:13::i;:::-;42811:2:::1;42801:9;;:12;;;;:::i;:::-;42785;:28;42781:73;;42837:5;42829:13;;42781:73;42868:9;42864:100;42886:8;:15;42882:1;:19;42864:100;;;42947:5;42922:9;:22;42932:8;42941:1;42932:11;;;;;;;;:::i;:::-;;;;;;;;42922:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;42903:3;;;;;:::i;:::-;;;;42864:100;;;;42696:275:::0;;:::o;32497:27::-;;;;;;;;;;;;;:::o;32140:24::-;;;;:::o;36506:142::-;29985:13;:11;:13::i;:::-;36590:9:::1;36573:6;;:27;;;;;;;;;;;;;;;;;;36616:24;36630:9;36616:24;;;;;;:::i;:::-;;;;;;;;36506:142:::0;:::o;41920:130::-;29985:13;:11;:13::i;:::-;41998:4:::1;41980:15;;:22;;;;;;;;;;;;;;;;;;42040:2;42025:12;:17;;;;:::i;:::-;42013:9;:29;;;;41920:130::o:0;31716:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;19556:151::-;19645:7;19672:11;:18;19684:5;19672:18;;;;;;;;;;;;;;;:27;19691:7;19672:27;;;;;;;;;;;;;;;;19665:34;;19556:151;;;;:::o;35967:126::-;29985:13;:11;:13::i;:::-;36046:5:::1;36032:11;;:19;;;;;;;;;;;;;;;;;;36067:18;36079:5;36067:18;;;;;;:::i;:::-;;;;;;;;35967:126:::0;:::o;32377:36::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;32335:35::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;31005:201::-;29985:13;:11;:13::i;:::-;31114:1:::1;31094:22;;:8;:22;;::::0;31086:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31170:28;31189:8;31170:18;:28::i;:::-;31005:201:::0;:::o;31814:21::-;;;;;;;;;;;;;:::o;31764:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;15318:98::-;15371:7;15398:10;15391:17;;15318:98;:::o;26280:380::-;26433:1;26416:19;;:5;:19;;;26408:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26514:1;26495:21;;:7;:21;;;26487:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26598:6;26568:11;:18;26580:5;26568:18;;;;;;;;;;;;;;;:27;26587:7;26568:27;;;;;;;;;;;;;;;:36;;;;26636:7;26620:32;;26629:5;26620:32;;;26645:6;26620:32;;;;;;:::i;:::-;;;;;;;;26280:380;;;:::o;30264:132::-;30339:12;:10;:12::i;:::-;30328:23;;:7;:5;:7::i;:::-;:23;;;30320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30264:132::o;4091:317::-;4206:6;4181:21;:31;;4173:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4260:12;4278:9;:14;;4300:6;4278:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4259:52;;;4330:7;4322:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;4162:246;4091:317;;:::o;26951:453::-;27086:24;27113:25;27123:5;27130:7;27113:9;:25::i;:::-;27086:52;;27173:17;27153:16;:37;27149:248;;27235:6;27215:16;:26;;27207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27319:51;27328:5;27335:7;27363:6;27344:16;:25;27319:8;:51::i;:::-;27149:248;27075:329;26951:453;;;:::o;37586:1734::-;37693:1;37684:6;:10;37676:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37760:9;:15;37770:4;37760:15;;;;;;;;;;;;;;;;;;;;;;;;;37759:16;37751:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37819:9;:15;37829:4;37819:15;;;;;;;;;;;;;;;;;;;;;;;;;37818:16;:34;;;;;37839:9;:13;37849:2;37839:13;;;;;;;;;;;;;;;;;;;;;;;;;37838:14;37818:34;37815:250;;;37877:15;;;;;;;;;;;37869:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37948:4;;;;;;;;;;;37942:10;;:2;:10;;;37939:114;;37988:15;;37978:6;37962:13;37972:2;37962:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;37954:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;37939:114;37815:250;38077:14;38108:8;;;;;;;;;;;38107:9;:29;;;;;38121:9;:15;38131:4;38121:15;;;;;;;;;;;;;;;;;;;;;;;;;38120:16;38107:29;:47;;;;;38141:9;:13;38151:2;38141:13;;;;;;;;;;;;;;;;;;;;;;;;;38140:14;38107:47;38104:942;;;38170:20;38205:21;38241:20;38276:18;38304:6;38297;:13;;;;:::i;:::-;38276:34;;38337:4;;;;;;;;;;;38329:12;;:4;:12;;;:40;;;;;38360:9;;38345:12;:24;38329:40;:112;;;;;38388:6;38374:10;:20;;:44;;;;;38412:6;38398:10;:20;;38374:44;:66;;;;;38435:5;38422:10;:18;38374:66;38329:112;38325:438;;;38477:4;38461:9;:13;38471:2;38461:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;38515:2;38500:17;;38552:2;38536:18;;38588:2;38573:17;;38325:438;;;38644:11;;38629:26;;38690:12;;38674:28;;38736:11;;38721:26;;38325:438;38788:4;;;;;;;;;;;38782:10;;:2;:10;;;38779:256;;38846:3;38830:13;38821:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;38812:37;;38779:256;;;38882:4;;;;;;;;;;;38874:12;;:4;:12;;;38871:164;;38939:3;38924:12;38915:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;38906:36;;38871:164;;;39016:3;39001:12;38992:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;38983:36;;38871:164;38779:256;38155:891;;;;38104:942;39063:8;;;;;;;;;;;39062:9;:24;;;;;39075:11;;;;;;;;;;;39062:24;:38;;;;;39096:4;;;;;;;;;;;39090:10;;:2;:10;;;39062:38;:58;;;;;39119:1;39104:12;;:16;39062:58;39058:104;;;39137:13;:11;:13::i;:::-;39058:104;39174:42;39190:4;39196:2;39209:6;39200;:15;;;;:::i;:::-;39174;:42::i;:::-;39239:1;39230:6;:10;39227:86;;;39257:44;39273:4;39287;39294:6;39257:15;:44::i;:::-;39227:86;37665:1655;37586:1734;;;:::o;40946:459::-;41071:21;41109:1;41095:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41071:40;;41140:4;41122;41127:1;41122:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41166:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41156:4;41161:1;41156:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41192:53;41209:4;41224:6;;;;;;;;;;;41233:11;41192:8;:53::i;:::-;41284:6;;;;;;;;;;;:57;;;41342:11;41355:1;41358:4;41372;41379:15;41284:111;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41001:404;40946:459;:::o;31366:191::-;31440:16;31459:6;;;;;;;;;;;31440:25;;31485:8;31476:6;;:17;;;;;;;;;;;;;;;;;;31540:8;31509:40;;31530:8;31509:40;;;;;;;;;;;;31429:128;31366:191;:::o;39328:1610::-;32567:8;;;;;;;;;;;32562:104;;32603:4;32592:8;;:15;;;;;;;;;;;;;;;;;;39377:23:::1;39403:24;39421:4;39403:9;:24::i;:::-;39377:50;;39461:13;;39442:15;:32;39438:1493;;39510:1;39494:13;;:17;39491:87;;;39549:13;;39531:31;;39491:87;39647:19;39684:1;39669:12;;:16;;;;:::i;:::-;39647:38;;39700:32;39767:11;39753:8;:11;;;39735:15;:29;;;;:::i;:::-;:43;;;;:::i;:::-;39700:78;;39793:14;39828:24;39810:15;:42;;;;:::i;:::-;39793:59;;39869:22;39894:21;39869:46;;39932:24;39949:6;39932:16;:24::i;:::-;39973:20;40020:14;39996:21;:38;;;;:::i;:::-;39973:61;;40049:19;40100:8;:11;;;40086;:25;;;;:::i;:::-;40070:12;:42;;;;:::i;:::-;40049:63;;40127:29;40173:8;:11;;;40159;:25;;;;:::i;:::-;40127:57;;40228:1;40204:21;:25;40201:170;;;40294:61;40307:24;40333:21;40294:12;:61::i;:::-;40201:170;40387:20;40428:8;:18;;;40424:1;40410:11;:15;;;;:::i;:::-;:36;;;;:::i;:::-;40387:59;;40479:1;40464:12;:16;40461:103;;;40500:48;40535:12;40508:15;;;;;;;;;;;40500:34;;;;:48;;;;:::i;:::-;40461:103;40580:14;40615:8;:12;;;40611:1;40597:11;:15;;;;:::i;:::-;:30;;;;:::i;:::-;40580:47;;40654:1;40645:6;:10;40642:85;;;40675:36;40704:6;40683:9;;;;;;;;;;;40675:28;;;;:36;;;;:::i;:::-;40642:85;40743:20;40784:8;:18;;;40780:1;40766:11;:15;;;;:::i;:::-;:36;;;;:::i;:::-;40743:59;;40835:1;40820:12;:16;40817:103;;;40856:48;40891:12;40864:15;;;;;;;;;;;40856:34;;;;:48;;;;:::i;:::-;40817:103;39476:1455;;;;;;;;;;39438:1493;39366:1572;32649:5:::0;32638:8;;:16;;;;;;;;;;;;;;;;;;32562:104;39328:1610::o;23159:840::-;23306:1;23290:18;;:4;:18;;;23282:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23383:1;23369:16;;:2;:16;;;23361:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23438:38;23459:4;23465:2;23469:6;23438:20;:38::i;:::-;23489:19;23511:9;:15;23521:4;23511:15;;;;;;;;;;;;;;;;23489:37;;23560:6;23545:11;:21;;23537:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23677:6;23663:11;:20;23645:9;:15;23655:4;23645:15;;;;;;;;;;;;;;;:38;;;;23880:6;23863:9;:13;23873:2;23863:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;23930:2;23915:26;;23924:4;23915:26;;;23934:6;23915:26;;;;;;:::i;:::-;;;;;;;;23954:37;23974:4;23980:2;23984:6;23954:19;:37::i;:::-;23271:728;23159:840;;;:::o;41413:499::-;41561:53;41578:4;41593:6;;;;;;;;;;;41602:11;41561:8;:53::i;:::-;41657:6;;;;;;;;;;;:22;;;41687:9;41720:4;41740:11;41766:1;41809;41852:11;;;;;;;;;;;41878:15;41657:247;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41413:499;;:::o;28004:125::-;;;;:::o;28733:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:765::-;3932:6;3940;3948;3956;4005:3;3993:9;3984:7;3980:23;3976:33;3973:120;;;4012:79;;:::i;:::-;3973:120;4132:1;4157:53;4202:7;4193:6;4182:9;4178:22;4157:53;:::i;:::-;4147:63;;4103:117;4259:2;4285:53;4330:7;4321:6;4310:9;4306:22;4285:53;:::i;:::-;4275:63;;4230:118;4387:2;4413:53;4458:7;4449:6;4438:9;4434:22;4413:53;:::i;:::-;4403:63;;4358:118;4515:2;4541:53;4586:7;4577:6;4566:9;4562:22;4541:53;:::i;:::-;4531:63;;4486:118;3846:765;;;;;;;:::o;4617:118::-;4704:24;4722:5;4704:24;:::i;:::-;4699:3;4692:37;4617:118;;:::o;4741:222::-;4834:4;4872:2;4861:9;4857:18;4849:26;;4885:71;4953:1;4942:9;4938:17;4929:6;4885:71;:::i;:::-;4741:222;;;;:::o;4969:765::-;5055:6;5063;5071;5079;5128:3;5116:9;5107:7;5103:23;5099:33;5096:120;;;5135:79;;:::i;:::-;5096:120;5255:1;5280:53;5325:7;5316:6;5305:9;5301:22;5280:53;:::i;:::-;5270:63;;5226:117;5382:2;5408:53;5453:7;5444:6;5433:9;5429:22;5408:53;:::i;:::-;5398:63;;5353:118;5510:2;5536:53;5581:7;5572:6;5561:9;5557:22;5536:53;:::i;:::-;5526:63;;5481:118;5638:2;5664:53;5709:7;5700:6;5689:9;5685:22;5664:53;:::i;:::-;5654:63;;5609:118;4969:765;;;;;;;:::o;5740:619::-;5817:6;5825;5833;5882:2;5870:9;5861:7;5857:23;5853:32;5850:119;;;5888:79;;:::i;:::-;5850:119;6008:1;6033:53;6078:7;6069:6;6058:9;6054:22;6033:53;:::i;:::-;6023:63;;5979:117;6135:2;6161:53;6206:7;6197:6;6186:9;6182:22;6161:53;:::i;:::-;6151:63;;6106:118;6263:2;6289:53;6334:7;6325:6;6314:9;6310:22;6289:53;:::i;:::-;6279:63;;6234:118;5740:619;;;;;:::o;6365:329::-;6424:6;6473:2;6461:9;6452:7;6448:23;6444:32;6441:119;;;6479:79;;:::i;:::-;6441:119;6599:1;6624:53;6669:7;6660:6;6649:9;6645:22;6624:53;:::i;:::-;6614:63;;6570:117;6365:329;;;;:::o;6700:86::-;6735:7;6775:4;6768:5;6764:16;6753:27;;6700:86;;;:::o;6792:112::-;6875:22;6891:5;6875:22;:::i;:::-;6870:3;6863:35;6792:112;;:::o;6910:214::-;6999:4;7037:2;7026:9;7022:18;7014:26;;7050:67;7114:1;7103:9;7099:17;7090:6;7050:67;:::i;:::-;6910:214;;;;:::o;7130:329::-;7189:6;7238:2;7226:9;7217:7;7213:23;7209:32;7206:119;;;7244:79;;:::i;:::-;7206:119;7364:1;7389:53;7434:7;7425:6;7414:9;7410:22;7389:53;:::i;:::-;7379:63;;7335:117;7130:329;;;;:::o;7465:116::-;7535:21;7550:5;7535:21;:::i;:::-;7528:5;7525:32;7515:60;;7571:1;7568;7561:12;7515:60;7465:116;:::o;7587:133::-;7630:5;7668:6;7655:20;7646:29;;7684:30;7708:5;7684:30;:::i;:::-;7587:133;;;;:::o;7726:468::-;7791:6;7799;7848:2;7836:9;7827:7;7823:23;7819:32;7816:119;;;7854:79;;:::i;:::-;7816:119;7974:1;7999:53;8044:7;8035:6;8024:9;8020:22;7999:53;:::i;:::-;7989:63;;7945:117;8101:2;8127:50;8169:7;8160:6;8149:9;8145:22;8127:50;:::i;:::-;8117:60;;8072:115;7726:468;;;;;:::o;8200:117::-;8309:1;8306;8299:12;8323:180;8371:77;8368:1;8361:88;8468:4;8465:1;8458:15;8492:4;8489:1;8482:15;8509:281;8592:27;8614:4;8592:27;:::i;:::-;8584:6;8580:40;8722:6;8710:10;8707:22;8686:18;8674:10;8671:34;8668:62;8665:88;;;8733:18;;:::i;:::-;8665:88;8773:10;8769:2;8762:22;8552:238;8509:281;;:::o;8796:129::-;8830:6;8857:20;;:::i;:::-;8847:30;;8886:33;8914:4;8906:6;8886:33;:::i;:::-;8796:129;;;:::o;8931:311::-;9008:4;9098:18;9090:6;9087:30;9084:56;;;9120:18;;:::i;:::-;9084:56;9170:4;9162:6;9158:17;9150:25;;9230:4;9224;9220:15;9212:23;;8931:311;;;:::o;9248:117::-;9357:1;9354;9347:12;9388:710;9484:5;9509:81;9525:64;9582:6;9525:64;:::i;:::-;9509:81;:::i;:::-;9500:90;;9610:5;9639:6;9632:5;9625:21;9673:4;9666:5;9662:16;9655:23;;9726:4;9718:6;9714:17;9706:6;9702:30;9755:3;9747:6;9744:15;9741:122;;;9774:79;;:::i;:::-;9741:122;9889:6;9872:220;9906:6;9901:3;9898:15;9872:220;;;9981:3;10010:37;10043:3;10031:10;10010:37;:::i;:::-;10005:3;9998:50;10077:4;10072:3;10068:14;10061:21;;9948:144;9932:4;9927:3;9923:14;9916:21;;9872:220;;;9876:21;9490:608;;9388:710;;;;;:::o;10121:370::-;10192:5;10241:3;10234:4;10226:6;10222:17;10218:27;10208:122;;10249:79;;:::i;:::-;10208:122;10366:6;10353:20;10391:94;10481:3;10473:6;10466:4;10458:6;10454:17;10391:94;:::i;:::-;10382:103;;10198:293;10121:370;;;;:::o;10497:678::-;10587:6;10595;10644:2;10632:9;10623:7;10619:23;10615:32;10612:119;;;10650:79;;:::i;:::-;10612:119;10798:1;10787:9;10783:17;10770:31;10828:18;10820:6;10817:30;10814:117;;;10850:79;;:::i;:::-;10814:117;10955:78;11025:7;11016:6;11005:9;11001:22;10955:78;:::i;:::-;10945:88;;10741:302;11082:2;11108:50;11150:7;11141:6;11130:9;11126:22;11108:50;:::i;:::-;11098:60;;11053:115;10497:678;;;;;:::o;11181:474::-;11249:6;11257;11306:2;11294:9;11285:7;11281:23;11277:32;11274:119;;;11312:79;;:::i;:::-;11274:119;11432:1;11457:53;11502:7;11493:6;11482:9;11478:22;11457:53;:::i;:::-;11447:63;;11403:117;11559:2;11585:53;11630:7;11621:6;11610:9;11606:22;11585:53;:::i;:::-;11575:63;;11530:118;11181:474;;;;;:::o;11661:323::-;11717:6;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:50;11959:7;11950:6;11939:9;11935:22;11917:50;:::i;:::-;11907:60;;11863:114;11661:323;;;;:::o;11990:553::-;12167:4;12205:3;12194:9;12190:19;12182:27;;12219:71;12287:1;12276:9;12272:17;12263:6;12219:71;:::i;:::-;12300:72;12368:2;12357:9;12353:18;12344:6;12300:72;:::i;:::-;12382;12450:2;12439:9;12435:18;12426:6;12382:72;:::i;:::-;12464;12532:2;12521:9;12517:18;12508:6;12464:72;:::i;:::-;11990:553;;;;;;;:::o;12549:60::-;12577:3;12598:5;12591:12;;12549:60;;;:::o;12615:142::-;12665:9;12698:53;12716:34;12725:24;12743:5;12725:24;:::i;:::-;12716:34;:::i;:::-;12698:53;:::i;:::-;12685:66;;12615:142;;;:::o;12763:126::-;12813:9;12846:37;12877:5;12846:37;:::i;:::-;12833:50;;12763:126;;;:::o;12895:141::-;12960:9;12993:37;13024:5;12993:37;:::i;:::-;12980:50;;12895:141;;;:::o;13042:161::-;13144:52;13190:5;13144:52;:::i;:::-;13139:3;13132:65;13042:161;;:::o;13209:252::-;13317:4;13355:2;13344:9;13340:18;13332:26;;13368:86;13451:1;13440:9;13436:17;13427:6;13368:86;:::i;:::-;13209:252;;;;:::o;13467:180::-;13515:77;13512:1;13505:88;13612:4;13609:1;13602:15;13636:4;13633:1;13626:15;13653:320;13697:6;13734:1;13728:4;13724:12;13714:22;;13781:1;13775:4;13771:12;13802:18;13792:81;;13858:4;13850:6;13846:17;13836:27;;13792:81;13920:2;13912:6;13909:14;13889:18;13886:38;13883:84;;13939:18;;:::i;:::-;13883:84;13704:269;13653:320;;;:::o;13979:180::-;14027:77;14024:1;14017:88;14124:4;14121:1;14114:15;14148:4;14145:1;14138:15;14165:305;14205:3;14224:20;14242:1;14224:20;:::i;:::-;14219:25;;14258:20;14276:1;14258:20;:::i;:::-;14253:25;;14412:1;14344:66;14340:74;14337:1;14334:81;14331:107;;;14418:18;;:::i;:::-;14331:107;14462:1;14459;14455:9;14448:16;;14165:305;;;;:::o;14476:178::-;14616:30;14612:1;14604:6;14600:14;14593:54;14476:178;:::o;14660:366::-;14802:3;14823:67;14887:2;14882:3;14823:67;:::i;:::-;14816:74;;14899:93;14988:3;14899:93;:::i;:::-;15017:2;15012:3;15008:12;15001:19;;14660:366;;;:::o;15032:419::-;15198:4;15236:2;15225:9;15221:18;15213:26;;15285:9;15279:4;15275:20;15271:1;15260:9;15256:17;15249:47;15313:131;15439:4;15313:131;:::i;:::-;15305:139;;15032:419;;;:::o;15457:225::-;15597:34;15593:1;15585:6;15581:14;15574:58;15666:8;15661:2;15653:6;15649:15;15642:33;15457:225;:::o;15688:366::-;15830:3;15851:67;15915:2;15910:3;15851:67;:::i;:::-;15844:74;;15927:93;16016:3;15927:93;:::i;:::-;16045:2;16040:3;16036:12;16029:19;;15688:366;;;:::o;16060:419::-;16226:4;16264:2;16253:9;16249:18;16241:26;;16313:9;16307:4;16303:20;16299:1;16288:9;16284:17;16277:47;16341:131;16467:4;16341:131;:::i;:::-;16333:139;;16060:419;;;:::o;16485:229::-;16625:34;16621:1;16613:6;16609:14;16602:58;16694:12;16689:2;16681:6;16677:15;16670:37;16485:229;:::o;16720:366::-;16862:3;16883:67;16947:2;16942:3;16883:67;:::i;:::-;16876:74;;16959:93;17048:3;16959:93;:::i;:::-;17077:2;17072:3;17068:12;17061:19;;16720:366;;;:::o;17092:419::-;17258:4;17296:2;17285:9;17281:18;17273:26;;17345:9;17339:4;17335:20;17331:1;17320:9;17316:17;17309:47;17373:131;17499:4;17373:131;:::i;:::-;17365:139;;17092:419;;;:::o;17517:229::-;17657:34;17653:1;17645:6;17641:14;17634:58;17726:12;17721:2;17713:6;17709:15;17702:37;17517:229;:::o;17752:366::-;17894:3;17915:67;17979:2;17974:3;17915:67;:::i;:::-;17908:74;;17991:93;18080:3;17991:93;:::i;:::-;18109:2;18104:3;18100:12;18093:19;;17752:366;;;:::o;18124:419::-;18290:4;18328:2;18317:9;18313:18;18305:26;;18377:9;18371:4;18367:20;18363:1;18352:9;18348:17;18341:47;18405:131;18531:4;18405:131;:::i;:::-;18397:139;;18124:419;;;:::o;18549:223::-;18689:34;18685:1;18677:6;18673:14;18666:58;18758:6;18753:2;18745:6;18741:15;18734:31;18549:223;:::o;18778:366::-;18920:3;18941:67;19005:2;19000:3;18941:67;:::i;:::-;18934:74;;19017:93;19106:3;19017:93;:::i;:::-;19135:2;19130:3;19126:12;19119:19;;18778:366;;;:::o;19150:419::-;19316:4;19354:2;19343:9;19339:18;19331:26;;19403:9;19397:4;19393:20;19389:1;19378:9;19374:17;19367:47;19431:131;19557:4;19431:131;:::i;:::-;19423:139;;19150:419;;;:::o;19575:553::-;19752:4;19790:3;19779:9;19775:19;19767:27;;19804:71;19872:1;19861:9;19857:17;19848:6;19804:71;:::i;:::-;19885:72;19953:2;19942:9;19938:18;19929:6;19885:72;:::i;:::-;19967;20035:2;20024:9;20020:18;20011:6;19967:72;:::i;:::-;20049;20117:2;20106:9;20102:18;20093:6;20049:72;:::i;:::-;19575:553;;;;;;;:::o;20134:174::-;20274:26;20270:1;20262:6;20258:14;20251:50;20134:174;:::o;20314:366::-;20456:3;20477:67;20541:2;20536:3;20477:67;:::i;:::-;20470:74;;20553:93;20642:3;20553:93;:::i;:::-;20671:2;20666:3;20662:12;20655:19;;20314:366;;;:::o;20686:419::-;20852:4;20890:2;20879:9;20875:18;20867:26;;20939:9;20933:4;20929:20;20925:1;20914:9;20910:17;20903:47;20967:131;21093:4;20967:131;:::i;:::-;20959:139;;20686:419;;;:::o;21111:222::-;21251:34;21247:1;21239:6;21235:14;21228:58;21320:5;21315:2;21307:6;21303:15;21296:30;21111:222;:::o;21339:366::-;21481:3;21502:67;21566:2;21561:3;21502:67;:::i;:::-;21495:74;;21578:93;21667:3;21578:93;:::i;:::-;21696:2;21691:3;21687:12;21680:19;;21339:366;;;:::o;21711:419::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:348::-;22176:7;22199:20;22217:1;22199:20;:::i;:::-;22194:25;;22233:20;22251:1;22233:20;:::i;:::-;22228:25;;22421:1;22353:66;22349:74;22346:1;22343:81;22338:1;22331:9;22324:17;22320:105;22317:131;;;22428:18;;:::i;:::-;22317:131;22476:1;22473;22469:9;22458:20;;22136:348;;;;:::o;22490:191::-;22530:4;22550:20;22568:1;22550:20;:::i;:::-;22545:25;;22584:20;22602:1;22584:20;:::i;:::-;22579:25;;22623:1;22620;22617:8;22614:34;;;22628:18;;:::i;:::-;22614:34;22673:1;22670;22666:9;22658:17;;22490:191;;;;:::o;22687:180::-;22735:77;22732:1;22725:88;22832:4;22829:1;22822:15;22856:4;22853:1;22846:15;22873:185;22913:1;22930:20;22948:1;22930:20;:::i;:::-;22925:25;;22964:20;22982:1;22964:20;:::i;:::-;22959:25;;23003:1;22993:35;;23008:18;;:::i;:::-;22993:35;23050:1;23047;23043:9;23038:14;;22873:185;;;;:::o;23064:179::-;23204:31;23200:1;23192:6;23188:14;23181:55;23064:179;:::o;23249:366::-;23391:3;23412:67;23476:2;23471:3;23412:67;:::i;:::-;23405:74;;23488:93;23577:3;23488:93;:::i;:::-;23606:2;23601:3;23597:12;23590:19;;23249:366;;;:::o;23621:419::-;23787:4;23825:2;23814:9;23810:18;23802:26;;23874:9;23868:4;23864:20;23860:1;23849:9;23845:17;23838:47;23902:131;24028:4;23902:131;:::i;:::-;23894:139;;23621:419;;;:::o;24046:177::-;24186:29;24182:1;24174:6;24170:14;24163:53;24046:177;:::o;24229:366::-;24371:3;24392:67;24456:2;24451:3;24392:67;:::i;:::-;24385:74;;24468:93;24557:3;24468:93;:::i;:::-;24586:2;24581:3;24577:12;24570:19;;24229:366;;;:::o;24601:419::-;24767:4;24805:2;24794:9;24790:18;24782:26;;24854:9;24848:4;24844:20;24840:1;24829:9;24825:17;24818:47;24882:131;25008:4;24882:131;:::i;:::-;24874:139;;24601:419;;;:::o;25026:168::-;25166:20;25162:1;25154:6;25150:14;25143:44;25026:168;:::o;25200:366::-;25342:3;25363:67;25427:2;25422:3;25363:67;:::i;:::-;25356:74;;25439:93;25528:3;25439:93;:::i;:::-;25557:2;25552:3;25548:12;25541:19;;25200:366;;;:::o;25572:419::-;25738:4;25776:2;25765:9;25761:18;25753:26;;25825:9;25819:4;25815:20;25811:1;25800:9;25796:17;25789:47;25853:131;25979:4;25853:131;:::i;:::-;25845:139;;25572:419;;;:::o;25997:143::-;26054:5;26085:6;26079:13;26070:22;;26101:33;26128:5;26101:33;:::i;:::-;25997:143;;;;:::o;26146:351::-;26216:6;26265:2;26253:9;26244:7;26240:23;26236:32;26233:119;;;26271:79;;:::i;:::-;26233:119;26391:1;26416:64;26472:7;26463:6;26452:9;26448:22;26416:64;:::i;:::-;26406:74;;26362:128;26146:351;;;;:::o;26503:176::-;26643:28;26639:1;26631:6;26627:14;26620:52;26503:176;:::o;26685:366::-;26827:3;26848:67;26912:2;26907:3;26848:67;:::i;:::-;26841:74;;26924:93;27013:3;26924:93;:::i;:::-;27042:2;27037:3;27033:12;27026:19;;26685:366;;;:::o;27057:419::-;27223:4;27261:2;27250:9;27246:18;27238:26;;27310:9;27304:4;27300:20;27296:1;27285:9;27281:17;27274:47;27338:131;27464:4;27338:131;:::i;:::-;27330:139;;27057:419;;;:::o;27482:332::-;27603:4;27641:2;27630:9;27626:18;27618:26;;27654:71;27722:1;27711:9;27707:17;27698:6;27654:71;:::i;:::-;27735:72;27803:2;27792:9;27788:18;27779:6;27735:72;:::i;:::-;27482:332;;;;;:::o;27820:137::-;27874:5;27905:6;27899:13;27890:22;;27921:30;27945:5;27921:30;:::i;:::-;27820:137;;;;:::o;27963:345::-;28030:6;28079:2;28067:9;28058:7;28054:23;28050:32;28047:119;;;28085:79;;:::i;:::-;28047:119;28205:1;28230:61;28283:7;28274:6;28263:9;28259:22;28230:61;:::i;:::-;28220:71;;28176:125;27963:345;;;;:::o;28314:167::-;28454:19;28450:1;28442:6;28438:14;28431:43;28314:167;:::o;28487:366::-;28629:3;28650:67;28714:2;28709:3;28650:67;:::i;:::-;28643:74;;28726:93;28815:3;28726:93;:::i;:::-;28844:2;28839:3;28835:12;28828:19;;28487:366;;;:::o;28859:419::-;29025:4;29063:2;29052:9;29048:18;29040:26;;29112:9;29106:4;29102:20;29098:1;29087:9;29083:17;29076:47;29140:131;29266:4;29140:131;:::i;:::-;29132:139;;28859:419;;;:::o;29284:320::-;29399:4;29437:2;29426:9;29422:18;29414:26;;29450:71;29518:1;29507:9;29503:17;29494:6;29450:71;:::i;:::-;29531:66;29593:2;29582:9;29578:18;29569:6;29531:66;:::i;:::-;29284:320;;;;;:::o;29610:220::-;29750:34;29746:1;29738:6;29734:14;29727:58;29819:3;29814:2;29806:6;29802:15;29795:28;29610:220;:::o;29836:366::-;29978:3;29999:67;30063:2;30058:3;29999:67;:::i;:::-;29992:74;;30075:93;30164:3;30075:93;:::i;:::-;30193:2;30188:3;30184:12;30177:19;;29836:366;;;:::o;30208:419::-;30374:4;30412:2;30401:9;30397:18;30389:26;;30461:9;30455:4;30451:20;30447:1;30436:9;30432:17;30425:47;30489:131;30615:4;30489:131;:::i;:::-;30481:139;;30208:419;;;:::o;30633:224::-;30773:34;30769:1;30761:6;30757:14;30750:58;30842:7;30837:2;30829:6;30825:15;30818:32;30633:224;:::o;30863:366::-;31005:3;31026:67;31090:2;31085:3;31026:67;:::i;:::-;31019:74;;31102:93;31191:3;31102:93;:::i;:::-;31220:2;31215:3;31211:12;31204:19;;30863:366;;;:::o;31235:419::-;31401:4;31439:2;31428:9;31424:18;31416:26;;31488:9;31482:4;31478:20;31474:1;31463:9;31459:17;31452:47;31516:131;31642:4;31516:131;:::i;:::-;31508:139;;31235:419;;;:::o;31660:180::-;31708:77;31705:1;31698:88;31805:4;31802:1;31795:15;31829:4;31826:1;31819:15;31846:233;31885:3;31908:24;31926:5;31908:24;:::i;:::-;31899:33;;31954:66;31947:5;31944:77;31941:103;;32024:18;;:::i;:::-;31941:103;32071:1;32064:5;32060:13;32053:20;;31846:233;;;:::o;32085:225::-;32225:34;32221:1;32213:6;32209:14;32202:58;32294:8;32289:2;32281:6;32277:15;32270:33;32085:225;:::o;32316:366::-;32458:3;32479:67;32543:2;32538:3;32479:67;:::i;:::-;32472:74;;32555:93;32644:3;32555:93;:::i;:::-;32673:2;32668:3;32664:12;32657:19;;32316:366;;;:::o;32688:419::-;32854:4;32892:2;32881:9;32877:18;32869:26;;32941:9;32935:4;32931:20;32927:1;32916:9;32912:17;32905:47;32969:131;33095:4;32969:131;:::i;:::-;32961:139;;32688:419;;;:::o;33113:223::-;33253:34;33249:1;33241:6;33237:14;33230:58;33322:6;33317:2;33309:6;33305:15;33298:31;33113:223;:::o;33342:366::-;33484:3;33505:67;33569:2;33564:3;33505:67;:::i;:::-;33498:74;;33581:93;33670:3;33581:93;:::i;:::-;33699:2;33694:3;33690:12;33683:19;;33342:366;;;:::o;33714:419::-;33880:4;33918:2;33907:9;33903:18;33895:26;;33967:9;33961:4;33957:20;33953:1;33942:9;33938:17;33931:47;33995:131;34121:4;33995:131;:::i;:::-;33987:139;;33714:419;;;:::o;34139:221::-;34279:34;34275:1;34267:6;34263:14;34256:58;34348:4;34343:2;34335:6;34331:15;34324:29;34139:221;:::o;34366:366::-;34508:3;34529:67;34593:2;34588:3;34529:67;:::i;:::-;34522:74;;34605:93;34694:3;34605:93;:::i;:::-;34723:2;34718:3;34714:12;34707:19;;34366:366;;;:::o;34738:419::-;34904:4;34942:2;34931:9;34927:18;34919:26;;34991:9;34985:4;34981:20;34977:1;34966:9;34962:17;34955:47;35019:131;35145:4;35019:131;:::i;:::-;35011:139;;34738:419;;;:::o;35163:182::-;35303:34;35299:1;35291:6;35287:14;35280:58;35163:182;:::o;35351:366::-;35493:3;35514:67;35578:2;35573:3;35514:67;:::i;:::-;35507:74;;35590:93;35679:3;35590:93;:::i;:::-;35708:2;35703:3;35699:12;35692:19;;35351:366;;;:::o;35723:419::-;35889:4;35927:2;35916:9;35912:18;35904:26;;35976:9;35970:4;35966:20;35962:1;35951:9;35947:17;35940:47;36004:131;36130:4;36004:131;:::i;:::-;35996:139;;35723:419;;;:::o;36148:179::-;36288:31;36284:1;36276:6;36272:14;36265:55;36148:179;:::o;36333:366::-;36475:3;36496:67;36560:2;36555:3;36496:67;:::i;:::-;36489:74;;36572:93;36661:3;36572:93;:::i;:::-;36690:2;36685:3;36681:12;36674:19;;36333:366;;;:::o;36705:419::-;36871:4;36909:2;36898:9;36894:18;36886:26;;36958:9;36952:4;36948:20;36944:1;36933:9;36929:17;36922:47;36986:131;37112:4;36986:131;:::i;:::-;36978:139;;36705:419;;;:::o;37130:147::-;37231:11;37268:3;37253:18;;37130:147;;;;:::o;37283:114::-;;:::o;37403:398::-;37562:3;37583:83;37664:1;37659:3;37583:83;:::i;:::-;37576:90;;37675:93;37764:3;37675:93;:::i;:::-;37793:1;37788:3;37784:11;37777:18;;37403:398;;;:::o;37807:379::-;37991:3;38013:147;38156:3;38013:147;:::i;:::-;38006:154;;38177:3;38170:10;;37807:379;;;:::o;38192:245::-;38332:34;38328:1;38320:6;38316:14;38309:58;38401:28;38396:2;38388:6;38384:15;38377:53;38192:245;:::o;38443:366::-;38585:3;38606:67;38670:2;38665:3;38606:67;:::i;:::-;38599:74;;38682:93;38771:3;38682:93;:::i;:::-;38800:2;38795:3;38791:12;38784:19;;38443:366;;;:::o;38815:419::-;38981:4;39019:2;39008:9;39004:18;38996:26;;39068:9;39062:4;39058:20;39054:1;39043:9;39039:17;39032:47;39096:131;39222:4;39096:131;:::i;:::-;39088:139;;38815:419;;;:::o;39240:179::-;39380:31;39376:1;39368:6;39364:14;39357:55;39240:179;:::o;39425:366::-;39567:3;39588:67;39652:2;39647:3;39588:67;:::i;:::-;39581:74;;39664:93;39753:3;39664:93;:::i;:::-;39782:2;39777:3;39773:12;39766:19;;39425:366;;;:::o;39797:419::-;39963:4;40001:2;39990:9;39986:18;39978:26;;40050:9;40044:4;40040:20;40036:1;40025:9;40021:17;40014:47;40078:131;40204:4;40078:131;:::i;:::-;40070:139;;39797:419;;;:::o;40222:228::-;40362:34;40358:1;40350:6;40346:14;40339:58;40431:11;40426:2;40418:6;40414:15;40407:36;40222:228;:::o;40456:366::-;40598:3;40619:67;40683:2;40678:3;40619:67;:::i;:::-;40612:74;;40695:93;40784:3;40695:93;:::i;:::-;40813:2;40808:3;40804:12;40797:19;;40456:366;;;:::o;40828:419::-;40994:4;41032:2;41021:9;41017:18;41009:26;;41081:9;41075:4;41071:20;41067:1;41056:9;41052:17;41045:47;41109:131;41235:4;41109:131;:::i;:::-;41101:139;;40828:419;;;:::o;41253:172::-;41393:24;41389:1;41381:6;41377:14;41370:48;41253:172;:::o;41431:366::-;41573:3;41594:67;41658:2;41653:3;41594:67;:::i;:::-;41587:74;;41670:93;41759:3;41670:93;:::i;:::-;41788:2;41783:3;41779:12;41772:19;;41431:366;;;:::o;41803:419::-;41969:4;42007:2;41996:9;41992:18;41984:26;;42056:9;42050:4;42046:20;42042:1;42031:9;42027:17;42020:47;42084:131;42210:4;42084:131;:::i;:::-;42076:139;;41803:419;;;:::o;42228:177::-;42368:29;42364:1;42356:6;42352:14;42345:53;42228:177;:::o;42411:366::-;42553:3;42574:67;42638:2;42633:3;42574:67;:::i;:::-;42567:74;;42650:93;42739:3;42650:93;:::i;:::-;42768:2;42763:3;42759:12;42752:19;;42411:366;;;:::o;42783:419::-;42949:4;42987:2;42976:9;42972:18;42964:26;;43036:9;43030:4;43026:20;43022:1;43011:9;43007:17;43000:47;43064:131;43190:4;43064:131;:::i;:::-;43056:139;;42783:419;;;:::o;43208:232::-;43348:34;43344:1;43336:6;43332:14;43325:58;43417:15;43412:2;43404:6;43400:15;43393:40;43208:232;:::o;43446:366::-;43588:3;43609:67;43673:2;43668:3;43609:67;:::i;:::-;43602:74;;43685:93;43774:3;43685:93;:::i;:::-;43803:2;43798:3;43794:12;43787:19;;43446:366;;;:::o;43818:419::-;43984:4;44022:2;44011:9;44007:18;43999:26;;44071:9;44065:4;44061:20;44057:1;44046:9;44042:17;44035:47;44099:131;44225:4;44099:131;:::i;:::-;44091:139;;43818:419;;;:::o;44243:143::-;44300:5;44331:6;44325:13;44316:22;;44347:33;44374:5;44347:33;:::i;:::-;44243:143;;;;:::o;44392:351::-;44462:6;44511:2;44499:9;44490:7;44486:23;44482:32;44479:119;;;44517:79;;:::i;:::-;44479:119;44637:1;44662:64;44718:7;44709:6;44698:9;44694:22;44662:64;:::i;:::-;44652:74;;44608:128;44392:351;;;;:::o;44749:85::-;44794:7;44823:5;44812:16;;44749:85;;;:::o;44840:158::-;44898:9;44931:61;44949:42;44958:32;44984:5;44958:32;:::i;:::-;44949:42;:::i;:::-;44931:61;:::i;:::-;44918:74;;44840:158;;;:::o;45004:147::-;45099:45;45138:5;45099:45;:::i;:::-;45094:3;45087:58;45004:147;;:::o;45157:114::-;45224:6;45258:5;45252:12;45242:22;;45157:114;;;:::o;45277:184::-;45376:11;45410:6;45405:3;45398:19;45450:4;45445:3;45441:14;45426:29;;45277:184;;;;:::o;45467:132::-;45534:4;45557:3;45549:11;;45587:4;45582:3;45578:14;45570:22;;45467:132;;;:::o;45605:108::-;45682:24;45700:5;45682:24;:::i;:::-;45677:3;45670:37;45605:108;;:::o;45719:179::-;45788:10;45809:46;45851:3;45843:6;45809:46;:::i;:::-;45887:4;45882:3;45878:14;45864:28;;45719:179;;;;:::o;45904:113::-;45974:4;46006;46001:3;45997:14;45989:22;;45904:113;;;:::o;46053:732::-;46172:3;46201:54;46249:5;46201:54;:::i;:::-;46271:86;46350:6;46345:3;46271:86;:::i;:::-;46264:93;;46381:56;46431:5;46381:56;:::i;:::-;46460:7;46491:1;46476:284;46501:6;46498:1;46495:13;46476:284;;;46577:6;46571:13;46604:63;46663:3;46648:13;46604:63;:::i;:::-;46597:70;;46690:60;46743:6;46690:60;:::i;:::-;46680:70;;46536:224;46523:1;46520;46516:9;46511:14;;46476:284;;;46480:14;46776:3;46769:10;;46177:608;;;46053:732;;;;:::o;46791:831::-;47054:4;47092:3;47081:9;47077:19;47069:27;;47106:71;47174:1;47163:9;47159:17;47150:6;47106:71;:::i;:::-;47187:80;47263:2;47252:9;47248:18;47239:6;47187:80;:::i;:::-;47314:9;47308:4;47304:20;47299:2;47288:9;47284:18;47277:48;47342:108;47445:4;47436:6;47342:108;:::i;:::-;47334:116;;47460:72;47528:2;47517:9;47513:18;47504:6;47460:72;:::i;:::-;47542:73;47610:3;47599:9;47595:19;47586:6;47542:73;:::i;:::-;46791:831;;;;;;;;:::o;47628:224::-;47768:34;47764:1;47756:6;47752:14;47745:58;47837:7;47832:2;47824:6;47820:15;47813:32;47628:224;:::o;47858:366::-;48000:3;48021:67;48085:2;48080:3;48021:67;:::i;:::-;48014:74;;48097:93;48186:3;48097:93;:::i;:::-;48215:2;48210:3;48206:12;48199:19;;47858:366;;;:::o;48230:419::-;48396:4;48434:2;48423:9;48419:18;48411:26;;48483:9;48477:4;48473:20;48469:1;48458:9;48454:17;48447:47;48511:131;48637:4;48511:131;:::i;:::-;48503:139;;48230:419;;;:::o;48655:222::-;48795:34;48791:1;48783:6;48779:14;48772:58;48864:5;48859:2;48851:6;48847:15;48840:30;48655:222;:::o;48883:366::-;49025:3;49046:67;49110:2;49105:3;49046:67;:::i;:::-;49039:74;;49122:93;49211:3;49122:93;:::i;:::-;49240:2;49235:3;49231:12;49224:19;;48883:366;;;:::o;49255:419::-;49421:4;49459:2;49448:9;49444:18;49436:26;;49508:9;49502:4;49498:20;49494:1;49483:9;49479:17;49472:47;49536:131;49662:4;49536:131;:::i;:::-;49528:139;;49255:419;;;:::o;49680:225::-;49820:34;49816:1;49808:6;49804:14;49797:58;49889:8;49884:2;49876:6;49872:15;49865:33;49680:225;:::o;49911:366::-;50053:3;50074:67;50138:2;50133:3;50074:67;:::i;:::-;50067:74;;50150:93;50239:3;50150:93;:::i;:::-;50268:2;50263:3;50259:12;50252:19;;49911:366;;;:::o;50283:419::-;50449:4;50487:2;50476:9;50472:18;50464:26;;50536:9;50530:4;50526:20;50522:1;50511:9;50507:17;50500:47;50564:131;50690:4;50564:131;:::i;:::-;50556:139;;50283:419;;;:::o;50708:807::-;50957:4;50995:3;50984:9;50980:19;50972:27;;51009:71;51077:1;51066:9;51062:17;51053:6;51009:71;:::i;:::-;51090:72;51158:2;51147:9;51143:18;51134:6;51090:72;:::i;:::-;51172:80;51248:2;51237:9;51233:18;51224:6;51172:80;:::i;:::-;51262;51338:2;51327:9;51323:18;51314:6;51262:80;:::i;:::-;51352:73;51420:3;51409:9;51405:19;51396:6;51352:73;:::i;:::-;51435;51503:3;51492:9;51488:19;51479:6;51435:73;:::i;:::-;50708:807;;;;;;;;;:::o;51521:663::-;51609:6;51617;51625;51674:2;51662:9;51653:7;51649:23;51645:32;51642:119;;;51680:79;;:::i;:::-;51642:119;51800:1;51825:64;51881:7;51872:6;51861:9;51857:22;51825:64;:::i;:::-;51815:74;;51771:128;51938:2;51964:64;52020:7;52011:6;52000:9;51996:22;51964:64;:::i;:::-;51954:74;;51909:129;52077:2;52103:64;52159:7;52150:6;52139:9;52135:22;52103:64;:::i;:::-;52093:74;;52048:129;51521:663;;;;;:::o

Swarm Source

ipfs://e4fdf3f72e6d36e568d2d0a6e297bef3e8e59779088bda438038fceb39f192e9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.