ETH Price: $3,931.98 (-0.16%)

Token

Forgott3n Banners (F3B)
 

Overview

Max Total Supply

125 F3B

Holders

31

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
3 F3B
0xfbd6aa5500a3ccd2a8311c8f2b1827ed314481d7
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:
ForgottenBanners

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol


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

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _safeTransfer(from, to, tokenId, data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) 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.
     * - `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 tokenId
    ) internal virtual {}
}

// File: contracts/NFT.sol


// Amended by HashLips

pragma solidity >=0.7.0 <0.9.0;




contract ForgottenBanners is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  string public uriSuffix = ".json";
  string public hiddenMetadataUri;
  string public genContract = "0x36D582Ea65F98A087767028A0Ef469aDa276Ffe7";
  
  uint256 public cost = 0 ether;
  uint256 public maxSupply = 777;
  uint256 public maxMintAmountPerTx = 1;
  uint256 public maxByWallet = 3;

  bool public paused = true;
  bool public revealed = true;
  bool public isClaimActive = false;

  mapping(address => uint8) private _claimList;
  mapping(address => uint256) public mintedByWallet;

  constructor() ERC721("Forgott3n Banners", "F3B") {
    setHiddenMetadataUri("ipfs://__CID__/hidden.json");
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    require(_mintAmount + mintedByWallet[msg.sender] <= maxByWallet, "Exceed maxByWallet");

    mintedByWallet[msg.sender] += _mintAmount;

    _mintLoop(msg.sender, _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    if (revealed == false) {
      return hiddenMetadataUri;
    }


    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : "";
  }

  function setGenContract(string memory _genContract) public onlyOwner {
    genContract = _genContract;
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
    maxMintAmountPerTx = _maxMintAmountPerTx;
  }

  function setMaxByWallet(uint256 _maxByWallet) public onlyOwner {
    maxByWallet = _maxByWallet;
  }

  function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function setIsClaimActive(bool _state) public onlyOwner {
    isClaimActive = _state;
  }

  function parseAddr(string memory _a) internal pure returns (address _parsedAddress) {
    bytes memory tmp = bytes(_a);
    uint160 iaddr = 0;
    uint160 b1;
    uint160 b2;
    for (uint i = 2; i < 2 + 2 * 20; i += 2) {
        iaddr *= 256;
        b1 = uint160(uint8(tmp[i]));
        b2 = uint160(uint8(tmp[i + 1]));
        if ((b1 >= 97) && (b1 <= 102)) {
            b1 -= 87;
        } else if ((b1 >= 65) && (b1 <= 70)) {
            b1 -= 55;
        } else if ((b1 >= 48) && (b1 <= 57)) {
            b1 -= 48;
        }
        if ((b2 >= 97) && (b2 <= 102)) {
            b2 -= 87;
        } else if ((b2 >= 65) && (b2 <= 70)) {
            b2 -= 55;
        } else if ((b2 >= 48) && (b2 <= 57)) {
            b2 -= 48;
        }
        iaddr += (b1 * 16 + b2);
    }
    return address(iaddr);
}

  function setClaimList(address[] calldata addresses) external onlyOwner {
    
    for (uint256 i = 0; i < addresses.length; i++) {
        _claimList[addresses[i]] = numberOfTokensInWallet(addresses[i], parseAddr(genContract));
    }
  }

  function withdraw() public onlyOwner {
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
  }

  function numberOfTokensInWallet(address _wallet, address _contract) public view returns (uint8) {
    return uint8(IERC721(_contract).balanceOf(_wallet));
  }

  function claim() public payable{
    uint8 numberOfTokens = _claimList[msg.sender];

    require(isClaimActive, "Claim is not active");
    require(numberOfTokens > 0, "Wallet has no gen tokens, is not in snapshot or has already claimed!");
    require(supply.current() + numberOfTokens <= maxSupply, "Claim would exceed max tokens");

    for (uint256 i = 0; i < numberOfTokens; i++) {
        supply.increment();
        _safeMint(msg.sender, supply.current());
    }
    _claimList[msg.sender] -= numberOfTokens;
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return uriPrefix;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genContract","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isClaimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"numberOfTokensInWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"setClaimList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_genContract","type":"string"}],"name":"setGenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsClaimActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxByWallet","type":"uint256"}],"name":"setMaxByWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600890805190602001906200002b929190620003e1565b506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000079929190620003e1565b506040518060600160405280602a815260200162004f66602a9139600b9080519060200190620000ab929190620003e1565b506000600c55610309600d556001600e556003600f556001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055503480156200011f57600080fd5b506040518060400160405280601181526020017f466f72676f7474336e2042616e6e6572730000000000000000000000000000008152506040518060400160405280600381526020017f46334200000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001a4929190620003e1565b508060019080519060200190620001bd929190620003e1565b505050620001e0620001d46200022c60201b60201c565b6200023460201b60201c565b620002266040518060400160405280601a81526020017f697066733a2f2f5f5f4349445f5f2f68696464656e2e6a736f6e000000000000815250620002fa60201b60201c565b62000579565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200030a6200032660201b60201c565b80600a908051906020019062000322929190620003e1565b5050565b620003366200022c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200035c620003b760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ac90620004b8565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003ef90620004eb565b90600052602060002090601f0160209004810192826200041357600085556200045f565b82601f106200042e57805160ff19168380011785556200045f565b828001600101855582156200045f579182015b828111156200045e57825182559160200191906001019062000441565b5b5090506200046e919062000472565b5090565b5b808211156200048d57600081600090555060010162000473565b5090565b6000620004a0602083620004da565b9150620004ad8262000550565b602082019050919050565b60006020820190508181036000830152620004d38162000491565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200050457607f821691505b602082108114156200051b576200051a62000521565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6149dd80620005896000396000f3fe60806040526004361061027d5760003560e01c80635c975abb1161014f578063a22cb465116100c1578063d5abeb011161007a578063d5abeb0114610956578063defe114114610981578063e0a80853146109aa578063e985e9c5146109d3578063efbd73f414610a10578063f2fde38b14610a395761027d565b8063a22cb4651461084a578063a2b7c82414610873578063a45ba8e71461089c578063b071401b146108c7578063b88d4fde146108f0578063c87b56dd146109195761027d565b80637ec4a659116101135780637ec4a659146107595780637fc27803146107825780638da5cb5b146107ad57806394354fd0146107d857806395d89b4114610803578063a0712d681461082e5761027d565b80635c975abb1461067257806362b99ad41461069d5780636352211e146106c857806370a0823114610705578063715018a6146107425761027d565b806323b872dd116101f3578063438b6300116101ac578063438b63001461058357806344a0d68a146105c05780634e71d92d146105e95780634fdd43cb146105f3578063518302271461061c5780635503a0e8146106475761027d565b806323b872dd146104895780632e067421146104b25780632fe5358b146104db57806334ecc70a146105185780633ccfd60b1461054357806342842e0e1461055a5761027d565b80630d758111116102455780630d75811114610379578063126f816a146103b657806313faede6146103e157806316ba10e01461040c57806316c38b3c1461043557806318160ddd1461045e5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea57806308d28e0a14610327578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a491906134ad565b610a62565b6040516102b69190613b9e565b60405180910390f35b3480156102cb57600080fd5b506102d4610b44565b6040516102e19190613bb9565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613550565b610bd6565b60405161031e9190613b15565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613507565b610c1c565b005b34801561035c57600080fd5b50610377600480360381019061037291906133f3565b610c3e565b005b34801561038557600080fd5b506103a0600480360381019061039b9190613270565b610d56565b6040516103ad9190613e7b565b60405180910390f35b3480156103c257600080fd5b506103cb610d6e565b6040516103d89190613bb9565b60405180910390f35b3480156103ed57600080fd5b506103f6610dfc565b6040516104039190613e7b565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190613507565b610e02565b005b34801561044157600080fd5b5061045c60048036038101906104579190613480565b610e24565b005b34801561046a57600080fd5b50610473610e49565b6040516104809190613e7b565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906132dd565b610e5a565b005b3480156104be57600080fd5b506104d960048036038101906104d49190613550565b610eba565b005b3480156104e757600080fd5b5061050260048036038101906104fd919061329d565b610ecc565b60405161050f9190613e96565b60405180910390f35b34801561052457600080fd5b5061052d610f5f565b60405161053a9190613e7b565b60405180910390f35b34801561054f57600080fd5b50610558610f65565b005b34801561056657600080fd5b50610581600480360381019061057c91906132dd565b610fed565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613270565b61100d565b6040516105b79190613b7c565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e29190613550565b611118565b005b6105f161112a565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613507565b611321565b005b34801561062857600080fd5b50610631611343565b60405161063e9190613b9e565b60405180910390f35b34801561065357600080fd5b5061065c611356565b6040516106699190613bb9565b60405180910390f35b34801561067e57600080fd5b506106876113e4565b6040516106949190613b9e565b60405180910390f35b3480156106a957600080fd5b506106b26113f7565b6040516106bf9190613bb9565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613550565b611485565b6040516106fc9190613b15565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190613270565b611537565b6040516107399190613e7b565b60405180910390f35b34801561074e57600080fd5b506107576115ef565b005b34801561076557600080fd5b50610780600480360381019061077b9190613507565b611603565b005b34801561078e57600080fd5b50610797611625565b6040516107a49190613b9e565b60405180910390f35b3480156107b957600080fd5b506107c2611638565b6040516107cf9190613b15565b60405180910390f35b3480156107e457600080fd5b506107ed611662565b6040516107fa9190613e7b565b60405180910390f35b34801561080f57600080fd5b50610818611668565b6040516108259190613bb9565b60405180910390f35b61084860048036038101906108439190613550565b6116fa565b005b34801561085657600080fd5b50610871600480360381019061086c91906133b3565b6118e8565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613433565b6118fe565b005b3480156108a857600080fd5b506108b1611a6d565b6040516108be9190613bb9565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190613550565b611afb565b005b3480156108fc57600080fd5b5061091760048036038101906109129190613330565b611b0d565b005b34801561092557600080fd5b50610940600480360381019061093b9190613550565b611b6f565b60405161094d9190613bb9565b60405180910390f35b34801561096257600080fd5b5061096b611cc8565b6040516109789190613e7b565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613480565b611cce565b005b3480156109b657600080fd5b506109d160048036038101906109cc9190613480565b611cf3565b005b3480156109df57600080fd5b506109fa60048036038101906109f5919061329d565b611d18565b604051610a079190613b9e565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a3291906135aa565b611dac565b005b348015610a4557600080fd5b50610a606004803603810190610a5b9190613270565b611e6e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b2d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3d5750610b3c82611ef2565b5b9050919050565b606060008054610b5390614252565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7f90614252565b8015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b5050505050905090565b6000610be182611f5c565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c24611fa7565b80600b9080519060200190610c3a929190613019565b5050565b6000610c4982611485565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613dfb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd9612025565b73ffffffffffffffffffffffffffffffffffffffff161480610d085750610d0781610d02612025565b611d18565b5b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90613cfb565b60405180910390fd5b610d51838361202d565b505050565b60126020528060005260406000206000915090505481565b600b8054610d7b90614252565b80601f0160208091040260200160405190810160405280929190818152602001828054610da790614252565b8015610df45780601f10610dc957610100808354040283529160200191610df4565b820191906000526020600020905b815481529060010190602001808311610dd757829003601f168201915b505050505081565b600c5481565b610e0a611fa7565b8060099080519060200190610e20929190613019565b5050565b610e2c611fa7565b80601060006101000a81548160ff02191690831515021790555050565b6000610e5560076120e6565b905090565b610e6b610e65612025565b826120f4565b610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613e3b565b60405180910390fd5b610eb5838383612189565b505050565b610ec2611fa7565b80600f8190555050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610f079190613b15565b60206040518083038186803b158015610f1f57600080fd5b505afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f57919061357d565b905092915050565b600f5481565b610f6d611fa7565b6000610f77611638565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f9a90613b00565b60006040518083038185875af1925050503d8060008114610fd7576040519150601f19603f3d011682016040523d82523d6000602084013e610fdc565b606091505b5050905080610fea57600080fd5b50565b61100883838360405180602001604052806000815250611b0d565b505050565b6060600061101a83611537565b905060008167ffffffffffffffff811115611038576110376143eb565b5b6040519080825280602002602001820160405280156110665781602001602082028036833780820191505090505b50905060006001905060005b83811080156110835750600d548211155b1561110c57600061109383611485565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110f857828483815181106110dd576110dc6143bc565b5b60200260200101818152505081806110f4906142b5565b9250505b8280611103906142b5565b93505050611072565b82945050505050919050565b611120611fa7565b80600c8190555050565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060029054906101000a900460ff166111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c190613d3b565b60405180910390fd5b60008160ff1611611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790613dbb565b60405180910390fd5b600d548160ff1661122160076120e6565b61122b919061401e565b111561126c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126390613e5b565b60405180910390fd5b60005b8160ff168110156112aa5761128460076123f0565b6112973361129260076120e6565b612406565b80806112a2906142b5565b91505061126f565b5080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611306919061415b565b92506101000a81548160ff021916908360ff16021790555050565b611329611fa7565b80600a908051906020019061133f929190613019565b5050565b601060019054906101000a900460ff1681565b6009805461136390614252565b80601f016020809104026020016040519081016040528092919081815260200182805461138f90614252565b80156113dc5780601f106113b1576101008083540402835291602001916113dc565b820191906000526020600020905b8154815290600101906020018083116113bf57829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b6008805461140490614252565b80601f016020809104026020016040519081016040528092919081815260200182805461143090614252565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590613ddb565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613cdb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f7611fa7565b6116016000612424565b565b61160b611fa7565b8060089080519060200190611621929190613019565b5050565b601060029054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606001805461167790614252565b80601f01602080910402602001604051908101604052809291908181526020018280546116a390614252565b80156116f05780601f106116c5576101008083540402835291602001916116f0565b820191906000526020600020905b8154815290600101906020018083116116d357829003601f168201915b5050505050905090565b8060008111801561170d5750600e548111155b61174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390613c7b565b60405180910390fd5b600d548161175a60076120e6565b611764919061401e565b11156117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90613e1b565b60405180910390fd5b601060009054906101000a900460ff16156117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90613d7b565b60405180910390fd5b600f54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611843919061401e565b1115611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90613bdb565b60405180910390fd5b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d3919061401e565b925050819055506118e433836124ea565b5050565b6118fa6118f3612025565b838361252a565b5050565b611906611fa7565b60005b82829050811015611a68576119d783838381811061192a576119296143bc565b5b905060200201602081019061193f9190613270565b6119d2600b805461194f90614252565b80601f016020809104026020016040519081016040528092919081815260200182805461197b90614252565b80156119c85780601f1061199d576101008083540402835291602001916119c8565b820191906000526020600020905b8154815290600101906020018083116119ab57829003601f168201915b5050505050612697565b610ecc565b601160008585858181106119ee576119ed6143bc565b5b9050602002016020810190611a039190613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611a60906142b5565b915050611909565b505050565b600a8054611a7a90614252565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa690614252565b8015611af35780601f10611ac857610100808354040283529160200191611af3565b820191906000526020600020905b815481529060010190602001808311611ad657829003601f168201915b505050505081565b611b03611fa7565b80600e8190555050565b611b1e611b18612025565b836120f4565b611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490613e3b565b60405180910390fd5b611b6984848484612965565b50505050565b6060611b7a826129c1565b611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613d9b565b60405180910390fd5b60001515601060019054906101000a900460ff1615151415611c6757600a8054611be290614252565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0e90614252565b8015611c5b5780601f10611c3057610100808354040283529160200191611c5b565b820191906000526020600020905b815481529060010190602001808311611c3e57829003601f168201915b50505050509050611cc3565b6000611c71612a2d565b90506000815111611c915760405180602001604052806000815250611cbf565b80611c9b84612abf565b6009604051602001611caf93929190613acf565b6040516020818303038152906040525b9150505b919050565b600d5481565b611cd6611fa7565b80601060026101000a81548160ff02191690831515021790555050565b611cfb611fa7565b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611dbf5750600e548111155b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613c7b565b60405180910390fd5b600d5481611e0c60076120e6565b611e16919061401e565b1115611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613e1b565b60405180910390fd5b611e5f611fa7565b611e6982846124ea565b505050565b611e76611fa7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edd90613c1b565b60405180910390fd5b611eef81612424565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f65816129c1565b611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90613ddb565b60405180910390fd5b50565b611faf612025565b73ffffffffffffffffffffffffffffffffffffffff16611fcd611638565b73ffffffffffffffffffffffffffffffffffffffff1614612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613d5b565b60405180910390fd5b565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120a083611485565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061210083611485565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061214257506121418185611d18565b5b8061218057508373ffffffffffffffffffffffffffffffffffffffff1661216884610bd6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121a982611485565b73ffffffffffffffffffffffffffffffffffffffff16146121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690613c3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613c9b565b60405180910390fd5b61227a838383612c20565b61228560008261202d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d59190614127565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232c919061401e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123eb838383612c25565b505050565b6001816000016000828254019250508190555050565b612420828260405180602001604052806000815250612c2a565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612525576124ff60076123f0565b6125128361250d60076120e6565b612406565b808061251d906142b5565b9150506124ed565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259090613cbb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161268a9190613b9e565b60405180910390a3505050565b600080829050600080806000600290505b602a81101561295857610100846126bf91906140a5565b93508481815181106126d4576126d36143bc565b5b602001015160f81c60f81b60f81c60ff169250846001826126f5919061401e565b81518110612706576127056143bc565b5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff1610158015612757575060668373ffffffffffffffffffffffffffffffffffffffff1611155b156127705760578361276991906140f3565b925061281c565b60418373ffffffffffffffffffffffffffffffffffffffff16101580156127ae575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156127c7576037836127c091906140f3565b925061281b565b60308373ffffffffffffffffffffffffffffffffffffffff1610158015612805575060398373ffffffffffffffffffffffffffffffffffffffff1611155b1561281a5760308361281791906140f3565b92505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff161015801561285a575060668273ffffffffffffffffffffffffffffffffffffffff1611155b156128735760578261286c91906140f3565b915061291f565b60418273ffffffffffffffffffffffffffffffffffffffff16101580156128b1575060468273ffffffffffffffffffffffffffffffffffffffff1611155b156128ca576037826128c391906140f3565b915061291e565b60308273ffffffffffffffffffffffffffffffffffffffff1610158015612908575060398273ffffffffffffffffffffffffffffffffffffffff1611155b1561291d5760308261291a91906140f3565b91505b5b5b8160108461292d91906140a5565b6129379190613fd4565b846129429190613fd4565b9350600281612951919061401e565b90506126a8565b5082945050505050919050565b612970848484612189565b61297c84848484612c85565b6129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290613bfb565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054612a3c90614252565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6890614252565b8015612ab55780601f10612a8a57610100808354040283529160200191612ab5565b820191906000526020600020905b815481529060010190602001808311612a9857829003601f168201915b5050505050905090565b60606000821415612b07576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c1b565b600082905060005b60008214612b39578080612b22906142b5565b915050600a82612b329190614074565b9150612b0f565b60008167ffffffffffffffff811115612b5557612b546143eb565b5b6040519080825280601f01601f191660200182016040528015612b875781602001600182028036833780820191505090505b5090505b60008514612c1457600182612ba09190614127565b9150600a85612baf91906142fe565b6030612bbb919061401e565b60f81b818381518110612bd157612bd06143bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c0d9190614074565b9450612b8b565b8093505050505b919050565b505050565b505050565b612c348383612e1c565b612c416000848484612c85565b612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790613bfb565b60405180910390fd5b505050565b6000612ca68473ffffffffffffffffffffffffffffffffffffffff16612ff6565b15612e0f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ccf612025565b8786866040518563ffffffff1660e01b8152600401612cf19493929190613b30565b602060405180830381600087803b158015612d0b57600080fd5b505af1925050508015612d3c57506040513d601f19601f82011682018060405250810190612d3991906134da565b60015b612dbf573d8060008114612d6c576040519150601f19603f3d011682016040523d82523d6000602084013e612d71565b606091505b50600081511415612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90613bfb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e14565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8390613d1b565b60405180910390fd5b612e95816129c1565b15612ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecc90613c5b565b60405180910390fd5b612ee160008383612c20565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f31919061401e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff260008383612c25565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461302590614252565b90600052602060002090601f016020900481019282613047576000855561308e565b82601f1061306057805160ff191683800117855561308e565b8280016001018555821561308e579182015b8281111561308d578251825591602001919060010190613072565b5b50905061309b919061309f565b5090565b5b808211156130b85760008160009055506001016130a0565b5090565b60006130cf6130ca84613ed6565b613eb1565b9050828152602081018484840111156130eb576130ea614429565b5b6130f6848285614210565b509392505050565b600061311161310c84613f07565b613eb1565b90508281526020810184848401111561312d5761312c614429565b5b613138848285614210565b509392505050565b60008135905061314f8161494b565b92915050565b60008083601f84011261316b5761316a61441f565b5b8235905067ffffffffffffffff8111156131885761318761441a565b5b6020830191508360208202830111156131a4576131a3614424565b5b9250929050565b6000813590506131ba81614962565b92915050565b6000813590506131cf81614979565b92915050565b6000815190506131e481614979565b92915050565b600082601f8301126131ff576131fe61441f565b5b813561320f8482602086016130bc565b91505092915050565b600082601f83011261322d5761322c61441f565b5b813561323d8482602086016130fe565b91505092915050565b60008135905061325581614990565b92915050565b60008151905061326a81614990565b92915050565b60006020828403121561328657613285614433565b5b600061329484828501613140565b91505092915050565b600080604083850312156132b4576132b3614433565b5b60006132c285828601613140565b92505060206132d385828601613140565b9150509250929050565b6000806000606084860312156132f6576132f5614433565b5b600061330486828701613140565b935050602061331586828701613140565b925050604061332686828701613246565b9150509250925092565b6000806000806080858703121561334a57613349614433565b5b600061335887828801613140565b945050602061336987828801613140565b935050604061337a87828801613246565b925050606085013567ffffffffffffffff81111561339b5761339a61442e565b5b6133a7878288016131ea565b91505092959194509250565b600080604083850312156133ca576133c9614433565b5b60006133d885828601613140565b92505060206133e9858286016131ab565b9150509250929050565b6000806040838503121561340a57613409614433565b5b600061341885828601613140565b925050602061342985828601613246565b9150509250929050565b6000806020838503121561344a57613449614433565b5b600083013567ffffffffffffffff8111156134685761346761442e565b5b61347485828601613155565b92509250509250929050565b60006020828403121561349657613495614433565b5b60006134a4848285016131ab565b91505092915050565b6000602082840312156134c3576134c2614433565b5b60006134d1848285016131c0565b91505092915050565b6000602082840312156134f0576134ef614433565b5b60006134fe848285016131d5565b91505092915050565b60006020828403121561351d5761351c614433565b5b600082013567ffffffffffffffff81111561353b5761353a61442e565b5b61354784828501613218565b91505092915050565b60006020828403121561356657613565614433565b5b600061357484828501613246565b91505092915050565b60006020828403121561359357613592614433565b5b60006135a18482850161325b565b91505092915050565b600080604083850312156135c1576135c0614433565b5b60006135cf85828601613246565b92505060206135e085828601613140565b9150509250929050565b60006135f68383613aa2565b60208301905092915050565b61360b8161418f565b82525050565b600061361c82613f5d565b6136268185613f8b565b935061363183613f38565b8060005b8381101561366257815161364988826135ea565b975061365483613f7e565b925050600181019050613635565b5085935050505092915050565b613678816141a1565b82525050565b600061368982613f68565b6136938185613f9c565b93506136a381856020860161421f565b6136ac81614438565b840191505092915050565b60006136c282613f73565b6136cc8185613fb8565b93506136dc81856020860161421f565b6136e581614438565b840191505092915050565b60006136fb82613f73565b6137058185613fc9565b935061371581856020860161421f565b80840191505092915050565b6000815461372e81614252565b6137388186613fc9565b94506001821660008114613753576001811461376457613797565b60ff19831686528186019350613797565b61376d85613f48565b60005b8381101561378f57815481890152600182019150602081019050613770565b838801955050505b50505092915050565b60006137ad601283613fb8565b91506137b882614449565b602082019050919050565b60006137d0603283613fb8565b91506137db82614472565b604082019050919050565b60006137f3602683613fb8565b91506137fe826144c1565b604082019050919050565b6000613816602583613fb8565b915061382182614510565b604082019050919050565b6000613839601c83613fb8565b91506138448261455f565b602082019050919050565b600061385c601483613fb8565b915061386782614588565b602082019050919050565b600061387f602483613fb8565b915061388a826145b1565b604082019050919050565b60006138a2601983613fb8565b91506138ad82614600565b602082019050919050565b60006138c5602983613fb8565b91506138d082614629565b604082019050919050565b60006138e8603e83613fb8565b91506138f382614678565b604082019050919050565b600061390b602083613fb8565b9150613916826146c7565b602082019050919050565b600061392e601383613fb8565b9150613939826146f0565b602082019050919050565b6000613951602083613fb8565b915061395c82614719565b602082019050919050565b6000613974601783613fb8565b915061397f82614742565b602082019050919050565b6000613997602f83613fb8565b91506139a28261476b565b604082019050919050565b60006139ba604483613fb8565b91506139c5826147ba565b606082019050919050565b60006139dd601883613fb8565b91506139e88261482f565b602082019050919050565b6000613a00602183613fb8565b9150613a0b82614858565b604082019050919050565b6000613a23600083613fad565b9150613a2e826148a7565b600082019050919050565b6000613a46601483613fb8565b9150613a51826148aa565b602082019050919050565b6000613a69602e83613fb8565b9150613a74826148d3565b604082019050919050565b6000613a8c601d83613fb8565b9150613a9782614922565b602082019050919050565b613aab816141f9565b82525050565b613aba816141f9565b82525050565b613ac981614203565b82525050565b6000613adb82866136f0565b9150613ae782856136f0565b9150613af38284613721565b9150819050949350505050565b6000613b0b82613a16565b9150819050919050565b6000602082019050613b2a6000830184613602565b92915050565b6000608082019050613b456000830187613602565b613b526020830186613602565b613b5f6040830185613ab1565b8181036060830152613b71818461367e565b905095945050505050565b60006020820190508181036000830152613b968184613611565b905092915050565b6000602082019050613bb3600083018461366f565b92915050565b60006020820190508181036000830152613bd381846136b7565b905092915050565b60006020820190508181036000830152613bf4816137a0565b9050919050565b60006020820190508181036000830152613c14816137c3565b9050919050565b60006020820190508181036000830152613c34816137e6565b9050919050565b60006020820190508181036000830152613c5481613809565b9050919050565b60006020820190508181036000830152613c748161382c565b9050919050565b60006020820190508181036000830152613c948161384f565b9050919050565b60006020820190508181036000830152613cb481613872565b9050919050565b60006020820190508181036000830152613cd481613895565b9050919050565b60006020820190508181036000830152613cf4816138b8565b9050919050565b60006020820190508181036000830152613d14816138db565b9050919050565b60006020820190508181036000830152613d34816138fe565b9050919050565b60006020820190508181036000830152613d5481613921565b9050919050565b60006020820190508181036000830152613d7481613944565b9050919050565b60006020820190508181036000830152613d9481613967565b9050919050565b60006020820190508181036000830152613db48161398a565b9050919050565b60006020820190508181036000830152613dd4816139ad565b9050919050565b60006020820190508181036000830152613df4816139d0565b9050919050565b60006020820190508181036000830152613e14816139f3565b9050919050565b60006020820190508181036000830152613e3481613a39565b9050919050565b60006020820190508181036000830152613e5481613a5c565b9050919050565b60006020820190508181036000830152613e7481613a7f565b9050919050565b6000602082019050613e906000830184613ab1565b92915050565b6000602082019050613eab6000830184613ac0565b92915050565b6000613ebb613ecc565b9050613ec78282614284565b919050565b6000604051905090565b600067ffffffffffffffff821115613ef157613ef06143eb565b5b613efa82614438565b9050602081019050919050565b600067ffffffffffffffff821115613f2257613f216143eb565b5b613f2b82614438565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fdf826141d9565b9150613fea836141d9565b92508273ffffffffffffffffffffffffffffffffffffffff038211156140135761401261432f565b5b828201905092915050565b6000614029826141f9565b9150614034836141f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140695761406861432f565b5b828201905092915050565b600061407f826141f9565b915061408a836141f9565b92508261409a5761409961435e565b5b828204905092915050565b60006140b0826141d9565b91506140bb836141d9565b92508173ffffffffffffffffffffffffffffffffffffffff04831182151516156140e8576140e761432f565b5b828202905092915050565b60006140fe826141d9565b9150614109836141d9565b92508282101561411c5761411b61432f565b5b828203905092915050565b6000614132826141f9565b915061413d836141f9565b9250828210156141505761414f61432f565b5b828203905092915050565b600061416682614203565b915061417183614203565b9250828210156141845761418361432f565b5b828203905092915050565b600061419a826141d9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561423d578082015181840152602081019050614222565b8381111561424c576000848401525b50505050565b6000600282049050600182168061426a57607f821691505b6020821081141561427e5761427d61438d565b5b50919050565b61428d82614438565b810181811067ffffffffffffffff821117156142ac576142ab6143eb565b5b80604052505050565b60006142c0826141f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142f3576142f261432f565b5b600182019050919050565b6000614309826141f9565b9150614314836141f9565b9250826143245761432361435e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f457863656564206d6178427957616c6c65740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436c61696d206973206e6f742061637469766500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f57616c6c657420686173206e6f2067656e20746f6b656e732c206973206e6f7460008201527f20696e20736e617073686f74206f722068617320616c726561647920636c616960208201527f6d65642100000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f436c61696d20776f756c6420657863656564206d617820746f6b656e73000000600082015250565b6149548161418f565b811461495f57600080fd5b50565b61496b816141a1565b811461497657600080fd5b50565b614982816141ad565b811461498d57600080fd5b50565b614999816141f9565b81146149a457600080fd5b5056fea2646970667358221220026e2b8a4b8d0a4279710098f927fee5b7b0a0c9b3aa97099fa2f959c6930ab064736f6c63430008070033307833364435383245613635463938413038373736373032384130456634363961446132373646666537

Deployed Bytecode

0x60806040526004361061027d5760003560e01c80635c975abb1161014f578063a22cb465116100c1578063d5abeb011161007a578063d5abeb0114610956578063defe114114610981578063e0a80853146109aa578063e985e9c5146109d3578063efbd73f414610a10578063f2fde38b14610a395761027d565b8063a22cb4651461084a578063a2b7c82414610873578063a45ba8e71461089c578063b071401b146108c7578063b88d4fde146108f0578063c87b56dd146109195761027d565b80637ec4a659116101135780637ec4a659146107595780637fc27803146107825780638da5cb5b146107ad57806394354fd0146107d857806395d89b4114610803578063a0712d681461082e5761027d565b80635c975abb1461067257806362b99ad41461069d5780636352211e146106c857806370a0823114610705578063715018a6146107425761027d565b806323b872dd116101f3578063438b6300116101ac578063438b63001461058357806344a0d68a146105c05780634e71d92d146105e95780634fdd43cb146105f3578063518302271461061c5780635503a0e8146106475761027d565b806323b872dd146104895780632e067421146104b25780632fe5358b146104db57806334ecc70a146105185780633ccfd60b1461054357806342842e0e1461055a5761027d565b80630d758111116102455780630d75811114610379578063126f816a146103b657806313faede6146103e157806316ba10e01461040c57806316c38b3c1461043557806318160ddd1461045e5761027d565b806301ffc9a71461028257806306fdde03146102bf578063081812fc146102ea57806308d28e0a14610327578063095ea7b314610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a491906134ad565b610a62565b6040516102b69190613b9e565b60405180910390f35b3480156102cb57600080fd5b506102d4610b44565b6040516102e19190613bb9565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613550565b610bd6565b60405161031e9190613b15565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613507565b610c1c565b005b34801561035c57600080fd5b50610377600480360381019061037291906133f3565b610c3e565b005b34801561038557600080fd5b506103a0600480360381019061039b9190613270565b610d56565b6040516103ad9190613e7b565b60405180910390f35b3480156103c257600080fd5b506103cb610d6e565b6040516103d89190613bb9565b60405180910390f35b3480156103ed57600080fd5b506103f6610dfc565b6040516104039190613e7b565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e9190613507565b610e02565b005b34801561044157600080fd5b5061045c60048036038101906104579190613480565b610e24565b005b34801561046a57600080fd5b50610473610e49565b6040516104809190613e7b565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab91906132dd565b610e5a565b005b3480156104be57600080fd5b506104d960048036038101906104d49190613550565b610eba565b005b3480156104e757600080fd5b5061050260048036038101906104fd919061329d565b610ecc565b60405161050f9190613e96565b60405180910390f35b34801561052457600080fd5b5061052d610f5f565b60405161053a9190613e7b565b60405180910390f35b34801561054f57600080fd5b50610558610f65565b005b34801561056657600080fd5b50610581600480360381019061057c91906132dd565b610fed565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613270565b61100d565b6040516105b79190613b7c565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e29190613550565b611118565b005b6105f161112a565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190613507565b611321565b005b34801561062857600080fd5b50610631611343565b60405161063e9190613b9e565b60405180910390f35b34801561065357600080fd5b5061065c611356565b6040516106699190613bb9565b60405180910390f35b34801561067e57600080fd5b506106876113e4565b6040516106949190613b9e565b60405180910390f35b3480156106a957600080fd5b506106b26113f7565b6040516106bf9190613bb9565b60405180910390f35b3480156106d457600080fd5b506106ef60048036038101906106ea9190613550565b611485565b6040516106fc9190613b15565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190613270565b611537565b6040516107399190613e7b565b60405180910390f35b34801561074e57600080fd5b506107576115ef565b005b34801561076557600080fd5b50610780600480360381019061077b9190613507565b611603565b005b34801561078e57600080fd5b50610797611625565b6040516107a49190613b9e565b60405180910390f35b3480156107b957600080fd5b506107c2611638565b6040516107cf9190613b15565b60405180910390f35b3480156107e457600080fd5b506107ed611662565b6040516107fa9190613e7b565b60405180910390f35b34801561080f57600080fd5b50610818611668565b6040516108259190613bb9565b60405180910390f35b61084860048036038101906108439190613550565b6116fa565b005b34801561085657600080fd5b50610871600480360381019061086c91906133b3565b6118e8565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613433565b6118fe565b005b3480156108a857600080fd5b506108b1611a6d565b6040516108be9190613bb9565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e99190613550565b611afb565b005b3480156108fc57600080fd5b5061091760048036038101906109129190613330565b611b0d565b005b34801561092557600080fd5b50610940600480360381019061093b9190613550565b611b6f565b60405161094d9190613bb9565b60405180910390f35b34801561096257600080fd5b5061096b611cc8565b6040516109789190613e7b565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190613480565b611cce565b005b3480156109b657600080fd5b506109d160048036038101906109cc9190613480565b611cf3565b005b3480156109df57600080fd5b506109fa60048036038101906109f5919061329d565b611d18565b604051610a079190613b9e565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a3291906135aa565b611dac565b005b348015610a4557600080fd5b50610a606004803603810190610a5b9190613270565b611e6e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b2d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3d5750610b3c82611ef2565b5b9050919050565b606060008054610b5390614252565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7f90614252565b8015610bcc5780601f10610ba157610100808354040283529160200191610bcc565b820191906000526020600020905b815481529060010190602001808311610baf57829003601f168201915b5050505050905090565b6000610be182611f5c565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c24611fa7565b80600b9080519060200190610c3a929190613019565b5050565b6000610c4982611485565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613dfb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd9612025565b73ffffffffffffffffffffffffffffffffffffffff161480610d085750610d0781610d02612025565b611d18565b5b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90613cfb565b60405180910390fd5b610d51838361202d565b505050565b60126020528060005260406000206000915090505481565b600b8054610d7b90614252565b80601f0160208091040260200160405190810160405280929190818152602001828054610da790614252565b8015610df45780601f10610dc957610100808354040283529160200191610df4565b820191906000526020600020905b815481529060010190602001808311610dd757829003601f168201915b505050505081565b600c5481565b610e0a611fa7565b8060099080519060200190610e20929190613019565b5050565b610e2c611fa7565b80601060006101000a81548160ff02191690831515021790555050565b6000610e5560076120e6565b905090565b610e6b610e65612025565b826120f4565b610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613e3b565b60405180910390fd5b610eb5838383612189565b505050565b610ec2611fa7565b80600f8190555050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610f079190613b15565b60206040518083038186803b158015610f1f57600080fd5b505afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f57919061357d565b905092915050565b600f5481565b610f6d611fa7565b6000610f77611638565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f9a90613b00565b60006040518083038185875af1925050503d8060008114610fd7576040519150601f19603f3d011682016040523d82523d6000602084013e610fdc565b606091505b5050905080610fea57600080fd5b50565b61100883838360405180602001604052806000815250611b0d565b505050565b6060600061101a83611537565b905060008167ffffffffffffffff811115611038576110376143eb565b5b6040519080825280602002602001820160405280156110665781602001602082028036833780820191505090505b50905060006001905060005b83811080156110835750600d548211155b1561110c57600061109383611485565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110f857828483815181106110dd576110dc6143bc565b5b60200260200101818152505081806110f4906142b5565b9250505b8280611103906142b5565b93505050611072565b82945050505050919050565b611120611fa7565b80600c8190555050565b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060029054906101000a900460ff166111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c190613d3b565b60405180910390fd5b60008160ff1611611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790613dbb565b60405180910390fd5b600d548160ff1661122160076120e6565b61122b919061401e565b111561126c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126390613e5b565b60405180910390fd5b60005b8160ff168110156112aa5761128460076123f0565b6112973361129260076120e6565b612406565b80806112a2906142b5565b91505061126f565b5080601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611306919061415b565b92506101000a81548160ff021916908360ff16021790555050565b611329611fa7565b80600a908051906020019061133f929190613019565b5050565b601060019054906101000a900460ff1681565b6009805461136390614252565b80601f016020809104026020016040519081016040528092919081815260200182805461138f90614252565b80156113dc5780601f106113b1576101008083540402835291602001916113dc565b820191906000526020600020905b8154815290600101906020018083116113bf57829003601f168201915b505050505081565b601060009054906101000a900460ff1681565b6008805461140490614252565b80601f016020809104026020016040519081016040528092919081815260200182805461143090614252565b801561147d5780601f106114525761010080835404028352916020019161147d565b820191906000526020600020905b81548152906001019060200180831161146057829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590613ddb565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613cdb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f7611fa7565b6116016000612424565b565b61160b611fa7565b8060089080519060200190611621929190613019565b5050565b601060029054906101000a900460ff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b60606001805461167790614252565b80601f01602080910402602001604051908101604052809291908181526020018280546116a390614252565b80156116f05780601f106116c5576101008083540402835291602001916116f0565b820191906000526020600020905b8154815290600101906020018083116116d357829003601f168201915b5050505050905090565b8060008111801561170d5750600e548111155b61174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174390613c7b565b60405180910390fd5b600d548161175a60076120e6565b611764919061401e565b11156117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90613e1b565b60405180910390fd5b601060009054906101000a900460ff16156117f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ec90613d7b565b60405180910390fd5b600f54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611843919061401e565b1115611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90613bdb565b60405180910390fd5b81601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d3919061401e565b925050819055506118e433836124ea565b5050565b6118fa6118f3612025565b838361252a565b5050565b611906611fa7565b60005b82829050811015611a68576119d783838381811061192a576119296143bc565b5b905060200201602081019061193f9190613270565b6119d2600b805461194f90614252565b80601f016020809104026020016040519081016040528092919081815260200182805461197b90614252565b80156119c85780601f1061199d576101008083540402835291602001916119c8565b820191906000526020600020905b8154815290600101906020018083116119ab57829003601f168201915b5050505050612697565b610ecc565b601160008585858181106119ee576119ed6143bc565b5b9050602002016020810190611a039190613270565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055508080611a60906142b5565b915050611909565b505050565b600a8054611a7a90614252565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa690614252565b8015611af35780601f10611ac857610100808354040283529160200191611af3565b820191906000526020600020905b815481529060010190602001808311611ad657829003601f168201915b505050505081565b611b03611fa7565b80600e8190555050565b611b1e611b18612025565b836120f4565b611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490613e3b565b60405180910390fd5b611b6984848484612965565b50505050565b6060611b7a826129c1565b611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090613d9b565b60405180910390fd5b60001515601060019054906101000a900460ff1615151415611c6757600a8054611be290614252565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0e90614252565b8015611c5b5780601f10611c3057610100808354040283529160200191611c5b565b820191906000526020600020905b815481529060010190602001808311611c3e57829003601f168201915b50505050509050611cc3565b6000611c71612a2d565b90506000815111611c915760405180602001604052806000815250611cbf565b80611c9b84612abf565b6009604051602001611caf93929190613acf565b6040516020818303038152906040525b9150505b919050565b600d5481565b611cd6611fa7565b80601060026101000a81548160ff02191690831515021790555050565b611cfb611fa7565b80601060016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600081118015611dbf5750600e548111155b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613c7b565b60405180910390fd5b600d5481611e0c60076120e6565b611e16919061401e565b1115611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613e1b565b60405180910390fd5b611e5f611fa7565b611e6982846124ea565b505050565b611e76611fa7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edd90613c1b565b60405180910390fd5b611eef81612424565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611f65816129c1565b611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90613ddb565b60405180910390fd5b50565b611faf612025565b73ffffffffffffffffffffffffffffffffffffffff16611fcd611638565b73ffffffffffffffffffffffffffffffffffffffff1614612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613d5b565b60405180910390fd5b565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120a083611485565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b60008061210083611485565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061214257506121418185611d18565b5b8061218057508373ffffffffffffffffffffffffffffffffffffffff1661216884610bd6565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121a982611485565b73ffffffffffffffffffffffffffffffffffffffff16146121ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f690613c3b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690613c9b565b60405180910390fd5b61227a838383612c20565b61228560008261202d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d59190614127565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232c919061401e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46123eb838383612c25565b505050565b6001816000016000828254019250508190555050565b612420828260405180602001604052806000815250612c2a565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015612525576124ff60076123f0565b6125128361250d60076120e6565b612406565b808061251d906142b5565b9150506124ed565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259090613cbb565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161268a9190613b9e565b60405180910390a3505050565b600080829050600080806000600290505b602a81101561295857610100846126bf91906140a5565b93508481815181106126d4576126d36143bc565b5b602001015160f81c60f81b60f81c60ff169250846001826126f5919061401e565b81518110612706576127056143bc565b5b602001015160f81c60f81b60f81c60ff16915060618373ffffffffffffffffffffffffffffffffffffffff1610158015612757575060668373ffffffffffffffffffffffffffffffffffffffff1611155b156127705760578361276991906140f3565b925061281c565b60418373ffffffffffffffffffffffffffffffffffffffff16101580156127ae575060468373ffffffffffffffffffffffffffffffffffffffff1611155b156127c7576037836127c091906140f3565b925061281b565b60308373ffffffffffffffffffffffffffffffffffffffff1610158015612805575060398373ffffffffffffffffffffffffffffffffffffffff1611155b1561281a5760308361281791906140f3565b92505b5b5b60618273ffffffffffffffffffffffffffffffffffffffff161015801561285a575060668273ffffffffffffffffffffffffffffffffffffffff1611155b156128735760578261286c91906140f3565b915061291f565b60418273ffffffffffffffffffffffffffffffffffffffff16101580156128b1575060468273ffffffffffffffffffffffffffffffffffffffff1611155b156128ca576037826128c391906140f3565b915061291e565b60308273ffffffffffffffffffffffffffffffffffffffff1610158015612908575060398273ffffffffffffffffffffffffffffffffffffffff1611155b1561291d5760308261291a91906140f3565b91505b5b5b8160108461292d91906140a5565b6129379190613fd4565b846129429190613fd4565b9350600281612951919061401e565b90506126a8565b5082945050505050919050565b612970848484612189565b61297c84848484612c85565b6129bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b290613bfb565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060088054612a3c90614252565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6890614252565b8015612ab55780601f10612a8a57610100808354040283529160200191612ab5565b820191906000526020600020905b815481529060010190602001808311612a9857829003601f168201915b5050505050905090565b60606000821415612b07576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c1b565b600082905060005b60008214612b39578080612b22906142b5565b915050600a82612b329190614074565b9150612b0f565b60008167ffffffffffffffff811115612b5557612b546143eb565b5b6040519080825280601f01601f191660200182016040528015612b875781602001600182028036833780820191505090505b5090505b60008514612c1457600182612ba09190614127565b9150600a85612baf91906142fe565b6030612bbb919061401e565b60f81b818381518110612bd157612bd06143bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c0d9190614074565b9450612b8b565b8093505050505b919050565b505050565b505050565b612c348383612e1c565b612c416000848484612c85565b612c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7790613bfb565b60405180910390fd5b505050565b6000612ca68473ffffffffffffffffffffffffffffffffffffffff16612ff6565b15612e0f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ccf612025565b8786866040518563ffffffff1660e01b8152600401612cf19493929190613b30565b602060405180830381600087803b158015612d0b57600080fd5b505af1925050508015612d3c57506040513d601f19601f82011682018060405250810190612d3991906134da565b60015b612dbf573d8060008114612d6c576040519150601f19603f3d011682016040523d82523d6000602084013e612d71565b606091505b50600081511415612db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dae90613bfb565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e14565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8390613d1b565b60405180910390fd5b612e95816129c1565b15612ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecc90613c5b565b60405180910390fd5b612ee160008383612c20565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f31919061401e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ff260008383612c25565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461302590614252565b90600052602060002090601f016020900481019282613047576000855561308e565b82601f1061306057805160ff191683800117855561308e565b8280016001018555821561308e579182015b8281111561308d578251825591602001919060010190613072565b5b50905061309b919061309f565b5090565b5b808211156130b85760008160009055506001016130a0565b5090565b60006130cf6130ca84613ed6565b613eb1565b9050828152602081018484840111156130eb576130ea614429565b5b6130f6848285614210565b509392505050565b600061311161310c84613f07565b613eb1565b90508281526020810184848401111561312d5761312c614429565b5b613138848285614210565b509392505050565b60008135905061314f8161494b565b92915050565b60008083601f84011261316b5761316a61441f565b5b8235905067ffffffffffffffff8111156131885761318761441a565b5b6020830191508360208202830111156131a4576131a3614424565b5b9250929050565b6000813590506131ba81614962565b92915050565b6000813590506131cf81614979565b92915050565b6000815190506131e481614979565b92915050565b600082601f8301126131ff576131fe61441f565b5b813561320f8482602086016130bc565b91505092915050565b600082601f83011261322d5761322c61441f565b5b813561323d8482602086016130fe565b91505092915050565b60008135905061325581614990565b92915050565b60008151905061326a81614990565b92915050565b60006020828403121561328657613285614433565b5b600061329484828501613140565b91505092915050565b600080604083850312156132b4576132b3614433565b5b60006132c285828601613140565b92505060206132d385828601613140565b9150509250929050565b6000806000606084860312156132f6576132f5614433565b5b600061330486828701613140565b935050602061331586828701613140565b925050604061332686828701613246565b9150509250925092565b6000806000806080858703121561334a57613349614433565b5b600061335887828801613140565b945050602061336987828801613140565b935050604061337a87828801613246565b925050606085013567ffffffffffffffff81111561339b5761339a61442e565b5b6133a7878288016131ea565b91505092959194509250565b600080604083850312156133ca576133c9614433565b5b60006133d885828601613140565b92505060206133e9858286016131ab565b9150509250929050565b6000806040838503121561340a57613409614433565b5b600061341885828601613140565b925050602061342985828601613246565b9150509250929050565b6000806020838503121561344a57613449614433565b5b600083013567ffffffffffffffff8111156134685761346761442e565b5b61347485828601613155565b92509250509250929050565b60006020828403121561349657613495614433565b5b60006134a4848285016131ab565b91505092915050565b6000602082840312156134c3576134c2614433565b5b60006134d1848285016131c0565b91505092915050565b6000602082840312156134f0576134ef614433565b5b60006134fe848285016131d5565b91505092915050565b60006020828403121561351d5761351c614433565b5b600082013567ffffffffffffffff81111561353b5761353a61442e565b5b61354784828501613218565b91505092915050565b60006020828403121561356657613565614433565b5b600061357484828501613246565b91505092915050565b60006020828403121561359357613592614433565b5b60006135a18482850161325b565b91505092915050565b600080604083850312156135c1576135c0614433565b5b60006135cf85828601613246565b92505060206135e085828601613140565b9150509250929050565b60006135f68383613aa2565b60208301905092915050565b61360b8161418f565b82525050565b600061361c82613f5d565b6136268185613f8b565b935061363183613f38565b8060005b8381101561366257815161364988826135ea565b975061365483613f7e565b925050600181019050613635565b5085935050505092915050565b613678816141a1565b82525050565b600061368982613f68565b6136938185613f9c565b93506136a381856020860161421f565b6136ac81614438565b840191505092915050565b60006136c282613f73565b6136cc8185613fb8565b93506136dc81856020860161421f565b6136e581614438565b840191505092915050565b60006136fb82613f73565b6137058185613fc9565b935061371581856020860161421f565b80840191505092915050565b6000815461372e81614252565b6137388186613fc9565b94506001821660008114613753576001811461376457613797565b60ff19831686528186019350613797565b61376d85613f48565b60005b8381101561378f57815481890152600182019150602081019050613770565b838801955050505b50505092915050565b60006137ad601283613fb8565b91506137b882614449565b602082019050919050565b60006137d0603283613fb8565b91506137db82614472565b604082019050919050565b60006137f3602683613fb8565b91506137fe826144c1565b604082019050919050565b6000613816602583613fb8565b915061382182614510565b604082019050919050565b6000613839601c83613fb8565b91506138448261455f565b602082019050919050565b600061385c601483613fb8565b915061386782614588565b602082019050919050565b600061387f602483613fb8565b915061388a826145b1565b604082019050919050565b60006138a2601983613fb8565b91506138ad82614600565b602082019050919050565b60006138c5602983613fb8565b91506138d082614629565b604082019050919050565b60006138e8603e83613fb8565b91506138f382614678565b604082019050919050565b600061390b602083613fb8565b9150613916826146c7565b602082019050919050565b600061392e601383613fb8565b9150613939826146f0565b602082019050919050565b6000613951602083613fb8565b915061395c82614719565b602082019050919050565b6000613974601783613fb8565b915061397f82614742565b602082019050919050565b6000613997602f83613fb8565b91506139a28261476b565b604082019050919050565b60006139ba604483613fb8565b91506139c5826147ba565b606082019050919050565b60006139dd601883613fb8565b91506139e88261482f565b602082019050919050565b6000613a00602183613fb8565b9150613a0b82614858565b604082019050919050565b6000613a23600083613fad565b9150613a2e826148a7565b600082019050919050565b6000613a46601483613fb8565b9150613a51826148aa565b602082019050919050565b6000613a69602e83613fb8565b9150613a74826148d3565b604082019050919050565b6000613a8c601d83613fb8565b9150613a9782614922565b602082019050919050565b613aab816141f9565b82525050565b613aba816141f9565b82525050565b613ac981614203565b82525050565b6000613adb82866136f0565b9150613ae782856136f0565b9150613af38284613721565b9150819050949350505050565b6000613b0b82613a16565b9150819050919050565b6000602082019050613b2a6000830184613602565b92915050565b6000608082019050613b456000830187613602565b613b526020830186613602565b613b5f6040830185613ab1565b8181036060830152613b71818461367e565b905095945050505050565b60006020820190508181036000830152613b968184613611565b905092915050565b6000602082019050613bb3600083018461366f565b92915050565b60006020820190508181036000830152613bd381846136b7565b905092915050565b60006020820190508181036000830152613bf4816137a0565b9050919050565b60006020820190508181036000830152613c14816137c3565b9050919050565b60006020820190508181036000830152613c34816137e6565b9050919050565b60006020820190508181036000830152613c5481613809565b9050919050565b60006020820190508181036000830152613c748161382c565b9050919050565b60006020820190508181036000830152613c948161384f565b9050919050565b60006020820190508181036000830152613cb481613872565b9050919050565b60006020820190508181036000830152613cd481613895565b9050919050565b60006020820190508181036000830152613cf4816138b8565b9050919050565b60006020820190508181036000830152613d14816138db565b9050919050565b60006020820190508181036000830152613d34816138fe565b9050919050565b60006020820190508181036000830152613d5481613921565b9050919050565b60006020820190508181036000830152613d7481613944565b9050919050565b60006020820190508181036000830152613d9481613967565b9050919050565b60006020820190508181036000830152613db48161398a565b9050919050565b60006020820190508181036000830152613dd4816139ad565b9050919050565b60006020820190508181036000830152613df4816139d0565b9050919050565b60006020820190508181036000830152613e14816139f3565b9050919050565b60006020820190508181036000830152613e3481613a39565b9050919050565b60006020820190508181036000830152613e5481613a5c565b9050919050565b60006020820190508181036000830152613e7481613a7f565b9050919050565b6000602082019050613e906000830184613ab1565b92915050565b6000602082019050613eab6000830184613ac0565b92915050565b6000613ebb613ecc565b9050613ec78282614284565b919050565b6000604051905090565b600067ffffffffffffffff821115613ef157613ef06143eb565b5b613efa82614438565b9050602081019050919050565b600067ffffffffffffffff821115613f2257613f216143eb565b5b613f2b82614438565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613fdf826141d9565b9150613fea836141d9565b92508273ffffffffffffffffffffffffffffffffffffffff038211156140135761401261432f565b5b828201905092915050565b6000614029826141f9565b9150614034836141f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140695761406861432f565b5b828201905092915050565b600061407f826141f9565b915061408a836141f9565b92508261409a5761409961435e565b5b828204905092915050565b60006140b0826141d9565b91506140bb836141d9565b92508173ffffffffffffffffffffffffffffffffffffffff04831182151516156140e8576140e761432f565b5b828202905092915050565b60006140fe826141d9565b9150614109836141d9565b92508282101561411c5761411b61432f565b5b828203905092915050565b6000614132826141f9565b915061413d836141f9565b9250828210156141505761414f61432f565b5b828203905092915050565b600061416682614203565b915061417183614203565b9250828210156141845761418361432f565b5b828203905092915050565b600061419a826141d9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561423d578082015181840152602081019050614222565b8381111561424c576000848401525b50505050565b6000600282049050600182168061426a57607f821691505b6020821081141561427e5761427d61438d565b5b50919050565b61428d82614438565b810181811067ffffffffffffffff821117156142ac576142ab6143eb565b5b80604052505050565b60006142c0826141f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142f3576142f261432f565b5b600182019050919050565b6000614309826141f9565b9150614314836141f9565b9250826143245761432361435e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f457863656564206d6178427957616c6c65740000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436c61696d206973206e6f742061637469766500000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f57616c6c657420686173206e6f2067656e20746f6b656e732c206973206e6f7460008201527f20696e20736e617073686f74206f722068617320616c726561647920636c616960208201527f6d65642100000000000000000000000000000000000000000000000000000000604082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f436c61696d20776f756c6420657863656564206d617820746f6b656e73000000600082015250565b6149548161418f565b811461495f57600080fd5b50565b61496b816141a1565b811461497657600080fd5b50565b614982816141ad565b811461498d57600080fd5b50565b614999816141f9565b81146149a457600080fd5b5056fea2646970667358221220026e2b8a4b8d0a4279710098f927fee5b7b0a0c9b3aa97099fa2f959c6930ab064736f6c63430008070033

Deployed Bytecode Sourcemap

40941:6097:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27660:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28587:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30100:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43729:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29617:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41588:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41208:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41289:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44498:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44604:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42002:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30800:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44146:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46018:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41400:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45875:137;;;;;;;;;;;;;:::i;:::-;;31207:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42586:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43930:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46184:531;;;:::i;:::-;;44254:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41467:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41134:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41437:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41101:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28298:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28029:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6950:103;;;;;;;;;;;;;:::i;:::-;;44392:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41499:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6302:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41358:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28756:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42097:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30343:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45627:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41172:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44010:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31463:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43227:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41323:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44687:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43843:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30569:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42425:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7208:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27660:305;27762:4;27814:25;27799:40;;;:11;:40;;;;:105;;;;27871:33;27856:48;;;:11;:48;;;;27799:105;:158;;;;27921:36;27945:11;27921:23;:36::i;:::-;27799:158;27779:178;;27660:305;;;:::o;28587:100::-;28641:13;28674:5;28667:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28587:100;:::o;30100:171::-;30176:7;30196:23;30211:7;30196:14;:23::i;:::-;30239:15;:24;30255:7;30239:24;;;;;;;;;;;;;;;;;;;;;30232:31;;30100:171;;;:::o;43729:108::-;6188:13;:11;:13::i;:::-;43819:12:::1;43805:11;:26;;;;;;;;;;;;:::i;:::-;;43729:108:::0;:::o;29617:417::-;29698:13;29714:23;29729:7;29714:14;:23::i;:::-;29698:39;;29762:5;29756:11;;:2;:11;;;;29748:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29856:5;29840:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29865:37;29882:5;29889:12;:10;:12::i;:::-;29865:16;:37::i;:::-;29840:62;29818:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;30005:21;30014:2;30018:7;30005:8;:21::i;:::-;29687:347;29617:417;;:::o;41588:49::-;;;;;;;;;;;;;;;;;:::o;41208:72::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41289:29::-;;;;:::o;44498:100::-;6188:13;:11;:13::i;:::-;44582:10:::1;44570:9;:22;;;;;;;;;;;;:::i;:::-;;44498:100:::0;:::o;44604:77::-;6188:13;:11;:13::i;:::-;44669:6:::1;44660;;:15;;;;;;;;;;;;;;;;;;44604:77:::0;:::o;42002:89::-;42046:7;42069:16;:6;:14;:16::i;:::-;42062:23;;42002:89;:::o;30800:336::-;30995:41;31014:12;:10;:12::i;:::-;31028:7;30995:18;:41::i;:::-;30987:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31100:28;31110:4;31116:2;31120:7;31100:9;:28::i;:::-;30800:336;;;:::o;44146:102::-;6188:13;:11;:13::i;:::-;44230:12:::1;44216:11;:26;;;;44146:102:::0;:::o;46018:160::-;46107:5;46142:9;46134:28;;;46163:7;46134:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46121:51;;46018:160;;;;:::o;41400:30::-;;;;:::o;45875:137::-;6188:13;:11;:13::i;:::-;45920:7:::1;45941;:5;:7::i;:::-;45933:21;;45962;45933:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45919:69;;;46003:2;45995:11;;;::::0;::::1;;45912:100;45875:137::o:0;31207:185::-;31345:39;31362:4;31368:2;31372:7;31345:39;;;;;;;;;;;;:16;:39::i;:::-;31207:185;;;:::o;42586:635::-;42661:16;42689:23;42715:17;42725:6;42715:9;:17::i;:::-;42689:43;;42739:30;42786:15;42772:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42739:63;;42809:22;42834:1;42809:26;;42842:23;42878:309;42903:15;42885;:33;:64;;;;;42940:9;;42922:14;:27;;42885:64;42878:309;;;42960:25;42988:23;42996:14;42988:7;:23::i;:::-;42960:51;;43047:6;43026:27;;:17;:27;;;43022:131;;;43099:14;43066:13;43080:15;43066:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;43126:17;;;;;:::i;:::-;;;;43022:131;43163:16;;;;;:::i;:::-;;;;42951:236;42878:309;;;43202:13;43195:20;;;;;;42586:635;;;:::o;43930:74::-;6188:13;:11;:13::i;:::-;43993:5:::1;43986:4;:12;;;;43930:74:::0;:::o;46184:531::-;46222:20;46245:10;:22;46256:10;46245:22;;;;;;;;;;;;;;;;;;;;;;;;;46222:45;;46284:13;;;;;;;;;;;46276:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;46353:1;46336:14;:18;;;46328:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;46479:9;;46461:14;46442:33;;:16;:6;:14;:16::i;:::-;:33;;;;:::i;:::-;:46;;46434:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;46536:9;46531:132;46555:14;46551:18;;:1;:18;46531:132;;;46587:18;:6;:16;:18::i;:::-;46616:39;46626:10;46638:16;:6;:14;:16::i;:::-;46616:9;:39::i;:::-;46571:3;;;;;:::i;:::-;;;;46531:132;;;;46695:14;46669:10;:22;46680:10;46669:22;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46215:500;46184:531::o;44254:132::-;6188:13;:11;:13::i;:::-;44362:18:::1;44342:17;:38;;;;;;;;;;;;:::i;:::-;;44254:132:::0;:::o;41467:27::-;;;;;;;;;;;;;:::o;41134:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41437:25::-;;;;;;;;;;;;;:::o;41101:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28298:222::-;28370:7;28390:13;28406:7;:16;28414:7;28406:16;;;;;;;;;;;;;;;;;;;;;28390:32;;28458:1;28441:19;;:5;:19;;;;28433:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28507:5;28500:12;;;28298:222;;;:::o;28029:207::-;28101:7;28146:1;28129:19;;:5;:19;;;;28121:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28212:9;:16;28222:5;28212:16;;;;;;;;;;;;;;;;28205:23;;28029:207;;;:::o;6950:103::-;6188:13;:11;:13::i;:::-;7015:30:::1;7042:1;7015:18;:30::i;:::-;6950:103::o:0;44392:100::-;6188:13;:11;:13::i;:::-;44476:10:::1;44464:9;:22;;;;;;;;;;;;:::i;:::-;;44392:100:::0;:::o;41499:33::-;;;;;;;;;;;;;:::o;6302:87::-;6348:7;6375:6;;;;;;;;;;;6368:13;;6302:87;:::o;41358:37::-;;;;:::o;28756:104::-;28812:13;28845:7;28838:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28756:104;:::o;42097:320::-;42162:11;41836:1;41822:11;:15;:52;;;;;41856:18;;41841:11;:33;;41822:52;41814:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41948:9;;41933:11;41914:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41906:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42191:6:::1;;;;;;;;;;;42190:7;42182:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;42284:11;;42254:14;:26;42269:10;42254:26;;;;;;;;;;;;;;;;42240:11;:40;;;;:::i;:::-;:55;;42232:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;42357:11;42327:14;:26;42342:10;42327:26;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;42377:34;42387:10;42399:11;42377:9;:34::i;:::-;42097:320:::0;;:::o;30343:155::-;30438:52;30457:12;:10;:12::i;:::-;30471:8;30481;30438:18;:52::i;:::-;30343:155;;:::o;45627:242::-;6188:13;:11;:13::i;:::-;45716:9:::1;45711:153;45735:9;;:16;;45731:1;:20;45711:153;;;45796:60;45819:9;;45829:1;45819:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45833:22;45843:11;45833:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:22::i;:::-;45796;:60::i;:::-;45769:10;:24;45780:9;;45790:1;45780:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;45769:24;;;;;;;;;;;;;;;;:87;;;;;;;;;;;;;;;;;;45753:3;;;;;:::i;:::-;;;;45711:153;;;;45627:242:::0;;:::o;41172:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44010:130::-;6188:13;:11;:13::i;:::-;44115:19:::1;44094:18;:40;;;;44010:130:::0;:::o;31463:323::-;31637:41;31656:12;:10;:12::i;:::-;31670:7;31637:18;:41::i;:::-;31629:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;31740:38;31754:4;31760:2;31764:7;31773:4;31740:13;:38::i;:::-;31463:323;;;;:::o;43227:496::-;43326:13;43367:17;43375:8;43367:7;:17::i;:::-;43351:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;43474:5;43462:17;;:8;;;;;;;;;;;:17;;;43458:64;;;43497:17;43490:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43458:64;43532:28;43563:10;:8;:10::i;:::-;43532:41;;43618:1;43593:14;43587:28;:32;:130;;;;;;;;;;;;;;;;;43655:14;43671:19;:8;:17;:19::i;:::-;43692:9;43638:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43587:130;43580:137;;;43227:496;;;;:::o;41323:30::-;;;;:::o;44687:91::-;6188:13;:11;:13::i;:::-;44766:6:::1;44750:13;;:22;;;;;;;;;;;;;;;;;;44687:91:::0;:::o;43843:81::-;6188:13;:11;:13::i;:::-;43912:6:::1;43901:8;;:17;;;;;;;;;;;;;;;;;;43843:81:::0;:::o;30569:164::-;30666:4;30690:18;:25;30709:5;30690:25;;;;;;;;;;;;;;;:35;30716:8;30690:35;;;;;;;;;;;;;;;;;;;;;;;;;30683:42;;30569:164;;;;:::o;42425:155::-;42511:11;41836:1;41822:11;:15;:52;;;;;41856:18;;41841:11;:33;;41822:52;41814:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41948:9;;41933:11;41914:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41906:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6188:13:::1;:11;:13::i;:::-;42541:33:::2;42551:9;42562:11;42541:9;:33::i;:::-;42425:155:::0;;;:::o;7208:201::-;6188:13;:11;:13::i;:::-;7317:1:::1;7297:22;;:8;:22;;;;7289:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7373:28;7392:8;7373:18;:28::i;:::-;7208:201:::0;:::o;20243:157::-;20328:4;20367:25;20352:40;;;:11;:40;;;;20345:47;;20243:157;;;:::o;38075:135::-;38157:16;38165:7;38157;:16::i;:::-;38149:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;38075:135;:::o;6467:132::-;6542:12;:10;:12::i;:::-;6531:23;;:7;:5;:7::i;:::-;:23;;;6523:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6467:132::o;4800:98::-;4853:7;4880:10;4873:17;;4800:98;:::o;37354:174::-;37456:2;37429:15;:24;37445:7;37429:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37512:7;37508:2;37474:46;;37483:23;37498:7;37483:14;:23::i;:::-;37474:46;;;;;;;;;;;;37354:174;;:::o;925:114::-;990:7;1017;:14;;;1010:21;;925:114;;;:::o;33587:264::-;33680:4;33697:13;33713:23;33728:7;33713:14;:23::i;:::-;33697:39;;33766:5;33755:16;;:7;:16;;;:52;;;;33775:32;33792:5;33799:7;33775:16;:32::i;:::-;33755:52;:87;;;;33835:7;33811:31;;:20;33823:7;33811:11;:20::i;:::-;:31;;;33755:87;33747:96;;;33587:264;;;;:::o;36610:625::-;36769:4;36742:31;;:23;36757:7;36742:14;:23::i;:::-;:31;;;36734:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36848:1;36834:16;;:2;:16;;;;36826:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36904:39;36925:4;36931:2;36935:7;36904:20;:39::i;:::-;37008:29;37025:1;37029:7;37008:8;:29::i;:::-;37069:1;37050:9;:15;37060:4;37050:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37098:1;37081:9;:13;37091:2;37081:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37129:2;37110:7;:16;37118:7;37110:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37168:7;37164:2;37149:27;;37158:4;37149:27;;;;;;;;;;;;37189:38;37209:4;37215:2;37219:7;37189:19;:38::i;:::-;36610:625;;;:::o;1047:127::-;1154:1;1136:7;:14;;;:19;;;;;;;;;;;1047:127;:::o;34193:110::-;34269:26;34279:2;34283:7;34269:26;;;;;;;;;;;;:9;:26::i;:::-;34193:110;;:::o;7569:191::-;7643:16;7662:6;;;;;;;;;;;7643:25;;7688:8;7679:6;;:17;;;;;;;;;;;;;;;;;;7743:8;7712:40;;7733:8;7712:40;;;;;;;;;;;;7632:128;7569:191;:::o;46721:204::-;46801:9;46796:124;46820:11;46816:1;:15;46796:124;;;46847:18;:6;:16;:18::i;:::-;46874:38;46884:9;46895:16;:6;:14;:16::i;:::-;46874:9;:38::i;:::-;46833:3;;;;;:::i;:::-;;;;46796:124;;;;46721:204;;:::o;37671:315::-;37826:8;37817:17;;:5;:17;;;;37809:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37913:8;37875:18;:25;37894:5;37875:25;;;;;;;;;;;;;;;:35;37901:8;37875:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37959:8;37937:41;;37952:5;37937:41;;;37969:8;37937:41;;;;;;:::i;:::-;;;;;;;;37671:315;;;:::o;44784:837::-;44844:22;44875:16;44900:2;44875:28;;44910:13;44934:10;44951;44973:6;44982:1;44973:10;;44968:622;44989:10;44985:1;:14;44968:622;;;45029:3;45020:12;;;;;:::i;:::-;;;45062:3;45066:1;45062:6;;;;;;;;:::i;:::-;;;;;;;;;;45056:13;;45048:22;;45043:27;;45100:3;45108:1;45104;:5;;;;:::i;:::-;45100:10;;;;;;;;:::i;:::-;;;;;;;;;;45094:17;;45086:26;;45081:31;;45134:2;45128;:8;;;;45127:25;;;;;45148:3;45142:2;:9;;;;45127:25;45123:208;;;45175:2;45169:8;;;;;:::i;:::-;;;45123:208;;;45206:2;45200;:8;;;;45199:24;;;;;45220:2;45214;:8;;;;45199:24;45195:136;;;45246:2;45240:8;;;;;:::i;:::-;;;45195:136;;;45277:2;45271;:8;;;;45270:24;;;;;45291:2;45285;:8;;;;45270:24;45266:65;;;45317:2;45311:8;;;;;:::i;:::-;;;45266:65;45195:136;45123:208;45352:2;45346;:8;;;;45345:25;;;;;45366:3;45360:2;:9;;;;45345:25;45341:208;;;45393:2;45387:8;;;;;:::i;:::-;;;45341:208;;;45424:2;45418;:8;;;;45417:24;;;;;45438:2;45432;:8;;;;45417:24;45413:136;;;45464:2;45458:8;;;;;:::i;:::-;;;45413:136;;;45495:2;45489;:8;;;;45488:24;;;;;45509:2;45503;:8;;;;45488:24;45484:65;;;45535:2;45529:8;;;;;:::i;:::-;;;45484:65;45413:136;45341:208;45579:2;45574;45569;:7;;;;:::i;:::-;:12;;;;:::i;:::-;45559:23;;;;;:::i;:::-;;;45006:1;45001:6;;;;;:::i;:::-;;;44968:622;;;;45611:5;45596:21;;;;;;44784:837;;;:::o;32667:313::-;32823:28;32833:4;32839:2;32843:7;32823:9;:28::i;:::-;32870:47;32893:4;32899:2;32903:7;32912:4;32870:22;:47::i;:::-;32862:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32667:313;;;;:::o;33293:127::-;33358:4;33410:1;33382:30;;:7;:16;33390:7;33382:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33375:37;;33293:127;;;:::o;46931:104::-;46991:13;47020:9;47013:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46931:104;:::o;2001:723::-;2057:13;2287:1;2278:5;:10;2274:53;;;2305:10;;;;;;;;;;;;;;;;;;;;;2274:53;2337:12;2352:5;2337:20;;2368:14;2393:78;2408:1;2400:4;:9;2393:78;;2426:8;;;;;:::i;:::-;;;;2457:2;2449:10;;;;;:::i;:::-;;;2393:78;;;2481:19;2513:6;2503:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:39;;2531:154;2547:1;2538:5;:10;2531:154;;2575:1;2565:11;;;;;:::i;:::-;;;2642:2;2634:5;:10;;;;:::i;:::-;2621:2;:24;;;;:::i;:::-;2608:39;;2591:6;2598;2591:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2671:2;2662:11;;;;;:::i;:::-;;;2531:154;;;2709:6;2695:21;;;;;2001:723;;;;:::o;40199:126::-;;;;:::o;40710:125::-;;;;:::o;34530:319::-;34659:18;34665:2;34669:7;34659:5;:18::i;:::-;34710:53;34741:1;34745:2;34749:7;34758:4;34710:22;:53::i;:::-;34688:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;34530:319;;;:::o;38774:853::-;38928:4;38949:15;:2;:13;;;:15::i;:::-;38945:675;;;39001:2;38985:36;;;39022:12;:10;:12::i;:::-;39036:4;39042:7;39051:4;38985:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38981:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39243:1;39226:6;:13;:18;39222:328;;;39269:60;;;;;;;;;;:::i;:::-;;;;;;;;39222:328;39500:6;39494:13;39485:6;39481:2;39477:15;39470:38;38981:584;39117:41;;;39107:51;;;:6;:51;;;;39100:58;;;;;38945:675;39604:4;39597:11;;38774:853;;;;;;;:::o;35185:439::-;35279:1;35265:16;;:2;:16;;;;35257:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35338:16;35346:7;35338;:16::i;:::-;35337:17;35329:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35400:45;35429:1;35433:2;35437:7;35400:20;:45::i;:::-;35475:1;35458:9;:13;35468:2;35458:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35506:2;35487:7;:16;35495:7;35487:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35551:7;35547:2;35526:33;;35543:1;35526:33;;;;;;;;;;;;35572:44;35600:1;35604:2;35608:7;35572:19;:44::i;:::-;35185:439;;:::o;9053:326::-;9113:4;9370:1;9348:7;:19;;;:23;9341:30;;9053:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:143::-;2925:5;2956:6;2950:13;2941:22;;2972:33;2999:5;2972:33;:::i;:::-;2868:143;;;;:::o;3017:329::-;3076:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:119;;;3131:79;;:::i;:::-;3093:119;3251:1;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3222:117;3017:329;;;;:::o;3352:474::-;3420:6;3428;3477:2;3465:9;3456:7;3452:23;3448:32;3445:119;;;3483:79;;:::i;:::-;3445:119;3603:1;3628:53;3673:7;3664:6;3653:9;3649:22;3628:53;:::i;:::-;3618:63;;3574:117;3730:2;3756:53;3801:7;3792:6;3781:9;3777:22;3756:53;:::i;:::-;3746:63;;3701:118;3352:474;;;;;:::o;3832:619::-;3909:6;3917;3925;3974:2;3962:9;3953:7;3949:23;3945:32;3942:119;;;3980:79;;:::i;:::-;3942:119;4100:1;4125:53;4170:7;4161:6;4150:9;4146:22;4125:53;:::i;:::-;4115:63;;4071:117;4227:2;4253:53;4298:7;4289:6;4278:9;4274:22;4253:53;:::i;:::-;4243:63;;4198:118;4355:2;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4326:118;3832:619;;;;;:::o;4457:943::-;4552:6;4560;4568;4576;4625:3;4613:9;4604:7;4600:23;4596:33;4593:120;;;4632:79;;:::i;:::-;4593:120;4752:1;4777:53;4822:7;4813:6;4802:9;4798:22;4777:53;:::i;:::-;4767:63;;4723:117;4879:2;4905:53;4950:7;4941:6;4930:9;4926:22;4905:53;:::i;:::-;4895:63;;4850:118;5007:2;5033:53;5078:7;5069:6;5058:9;5054:22;5033:53;:::i;:::-;5023:63;;4978:118;5163:2;5152:9;5148:18;5135:32;5194:18;5186:6;5183:30;5180:117;;;5216:79;;:::i;:::-;5180:117;5321:62;5375:7;5366:6;5355:9;5351:22;5321:62;:::i;:::-;5311:72;;5106:287;4457:943;;;;;;;:::o;5406:468::-;5471:6;5479;5528:2;5516:9;5507:7;5503:23;5499:32;5496:119;;;5534:79;;:::i;:::-;5496:119;5654:1;5679:53;5724:7;5715:6;5704:9;5700:22;5679:53;:::i;:::-;5669:63;;5625:117;5781:2;5807:50;5849:7;5840:6;5829:9;5825:22;5807:50;:::i;:::-;5797:60;;5752:115;5406:468;;;;;:::o;5880:474::-;5948:6;5956;6005:2;5993:9;5984:7;5980:23;5976:32;5973:119;;;6011:79;;:::i;:::-;5973:119;6131:1;6156:53;6201:7;6192:6;6181:9;6177:22;6156:53;:::i;:::-;6146:63;;6102:117;6258:2;6284:53;6329:7;6320:6;6309:9;6305:22;6284:53;:::i;:::-;6274:63;;6229:118;5880:474;;;;;:::o;6360:559::-;6446:6;6454;6503:2;6491:9;6482:7;6478:23;6474:32;6471:119;;;6509:79;;:::i;:::-;6471:119;6657:1;6646:9;6642:17;6629:31;6687:18;6679:6;6676:30;6673:117;;;6709:79;;:::i;:::-;6673:117;6822:80;6894:7;6885:6;6874:9;6870:22;6822:80;:::i;:::-;6804:98;;;;6600:312;6360:559;;;;;:::o;6925:323::-;6981:6;7030:2;7018:9;7009:7;7005:23;7001:32;6998:119;;;7036:79;;:::i;:::-;6998:119;7156:1;7181:50;7223:7;7214:6;7203:9;7199:22;7181:50;:::i;:::-;7171:60;;7127:114;6925:323;;;;:::o;7254:327::-;7312:6;7361:2;7349:9;7340:7;7336:23;7332:32;7329:119;;;7367:79;;:::i;:::-;7329:119;7487:1;7512:52;7556:7;7547:6;7536:9;7532:22;7512:52;:::i;:::-;7502:62;;7458:116;7254:327;;;;:::o;7587:349::-;7656:6;7705:2;7693:9;7684:7;7680:23;7676:32;7673:119;;;7711:79;;:::i;:::-;7673:119;7831:1;7856:63;7911:7;7902:6;7891:9;7887:22;7856:63;:::i;:::-;7846:73;;7802:127;7587:349;;;;:::o;7942:509::-;8011:6;8060:2;8048:9;8039:7;8035:23;8031:32;8028:119;;;8066:79;;:::i;:::-;8028:119;8214:1;8203:9;8199:17;8186:31;8244:18;8236:6;8233:30;8230:117;;;8266:79;;:::i;:::-;8230:117;8371:63;8426:7;8417:6;8406:9;8402:22;8371:63;:::i;:::-;8361:73;;8157:287;7942:509;;;;:::o;8457:329::-;8516:6;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8457:329;;;;:::o;8792:351::-;8862:6;8911:2;8899:9;8890:7;8886:23;8882:32;8879:119;;;8917:79;;:::i;:::-;8879:119;9037:1;9062:64;9118:7;9109:6;9098:9;9094:22;9062:64;:::i;:::-;9052:74;;9008:128;8792:351;;;;:::o;9149:474::-;9217:6;9225;9274:2;9262:9;9253:7;9249:23;9245:32;9242:119;;;9280:79;;:::i;:::-;9242:119;9400:1;9425:53;9470:7;9461:6;9450:9;9446:22;9425:53;:::i;:::-;9415:63;;9371:117;9527:2;9553:53;9598:7;9589:6;9578:9;9574:22;9553:53;:::i;:::-;9543:63;;9498:118;9149:474;;;;;:::o;9629:179::-;9698:10;9719:46;9761:3;9753:6;9719:46;:::i;:::-;9797:4;9792:3;9788:14;9774:28;;9629:179;;;;:::o;9814:118::-;9901:24;9919:5;9901:24;:::i;:::-;9896:3;9889:37;9814:118;;:::o;9968:732::-;10087:3;10116:54;10164:5;10116:54;:::i;:::-;10186:86;10265:6;10260:3;10186:86;:::i;:::-;10179:93;;10296:56;10346:5;10296:56;:::i;:::-;10375:7;10406:1;10391:284;10416:6;10413:1;10410:13;10391:284;;;10492:6;10486:13;10519:63;10578:3;10563:13;10519:63;:::i;:::-;10512:70;;10605:60;10658:6;10605:60;:::i;:::-;10595:70;;10451:224;10438:1;10435;10431:9;10426:14;;10391:284;;;10395:14;10691:3;10684:10;;10092:608;;;9968:732;;;;:::o;10706:109::-;10787:21;10802:5;10787:21;:::i;:::-;10782:3;10775:34;10706:109;;:::o;10821:360::-;10907:3;10935:38;10967:5;10935:38;:::i;:::-;10989:70;11052:6;11047:3;10989:70;:::i;:::-;10982:77;;11068:52;11113:6;11108:3;11101:4;11094:5;11090:16;11068:52;:::i;:::-;11145:29;11167:6;11145:29;:::i;:::-;11140:3;11136:39;11129:46;;10911:270;10821:360;;;;:::o;11187:364::-;11275:3;11303:39;11336:5;11303:39;:::i;:::-;11358:71;11422:6;11417:3;11358:71;:::i;:::-;11351:78;;11438:52;11483:6;11478:3;11471:4;11464:5;11460:16;11438:52;:::i;:::-;11515:29;11537:6;11515:29;:::i;:::-;11510:3;11506:39;11499:46;;11279:272;11187:364;;;;:::o;11557:377::-;11663:3;11691:39;11724:5;11691:39;:::i;:::-;11746:89;11828:6;11823:3;11746:89;:::i;:::-;11739:96;;11844:52;11889:6;11884:3;11877:4;11870:5;11866:16;11844:52;:::i;:::-;11921:6;11916:3;11912:16;11905:23;;11667:267;11557:377;;;;:::o;11964:845::-;12067:3;12104:5;12098:12;12133:36;12159:9;12133:36;:::i;:::-;12185:89;12267:6;12262:3;12185:89;:::i;:::-;12178:96;;12305:1;12294:9;12290:17;12321:1;12316:137;;;;12467:1;12462:341;;;;12283:520;;12316:137;12400:4;12396:9;12385;12381:25;12376:3;12369:38;12436:6;12431:3;12427:16;12420:23;;12316:137;;12462:341;12529:38;12561:5;12529:38;:::i;:::-;12589:1;12603:154;12617:6;12614:1;12611:13;12603:154;;;12691:7;12685:14;12681:1;12676:3;12672:11;12665:35;12741:1;12732:7;12728:15;12717:26;;12639:4;12636:1;12632:12;12627:17;;12603:154;;;12786:6;12781:3;12777:16;12770:23;;12469:334;;12283:520;;12071:738;;11964:845;;;;:::o;12815:366::-;12957:3;12978:67;13042:2;13037:3;12978:67;:::i;:::-;12971:74;;13054:93;13143:3;13054:93;:::i;:::-;13172:2;13167:3;13163:12;13156:19;;12815:366;;;:::o;13187:::-;13329:3;13350:67;13414:2;13409:3;13350:67;:::i;:::-;13343:74;;13426:93;13515:3;13426:93;:::i;:::-;13544:2;13539:3;13535:12;13528:19;;13187:366;;;:::o;13559:::-;13701:3;13722:67;13786:2;13781:3;13722:67;:::i;:::-;13715:74;;13798:93;13887:3;13798:93;:::i;:::-;13916:2;13911:3;13907:12;13900:19;;13559:366;;;:::o;13931:::-;14073:3;14094:67;14158:2;14153:3;14094:67;:::i;:::-;14087:74;;14170:93;14259:3;14170:93;:::i;:::-;14288:2;14283:3;14279:12;14272:19;;13931:366;;;:::o;14303:::-;14445:3;14466:67;14530:2;14525:3;14466:67;:::i;:::-;14459:74;;14542:93;14631:3;14542:93;:::i;:::-;14660:2;14655:3;14651:12;14644:19;;14303:366;;;:::o;14675:::-;14817:3;14838:67;14902:2;14897:3;14838:67;:::i;:::-;14831:74;;14914:93;15003:3;14914:93;:::i;:::-;15032:2;15027:3;15023:12;15016:19;;14675:366;;;:::o;15047:::-;15189:3;15210:67;15274:2;15269:3;15210:67;:::i;:::-;15203:74;;15286:93;15375:3;15286:93;:::i;:::-;15404:2;15399:3;15395:12;15388:19;;15047:366;;;:::o;15419:::-;15561:3;15582:67;15646:2;15641:3;15582:67;:::i;:::-;15575:74;;15658:93;15747:3;15658:93;:::i;:::-;15776:2;15771:3;15767:12;15760:19;;15419:366;;;:::o;15791:::-;15933:3;15954:67;16018:2;16013:3;15954:67;:::i;:::-;15947:74;;16030:93;16119:3;16030:93;:::i;:::-;16148:2;16143:3;16139:12;16132:19;;15791:366;;;:::o;16163:::-;16305:3;16326:67;16390:2;16385:3;16326:67;:::i;:::-;16319:74;;16402:93;16491:3;16402:93;:::i;:::-;16520:2;16515:3;16511:12;16504:19;;16163:366;;;:::o;16535:::-;16677:3;16698:67;16762:2;16757:3;16698:67;:::i;:::-;16691:74;;16774:93;16863:3;16774:93;:::i;:::-;16892:2;16887:3;16883:12;16876:19;;16535:366;;;:::o;16907:::-;17049:3;17070:67;17134:2;17129:3;17070:67;:::i;:::-;17063:74;;17146:93;17235:3;17146:93;:::i;:::-;17264:2;17259:3;17255:12;17248:19;;16907:366;;;:::o;17279:::-;17421:3;17442:67;17506:2;17501:3;17442:67;:::i;:::-;17435:74;;17518:93;17607:3;17518:93;:::i;:::-;17636:2;17631:3;17627:12;17620:19;;17279:366;;;:::o;17651:::-;17793:3;17814:67;17878:2;17873:3;17814:67;:::i;:::-;17807:74;;17890:93;17979:3;17890:93;:::i;:::-;18008:2;18003:3;17999:12;17992:19;;17651:366;;;:::o;18023:::-;18165:3;18186:67;18250:2;18245:3;18186:67;:::i;:::-;18179:74;;18262:93;18351:3;18262:93;:::i;:::-;18380:2;18375:3;18371:12;18364:19;;18023:366;;;:::o;18395:::-;18537:3;18558:67;18622:2;18617:3;18558:67;:::i;:::-;18551:74;;18634:93;18723:3;18634:93;:::i;:::-;18752:2;18747:3;18743:12;18736:19;;18395:366;;;:::o;18767:::-;18909:3;18930:67;18994:2;18989:3;18930:67;:::i;:::-;18923:74;;19006:93;19095:3;19006:93;:::i;:::-;19124:2;19119:3;19115:12;19108:19;;18767:366;;;:::o;19139:::-;19281:3;19302:67;19366:2;19361:3;19302:67;:::i;:::-;19295:74;;19378:93;19467:3;19378:93;:::i;:::-;19496:2;19491:3;19487:12;19480:19;;19139:366;;;:::o;19511:398::-;19670:3;19691:83;19772:1;19767:3;19691:83;:::i;:::-;19684:90;;19783:93;19872:3;19783:93;:::i;:::-;19901:1;19896:3;19892:11;19885:18;;19511:398;;;:::o;19915:366::-;20057:3;20078:67;20142:2;20137:3;20078:67;:::i;:::-;20071:74;;20154:93;20243:3;20154:93;:::i;:::-;20272:2;20267:3;20263:12;20256:19;;19915:366;;;:::o;20287:::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:::-;20801:3;20822:67;20886:2;20881:3;20822:67;:::i;:::-;20815:74;;20898:93;20987:3;20898:93;:::i;:::-;21016:2;21011:3;21007:12;21000:19;;20659:366;;;:::o;21031:108::-;21108:24;21126:5;21108:24;:::i;:::-;21103:3;21096:37;21031:108;;:::o;21145:118::-;21232:24;21250:5;21232:24;:::i;:::-;21227:3;21220:37;21145:118;;:::o;21269:112::-;21352:22;21368:5;21352:22;:::i;:::-;21347:3;21340:35;21269:112;;:::o;21387:589::-;21612:3;21634:95;21725:3;21716:6;21634:95;:::i;:::-;21627:102;;21746:95;21837:3;21828:6;21746:95;:::i;:::-;21739:102;;21858:92;21946:3;21937:6;21858:92;:::i;:::-;21851:99;;21967:3;21960:10;;21387:589;;;;;;:::o;21982:379::-;22166:3;22188:147;22331:3;22188:147;:::i;:::-;22181:154;;22352:3;22345:10;;21982:379;;;:::o;22367:222::-;22460:4;22498:2;22487:9;22483:18;22475:26;;22511:71;22579:1;22568:9;22564:17;22555:6;22511:71;:::i;:::-;22367:222;;;;:::o;22595:640::-;22790:4;22828:3;22817:9;22813:19;22805:27;;22842:71;22910:1;22899:9;22895:17;22886:6;22842:71;:::i;:::-;22923:72;22991:2;22980:9;22976:18;22967:6;22923:72;:::i;:::-;23005;23073:2;23062:9;23058:18;23049:6;23005:72;:::i;:::-;23124:9;23118:4;23114:20;23109:2;23098:9;23094:18;23087:48;23152:76;23223:4;23214:6;23152:76;:::i;:::-;23144:84;;22595:640;;;;;;;:::o;23241:373::-;23384:4;23422:2;23411:9;23407:18;23399:26;;23471:9;23465:4;23461:20;23457:1;23446:9;23442:17;23435:47;23499:108;23602:4;23593:6;23499:108;:::i;:::-;23491:116;;23241:373;;;;:::o;23620:210::-;23707:4;23745:2;23734:9;23730:18;23722:26;;23758:65;23820:1;23809:9;23805:17;23796:6;23758:65;:::i;:::-;23620:210;;;;:::o;23836:313::-;23949:4;23987:2;23976:9;23972:18;23964:26;;24036:9;24030:4;24026:20;24022:1;24011:9;24007:17;24000:47;24064:78;24137:4;24128:6;24064:78;:::i;:::-;24056:86;;23836:313;;;;:::o;24155:419::-;24321:4;24359:2;24348:9;24344:18;24336:26;;24408:9;24402:4;24398:20;24394:1;24383:9;24379:17;24372:47;24436:131;24562:4;24436:131;:::i;:::-;24428:139;;24155:419;;;:::o;24580:::-;24746:4;24784:2;24773:9;24769:18;24761:26;;24833:9;24827:4;24823:20;24819:1;24808:9;24804:17;24797:47;24861:131;24987:4;24861:131;:::i;:::-;24853:139;;24580:419;;;:::o;25005:::-;25171:4;25209:2;25198:9;25194:18;25186:26;;25258:9;25252:4;25248:20;25244:1;25233:9;25229:17;25222:47;25286:131;25412:4;25286:131;:::i;:::-;25278:139;;25005:419;;;:::o;25430:::-;25596:4;25634:2;25623:9;25619:18;25611:26;;25683:9;25677:4;25673:20;25669:1;25658:9;25654:17;25647:47;25711:131;25837:4;25711:131;:::i;:::-;25703:139;;25430:419;;;:::o;25855:::-;26021:4;26059:2;26048:9;26044:18;26036:26;;26108:9;26102:4;26098:20;26094:1;26083:9;26079:17;26072:47;26136:131;26262:4;26136:131;:::i;:::-;26128:139;;25855:419;;;:::o;26280:::-;26446:4;26484:2;26473:9;26469:18;26461:26;;26533:9;26527:4;26523:20;26519:1;26508:9;26504:17;26497:47;26561:131;26687:4;26561:131;:::i;:::-;26553:139;;26280:419;;;:::o;26705:::-;26871:4;26909:2;26898:9;26894:18;26886:26;;26958:9;26952:4;26948:20;26944:1;26933:9;26929:17;26922:47;26986:131;27112:4;26986:131;:::i;:::-;26978:139;;26705:419;;;:::o;27130:::-;27296:4;27334:2;27323:9;27319:18;27311:26;;27383:9;27377:4;27373:20;27369:1;27358:9;27354:17;27347:47;27411:131;27537:4;27411:131;:::i;:::-;27403:139;;27130:419;;;:::o;27555:::-;27721:4;27759:2;27748:9;27744:18;27736:26;;27808:9;27802:4;27798:20;27794:1;27783:9;27779:17;27772:47;27836:131;27962:4;27836:131;:::i;:::-;27828:139;;27555:419;;;:::o;27980:::-;28146:4;28184:2;28173:9;28169:18;28161:26;;28233:9;28227:4;28223:20;28219:1;28208:9;28204:17;28197:47;28261:131;28387:4;28261:131;:::i;:::-;28253:139;;27980:419;;;:::o;28405:::-;28571:4;28609:2;28598:9;28594:18;28586:26;;28658:9;28652:4;28648:20;28644:1;28633:9;28629:17;28622:47;28686:131;28812:4;28686:131;:::i;:::-;28678:139;;28405:419;;;:::o;28830:::-;28996:4;29034:2;29023:9;29019:18;29011:26;;29083:9;29077:4;29073:20;29069:1;29058:9;29054:17;29047:47;29111:131;29237:4;29111:131;:::i;:::-;29103:139;;28830:419;;;:::o;29255:::-;29421:4;29459:2;29448:9;29444:18;29436:26;;29508:9;29502:4;29498:20;29494:1;29483:9;29479:17;29472:47;29536:131;29662:4;29536:131;:::i;:::-;29528:139;;29255:419;;;:::o;29680:::-;29846:4;29884:2;29873:9;29869:18;29861:26;;29933:9;29927:4;29923:20;29919:1;29908:9;29904:17;29897:47;29961:131;30087:4;29961:131;:::i;:::-;29953:139;;29680:419;;;:::o;30105:::-;30271:4;30309:2;30298:9;30294:18;30286:26;;30358:9;30352:4;30348:20;30344:1;30333:9;30329:17;30322:47;30386:131;30512:4;30386:131;:::i;:::-;30378:139;;30105:419;;;:::o;30530:::-;30696:4;30734:2;30723:9;30719:18;30711:26;;30783:9;30777:4;30773:20;30769:1;30758:9;30754:17;30747:47;30811:131;30937:4;30811:131;:::i;:::-;30803:139;;30530:419;;;:::o;30955:::-;31121:4;31159:2;31148:9;31144:18;31136:26;;31208:9;31202:4;31198:20;31194:1;31183:9;31179:17;31172:47;31236:131;31362:4;31236:131;:::i;:::-;31228:139;;30955:419;;;:::o;31380:::-;31546:4;31584:2;31573:9;31569:18;31561:26;;31633:9;31627:4;31623:20;31619:1;31608:9;31604:17;31597:47;31661:131;31787:4;31661:131;:::i;:::-;31653:139;;31380:419;;;:::o;31805:::-;31971:4;32009:2;31998:9;31994:18;31986:26;;32058:9;32052:4;32048:20;32044:1;32033:9;32029:17;32022:47;32086:131;32212:4;32086:131;:::i;:::-;32078:139;;31805:419;;;:::o;32230:::-;32396:4;32434:2;32423:9;32419:18;32411:26;;32483:9;32477:4;32473:20;32469:1;32458:9;32454:17;32447:47;32511:131;32637:4;32511:131;:::i;:::-;32503:139;;32230:419;;;:::o;32655:::-;32821:4;32859:2;32848:9;32844:18;32836:26;;32908:9;32902:4;32898:20;32894:1;32883:9;32879:17;32872:47;32936:131;33062:4;32936:131;:::i;:::-;32928:139;;32655:419;;;:::o;33080:222::-;33173:4;33211:2;33200:9;33196:18;33188:26;;33224:71;33292:1;33281:9;33277:17;33268:6;33224:71;:::i;:::-;33080:222;;;;:::o;33308:214::-;33397:4;33435:2;33424:9;33420:18;33412:26;;33448:67;33512:1;33501:9;33497:17;33488:6;33448:67;:::i;:::-;33308:214;;;;:::o;33528:129::-;33562:6;33589:20;;:::i;:::-;33579:30;;33618:33;33646:4;33638:6;33618:33;:::i;:::-;33528:129;;;:::o;33663:75::-;33696:6;33729:2;33723:9;33713:19;;33663:75;:::o;33744:307::-;33805:4;33895:18;33887:6;33884:30;33881:56;;;33917:18;;:::i;:::-;33881:56;33955:29;33977:6;33955:29;:::i;:::-;33947:37;;34039:4;34033;34029:15;34021:23;;33744:307;;;:::o;34057:308::-;34119:4;34209:18;34201:6;34198:30;34195:56;;;34231:18;;:::i;:::-;34195:56;34269:29;34291:6;34269:29;:::i;:::-;34261:37;;34353:4;34347;34343:15;34335:23;;34057:308;;;:::o;34371:132::-;34438:4;34461:3;34453:11;;34491:4;34486:3;34482:14;34474:22;;34371:132;;;:::o;34509:141::-;34558:4;34581:3;34573:11;;34604:3;34601:1;34594:14;34638:4;34635:1;34625:18;34617:26;;34509:141;;;:::o;34656:114::-;34723:6;34757:5;34751:12;34741:22;;34656:114;;;:::o;34776:98::-;34827:6;34861:5;34855:12;34845:22;;34776:98;;;:::o;34880:99::-;34932:6;34966:5;34960:12;34950:22;;34880:99;;;:::o;34985:113::-;35055:4;35087;35082:3;35078:14;35070:22;;34985:113;;;:::o;35104:184::-;35203:11;35237:6;35232:3;35225:19;35277:4;35272:3;35268:14;35253:29;;35104:184;;;;:::o;35294:168::-;35377:11;35411:6;35406:3;35399:19;35451:4;35446:3;35442:14;35427:29;;35294:168;;;;:::o;35468:147::-;35569:11;35606:3;35591:18;;35468:147;;;;:::o;35621:169::-;35705:11;35739:6;35734:3;35727:19;35779:4;35774:3;35770:14;35755:29;;35621:169;;;;:::o;35796:148::-;35898:11;35935:3;35920:18;;35796:148;;;;:::o;35950:281::-;35990:3;36009:20;36027:1;36009:20;:::i;:::-;36004:25;;36043:20;36061:1;36043:20;:::i;:::-;36038:25;;36173:1;36129:42;36125:50;36122:1;36119:57;36116:83;;;36179:18;;:::i;:::-;36116:83;36223:1;36220;36216:9;36209:16;;35950:281;;;;:::o;36237:305::-;36277:3;36296:20;36314:1;36296:20;:::i;:::-;36291:25;;36330:20;36348:1;36330:20;:::i;:::-;36325:25;;36484:1;36416:66;36412:74;36409:1;36406:81;36403:107;;;36490:18;;:::i;:::-;36403:107;36534:1;36531;36527:9;36520:16;;36237:305;;;;:::o;36548:185::-;36588:1;36605:20;36623:1;36605:20;:::i;:::-;36600:25;;36639:20;36657:1;36639:20;:::i;:::-;36634:25;;36678:1;36668:35;;36683:18;;:::i;:::-;36668:35;36725:1;36722;36718:9;36713:14;;36548:185;;;;:::o;36739:324::-;36779:7;36802:20;36820:1;36802:20;:::i;:::-;36797:25;;36836:20;36854:1;36836:20;:::i;:::-;36831:25;;37000:1;36956:42;36952:50;36949:1;36946:57;36941:1;36934:9;36927:17;36923:81;36920:107;;;37007:18;;:::i;:::-;36920:107;37055:1;37052;37048:9;37037:20;;36739:324;;;;:::o;37069:191::-;37109:4;37129:20;37147:1;37129:20;:::i;:::-;37124:25;;37163:20;37181:1;37163:20;:::i;:::-;37158:25;;37202:1;37199;37196:8;37193:34;;;37207:18;;:::i;:::-;37193:34;37252:1;37249;37245:9;37237:17;;37069:191;;;;:::o;37266:::-;37306:4;37326:20;37344:1;37326:20;:::i;:::-;37321:25;;37360:20;37378:1;37360:20;:::i;:::-;37355:25;;37399:1;37396;37393:8;37390:34;;;37404:18;;:::i;:::-;37390:34;37449:1;37446;37442:9;37434:17;;37266:191;;;;:::o;37463:185::-;37501:4;37521:18;37537:1;37521:18;:::i;:::-;37516:23;;37553:18;37569:1;37553:18;:::i;:::-;37548:23;;37590:1;37587;37584:8;37581:34;;;37595:18;;:::i;:::-;37581:34;37640:1;37637;37633:9;37625:17;;37463:185;;;;:::o;37654:96::-;37691:7;37720:24;37738:5;37720:24;:::i;:::-;37709:35;;37654:96;;;:::o;37756:90::-;37790:7;37833:5;37826:13;37819:21;37808:32;;37756:90;;;:::o;37852:149::-;37888:7;37928:66;37921:5;37917:78;37906:89;;37852:149;;;:::o;38007:126::-;38044:7;38084:42;38077:5;38073:54;38062:65;;38007:126;;;:::o;38139:77::-;38176:7;38205:5;38194:16;;38139:77;;;:::o;38222:86::-;38257:7;38297:4;38290:5;38286:16;38275:27;;38222:86;;;:::o;38314:154::-;38398:6;38393:3;38388;38375:30;38460:1;38451:6;38446:3;38442:16;38435:27;38314:154;;;:::o;38474:307::-;38542:1;38552:113;38566:6;38563:1;38560:13;38552:113;;;38651:1;38646:3;38642:11;38636:18;38632:1;38627:3;38623:11;38616:39;38588:2;38585:1;38581:10;38576:15;;38552:113;;;38683:6;38680:1;38677:13;38674:101;;;38763:1;38754:6;38749:3;38745:16;38738:27;38674:101;38523:258;38474:307;;;:::o;38787:320::-;38831:6;38868:1;38862:4;38858:12;38848:22;;38915:1;38909:4;38905:12;38936:18;38926:81;;38992:4;38984:6;38980:17;38970:27;;38926:81;39054:2;39046:6;39043:14;39023:18;39020:38;39017:84;;;39073:18;;:::i;:::-;39017:84;38838:269;38787:320;;;:::o;39113:281::-;39196:27;39218:4;39196:27;:::i;:::-;39188:6;39184:40;39326:6;39314:10;39311:22;39290:18;39278:10;39275:34;39272:62;39269:88;;;39337:18;;:::i;:::-;39269:88;39377:10;39373:2;39366:22;39156:238;39113:281;;:::o;39400:233::-;39439:3;39462:24;39480:5;39462:24;:::i;:::-;39453:33;;39508:66;39501:5;39498:77;39495:103;;;39578:18;;:::i;:::-;39495:103;39625:1;39618:5;39614:13;39607:20;;39400:233;;;:::o;39639:176::-;39671:1;39688:20;39706:1;39688:20;:::i;:::-;39683:25;;39722:20;39740:1;39722:20;:::i;:::-;39717:25;;39761:1;39751:35;;39766:18;;:::i;:::-;39751:35;39807:1;39804;39800:9;39795:14;;39639:176;;;;:::o;39821:180::-;39869:77;39866:1;39859:88;39966:4;39963:1;39956:15;39990:4;39987:1;39980:15;40007:180;40055:77;40052:1;40045:88;40152:4;40149:1;40142:15;40176:4;40173:1;40166:15;40193:180;40241:77;40238:1;40231:88;40338:4;40335:1;40328:15;40362:4;40359:1;40352:15;40379:180;40427:77;40424:1;40417:88;40524:4;40521:1;40514:15;40548:4;40545:1;40538:15;40565:180;40613:77;40610:1;40603:88;40710:4;40707:1;40700:15;40734:4;40731:1;40724:15;40751:117;40860:1;40857;40850:12;40874:117;40983:1;40980;40973:12;40997:117;41106:1;41103;41096:12;41120:117;41229:1;41226;41219:12;41243:117;41352:1;41349;41342:12;41366:117;41475:1;41472;41465:12;41489:102;41530:6;41581:2;41577:7;41572:2;41565:5;41561:14;41557:28;41547:38;;41489:102;;;:::o;41597:168::-;41737:20;41733:1;41725:6;41721:14;41714:44;41597:168;:::o;41771:237::-;41911:34;41907:1;41899:6;41895:14;41888:58;41980:20;41975:2;41967:6;41963:15;41956:45;41771:237;:::o;42014:225::-;42154:34;42150:1;42142:6;42138:14;42131:58;42223:8;42218:2;42210:6;42206:15;42199:33;42014:225;:::o;42245:224::-;42385:34;42381:1;42373:6;42369:14;42362:58;42454:7;42449:2;42441:6;42437:15;42430:32;42245:224;:::o;42475:178::-;42615:30;42611:1;42603:6;42599:14;42592:54;42475:178;:::o;42659:170::-;42799:22;42795:1;42787:6;42783:14;42776:46;42659:170;:::o;42835:223::-;42975:34;42971:1;42963:6;42959:14;42952:58;43044:6;43039:2;43031:6;43027:15;43020:31;42835:223;:::o;43064:175::-;43204:27;43200:1;43192:6;43188:14;43181:51;43064:175;:::o;43245:228::-;43385:34;43381:1;43373:6;43369:14;43362:58;43454:11;43449:2;43441:6;43437:15;43430:36;43245:228;:::o;43479:249::-;43619:34;43615:1;43607:6;43603:14;43596:58;43688:32;43683:2;43675:6;43671:15;43664:57;43479:249;:::o;43734:182::-;43874:34;43870:1;43862:6;43858:14;43851:58;43734:182;:::o;43922:169::-;44062:21;44058:1;44050:6;44046:14;44039:45;43922:169;:::o;44097:182::-;44237:34;44233:1;44225:6;44221:14;44214:58;44097:182;:::o;44285:173::-;44425:25;44421:1;44413:6;44409:14;44402:49;44285:173;:::o;44464:234::-;44604:34;44600:1;44592:6;44588:14;44581:58;44673:17;44668:2;44660:6;44656:15;44649:42;44464:234;:::o;44704:292::-;44844:34;44840:1;44832:6;44828:14;44821:58;44913:34;44908:2;44900:6;44896:15;44889:59;44982:6;44977:2;44969:6;44965:15;44958:31;44704:292;:::o;45002:174::-;45142:26;45138:1;45130:6;45126:14;45119:50;45002:174;:::o;45182:220::-;45322:34;45318:1;45310:6;45306:14;45299:58;45391:3;45386:2;45378:6;45374:15;45367:28;45182:220;:::o;45408:114::-;;:::o;45528:170::-;45668:22;45664:1;45656:6;45652:14;45645:46;45528:170;:::o;45704:233::-;45844:34;45840:1;45832:6;45828:14;45821:58;45913:16;45908:2;45900:6;45896:15;45889:41;45704:233;:::o;45943:179::-;46083:31;46079:1;46071:6;46067:14;46060:55;45943:179;:::o;46128:122::-;46201:24;46219:5;46201:24;:::i;:::-;46194:5;46191:35;46181:63;;46240:1;46237;46230:12;46181:63;46128:122;:::o;46256:116::-;46326:21;46341:5;46326:21;:::i;:::-;46319:5;46316:32;46306:60;;46362:1;46359;46352:12;46306:60;46256:116;:::o;46378:120::-;46450:23;46467:5;46450:23;:::i;:::-;46443:5;46440:34;46430:62;;46488:1;46485;46478:12;46430:62;46378:120;:::o;46504:122::-;46577:24;46595:5;46577:24;:::i;:::-;46570:5;46567:35;46557:63;;46616:1;46613;46606:12;46557:63;46504:122;:::o

Swarm Source

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