ETH Price: $3,058.96 (+2.64%)
Gas: 1 Gwei

Token

The Jims (JIM)
 

Overview

Max Total Supply

2,048 JIM

Holders

863

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
jediwolf.eth
Balance
1 JIM
0xc68092e6a9fcf32b1e1e3bba0e9132b6005599a1
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:
Jims

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-01-12
*/

// Sources flattened with hardhat v2.6.4 https://hardhat.org

// File @openzeppelin/contracts/utils/introspection/[email protected]


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 @openzeppelin/contracts/token/ERC721/[email protected]


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`, 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 be 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


// File @openzeppelin/contracts/token/ERC721/[email protected]


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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


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 @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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 functionCall(target, data, "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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(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) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason 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 {
            // 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/[email protected]


pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]


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 @openzeppelin/contracts/token/ERC721/[email protected]


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: balance query for the zero address");
        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: owner query for nonexistent token");
        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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 overriden 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 owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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: transfer caller is not 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: transfer caller is not 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) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, 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);
    }

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

    /**
     * @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 of token that is not own");
        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);
    }

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

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


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]


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() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/Jims.sol

pragma solidity ^0.8.0;




// SPDX-License-Identifier: MIT
contract Jims is ERC721Enumerable, Ownable {
  address[] public _whitelistedERC20s;
  address[] public _whitelistedERC721s;
  mapping (address => uint256) public _erc20MinBals;
  mapping (address => uint256) public _erc721MinBals;

  uint256 public constant priceToMint = 0.069 ether;
  address public immutable _feeWallet;
  uint256 public immutable maxSupply;
  uint256 public immutable preMintSupply;
  uint256 public immutable maxMintPerTransaction;
  uint256 private immutable _obfuscationOffset;

  uint256 public preMintStartTime;
  mapping (address => bool) public _whitelistedAddresses;
  mapping (address => bool) public _preMintedAddresses;
  mapping (uint256 => bool) public _preMintedTokenIds;

  uint256 public totalPreMinted = 0;
  bool public mintAllowed = false;
  bool public devMintLocked = false;
  bool public baseURILocked = false;
  string public baseURI = "ipfs://Qmf3yLqLE2DwpvN4MmPyy7bkCGXZFzf8EJPRoYiebJN96X/";


  constructor(address feeWallet, uint256 preMintSupply_, uint256 maxSupply_, uint256 maxMintPerTransaction_, uint256 obfuscationOffset) ERC721("The Jims", "JIM") {
    require(preMintSupply_ <= maxSupply_, "preMintSupply must <= maxSupply");
    _feeWallet = feeWallet;
    maxSupply = maxSupply_;
    preMintSupply = preMintSupply_;
    maxMintPerTransaction = maxMintPerTransaction_;
    _obfuscationOffset = obfuscationOffset;
    _whitelistToadzBuilders();
  }

  function allowMinting() public onlyOwner {
    mintAllowed = true;
    preMintStartTime = block.timestamp;
  }

  function whitelistERC721(address erc721, uint256 minBalance) public onlyOwner {
    require(minBalance > 0, "minBalance must be > 0");
    _whitelistedERC721s.push(erc721);
    _erc721MinBals[erc721] = minBalance;
  }

  function whitelistERC20(address erc20, uint256 minBalance) public onlyOwner {
    require(minBalance > 0, "minBalance must be > 0");
    _whitelistedERC20s.push(erc20);
    _erc20MinBals[erc20] = minBalance;
  }

  function whitelistAddress(address wallet) public onlyOwner {
    require(_whitelistedAddresses[wallet] == false, "Address already whitelisted");
    _whitelistedAddresses[wallet] = true;
  }

  function wasPreMinted(uint256 tokenId) public view returns (bool) {
    return _preMintedTokenIds[tokenId];
  }

  function publicSaleStarted() public view returns (bool) {
    return mintAllowed && preMintStartTime > 0 &&
      (totalPreMinted >= preMintSupply || block.timestamp - 30 minutes > preMintStartTime);
  }

  function timeToPublicSale() public view returns (int256) {
    if (preMintStartTime == 0) {
      return -1;
    }
    if (block.timestamp >= preMintStartTime + 30 minutes) {
      return 0;
    }
    return int256(preMintStartTime + 30 minutes - block.timestamp);
  }

  function mint(uint256 n) payable public {
    uint256 mintedSoFar = totalSupply();
    require(mintAllowed, "Mint is not allowed yet");
    require(n <= maxMintPerTransaction, "There is a limit on minting too many at a time!");
    require(mintedSoFar + n <= maxSupply, "Not enough Jims left to mint");
    require(msg.value >= n * priceToMint, "Not enough ether sent");

    if (canPreMint(msg.sender) && n == 1) {
      totalPreMinted += 1;
      _preMintedAddresses[msg.sender] = true;
      _preMintedTokenIds[_bijectTokenId(mintedSoFar + 1)] = true;
    } else {
      require(publicSaleStarted(), "You are not eligible to pre-mint");
    }

    (bool feeSent, ) = _feeWallet.call{value: msg.value}("");
    require(feeSent, "Transfer to fee wallet failed");

    for (uint256 i = 0; i < n; i++) {
      _safeMint(msg.sender, mintedSoFar + 1 + i);
    }
  }


  function allOwned(address wallet) public view returns (uint256[] memory) {
    uint256[] memory ret = new uint256[](balanceOf(wallet));
    for (uint256 i = 0; i < balanceOf(wallet); i++) {
      ret[i] = tokenOfOwnerByIndex(wallet, i);
    }
    return ret;
  }

  function canPreMint(address wallet) public view returns (bool) {
    return isPreMinter(wallet) && _preMintedAddresses[wallet] == false && totalPreMinted < preMintSupply;
  }

  function isPreMinter(address wallet) public view returns (bool) {
    for (uint256 i = 0; i < _whitelistedERC20s.length; i++) {
      address erc20 = _whitelistedERC20s[i];
      uint256 minBal = _erc20MinBals[erc20];
      if (IERC20(erc20).balanceOf(wallet) >= minBal) {
        return true;
      }
    }

    for (uint256 i = 0; i < _whitelistedERC721s.length; i++) {
      address erc721  = _whitelistedERC721s[i];
      uint256 minBal = _erc721MinBals[erc721];
      if (IERC721(erc721).balanceOf(wallet) >= minBal) {
        return true;
      }
    }

    return _whitelistedAddresses[wallet];
  }

  function _safeMint(address recipient, uint256 tokenId) internal override {
    super._safeMint(recipient, _bijectTokenId(tokenId));
  }

  function _bijectTokenId(uint256 tokenId) internal view returns (uint256) {
    return (tokenId + _obfuscationOffset) % maxSupply;
  }

  function mintSpecial(address recipient) external onlyOwner {
    require(!devMintLocked, "Dev Mint Permanently Locked");
    for (uint256 i = 0; i < 10; i++) {
        _safeMint(recipient, totalSupply() + 1);
    }
    devMintLocked = true;
  }

  function _whitelistToadzBuilders() private {
    _whitelistedAddresses[0x38cb169b538a9Ad32a8B146D534b8087A7fa9033] = true;
    _whitelistedAddresses[0xe151dF2b98F9CE246C1De62f10F08c75991F6f6d] = true;
    _whitelistedAddresses[0x0deE629A5961F0493A54283B88Fc0Da49558E27c] = true;
    _whitelistedAddresses[0x515278483D7888B877F605984bF7fF0f489D6b88] = true;
    _whitelistedAddresses[0x7651f150fDF8E9C6293FaF3DBFE469296397f216] = true;
    _whitelistedAddresses[0x829B325036EE8F6B6ec80311d2699505505696eF] = true;
    _whitelistedAddresses[0x31C1b03EC94EC958DD6E53351f1760f8FF72946B] = true;
    _whitelistedAddresses[0x5ba89cAd1B7925083FdC91F8aFc5dff954df803F] = true;
    _whitelistedAddresses[0xDE8f5F0b94134d50ad7f85EF02b9771203F939E5] = true;
    _whitelistedAddresses[0x27E46E5C28d29Cae26fC0a92ACfCb3C9718D8Ee0] = true;
    _whitelistedAddresses[0x51e13ff041D86dcc4B8126eD58050b7C2BA2c5B0] = true;
    _whitelistedAddresses[0xb4005DB54aDecf669BaBC3efb19B9B7E3978ebc2] = true;
    _whitelistedAddresses[0xce4122fEC66C21b0114a8Ef6dA8BCC44C396Cb66] = true;
    _whitelistedAddresses[0x1E4aB43d5D283cb3bf809a46C4eed47C7283e6EC] = true;
    _whitelistedAddresses[0xAd1B4d6d80Aea57c966D9751A5Fe2c60a0469F60] = true;
    _whitelistedAddresses[0xDe05523952B159f1E07f61E744a5e451776B2890] = true;
    _whitelistedAddresses[0x9C3b82bf3464e3Eb594d7F172800066C0394D996] = true;
    _whitelistedAddresses[0xCF4e26a7e7eAe4b3840dd31C527096e1265AB990] = true;
    _whitelistedAddresses[0xe1385eA3cD4AEB508b2B8094F822960D0C968505] = true;
    _whitelistedAddresses[0xcB06bEDe7cB0a4b333581B6BdcD05f7cc737b9cC] = true;
    _whitelistedAddresses[0x04fe82a2a3284F629Bb501e78e6DDf38702d129c] = true;
    _whitelistedAddresses[0xe0110C6EE2138Ecf9962a6f9f6Ad329cDFE1FA17] = true;
    _whitelistedAddresses[0x3993996B09949BBA655d98C02c87EA6ABf553630] = true;
    _whitelistedAddresses[0xD19BF5F0B785c6f1F6228C72A8A31C9f383a49c4] = true;
    _whitelistedAddresses[0x53aD02394eB71543D4deB7c034893A12e15fF4e0] = true;
    _whitelistedAddresses[0xF3A45Ee798fc560CE080d143D12312185f84aa72] = true;
    _whitelistedAddresses[0x5b8589befa1bAeaB1f10FF0933DC93c54F906A53] = true;
    _whitelistedAddresses[0x062062Ed41002Ed2Bff56df561496cbE7FB374ae] = true;
    _whitelistedAddresses[0xbC9C6379C7C5b87f32cB707711FbEbB2511f0BA1] = true;
    _whitelistedAddresses[0xb75F87261a1FAC3a86f8A48d55597A622BA3CC48] = true;
    _whitelistedAddresses[0x6b2AF62E0Bb72761241F35d6796b64B98Fe1Bd1C] = true;
    _whitelistedAddresses[0x9A15235379CF1111EA102850d442b743BF586FC5] = true;
    _whitelistedAddresses[0x52A7991d52d8e68de46DFe3CD7d4f48edDa7aE77] = true;
    _whitelistedAddresses[0x3b359252E4A9B352a127aDdbcc2547460AA4e51c] = true;
    _whitelistedAddresses[0xedcB20e324E75553C9C7E7578eFAe48AaB4702FF] = true;
    _whitelistedAddresses[0x7132C9f36abE62EAb74CdfDd08C154c9AE45691B] = true;
    _whitelistedAddresses[0x51200AA490F8DF9EBdC9671cF8C8F8A12c089fDa] = true;
    _whitelistedAddresses[0xCEB6798d609F86E156F36735EB39108aF6d9a8cB] = true;
    _whitelistedAddresses[0xe360776eDA4764CDEe0b7613857f286b861aB4D4] = true;
    _whitelistedAddresses[0x484eC62385e780f2460fEaC34864A77bA5A18134] = true;
    _whitelistedAddresses[0x202e1B414D601395c30A6F70EFfA082f36Ea8f79] = true;
    _whitelistedAddresses[0xf8c75C5E9ec6875c57C0Dbc30b59934B37908c4e] = true;
    _whitelistedAddresses[0x3491A2C7Aa4D12D67A5ab628185CE07821B9C553] = true;
    _whitelistedAddresses[0xa596370bC21DeE36872B98009dfbbF465DBFefA3] = true;
    _whitelistedAddresses[0xdFba1C121d57d317467dCf6eba3df7b32C5C736f] = true;
    _whitelistedAddresses[0x389D3C071687A92F060995327Acb015e936A27CE] = true;
    _whitelistedAddresses[0x04D42dEd30A02986Dd5E17d39dd34fBA381FcC4E] = true;
    _whitelistedAddresses[0xcD494a22fCF4888976c145F9e389869C4ec313aA] = true;
    _whitelistedAddresses[0xff91128081043dcEB6C0bD3f752Fa447fbaA9335] = true;
    _whitelistedAddresses[0x06151656d748990d77e20a2d47C4F9369AA74645] = true;
    _whitelistedAddresses[0x6A9B9563F32Bc418f35067CE47554C894799515b] = true;
    _whitelistedAddresses[0x9C906F90137C764035d180D3983F15E7C2cb8BbE] = true;
    _whitelistedAddresses[0x8Bd8795CbeED15F8D5074f493C53b39C11Ed37B2] = true;
    _whitelistedAddresses[0x93e9594A8f2b5671aeE54b86283FA5A7261F93d7] = true;
    _whitelistedAddresses[0xc6B89634f0afb34b59c05A0B7cD132141778aDDd] = true;
    _whitelistedAddresses[0x51661d54E0b6653446c602fd4d973D5205F22Dc3] = true;
  }

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

  function _setBaseURI(string memory baseURI_) external onlyOwner {
    require(baseURILocked == false, "Can only set Base URI once");
    baseURI = baseURI_;
    baseURILocked = true;
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"feeWallet","type":"address"},{"internalType":"uint256","name":"preMintSupply_","type":"uint256"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"uint256","name":"maxMintPerTransaction_","type":"uint256"},{"internalType":"uint256","name":"obfuscationOffset","type":"uint256"}],"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":"","type":"address"}],"name":"_erc20MinBals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_erc721MinBals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_preMintedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_preMintedTokenIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"_setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_whitelistedERC20s","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_whitelistedERC721s","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"allOwned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURILocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"canPreMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devMintLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isPreMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTransaction","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":"n","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"mintSpecial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceToMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"timeToPublicSale","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalPreMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"wasPreMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20","type":"address"},{"internalType":"uint256","name":"minBalance","type":"uint256"}],"name":"whitelistERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc721","type":"address"},{"internalType":"uint256","name":"minBalance","type":"uint256"}],"name":"whitelistERC721","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61012060405260006013556000601460006101000a81548160ff0219169083151502179055506000601460016101000a81548160ff0219169083151502179055506000601460026101000a81548160ff0219169083151502179055506040518060600160405280603681526020016200740860369139601590805190602001906200008c92919062001aa9565b503480156200009a57600080fd5b506040516200743e3803806200743e8339818101604052810190620000c0919062001b87565b6040518060400160405280600881526020017f546865204a696d730000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4a494d000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014492919062001aa9565b5080600190805190602001906200015d92919062001aa9565b50505062000180620001746200023960201b60201c565b6200024160201b60201c565b82841115620001c6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001bd9062001c36565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508260a081815250508360c081815250508160e081815250508061010081815250506200022e6200030760201b60201c565b505050505062001d6e565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601060007338cb169b538a9ad32a8b146d534b8087a7fa903373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e151df2b98f9ce246c1de62f10f08c75991f6f6d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000730dee629a5961f0493a54283b88fc0da49558e27c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073515278483d7888b877f605984bf7ff0f489d6b8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000737651f150fdf8e9c6293faf3dbfe469296397f21673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073829b325036ee8f6b6ec80311d2699505505696ef73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007331c1b03ec94ec958dd6e53351f1760f8ff72946b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000735ba89cad1b7925083fdc91f8afc5dff954df803f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073de8f5f0b94134d50ad7f85ef02b9771203f939e573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007327e46e5c28d29cae26fc0a92acfcb3c9718d8ee073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007351e13ff041d86dcc4b8126ed58050b7c2ba2c5b073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073b4005db54adecf669babc3efb19b9b7e3978ebc273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ce4122fec66c21b0114a8ef6da8bcc44c396cb6673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000731e4ab43d5d283cb3bf809a46c4eed47c7283e6ec73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ad1b4d6d80aea57c966d9751a5fe2c60a0469f6073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073de05523952b159f1e07f61e744a5e451776b289073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000739c3b82bf3464e3eb594d7f172800066c0394d99673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073cf4e26a7e7eae4b3840dd31c527096e1265ab99073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e1385ea3cd4aeb508b2b8094f822960d0c96850573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073cb06bede7cb0a4b333581b6bdcd05f7cc737b9cc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007304fe82a2a3284f629bb501e78e6ddf38702d129c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e0110c6ee2138ecf9962a6f9f6ad329cdfe1fa1773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000733993996b09949bba655d98c02c87ea6abf55363073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073d19bf5f0b785c6f1f6228c72a8a31c9f383a49c473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007353ad02394eb71543d4deb7c034893a12e15ff4e073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f3a45ee798fc560ce080d143d12312185f84aa7273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000735b8589befa1baeab1f10ff0933dc93c54f906a5373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073062062ed41002ed2bff56df561496cbe7fb374ae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073bc9c6379c7c5b87f32cb707711fbebb2511f0ba173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073b75f87261a1fac3a86f8a48d55597a622ba3cc4873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000736b2af62e0bb72761241f35d6796b64b98fe1bd1c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000739a15235379cf1111ea102850d442b743bf586fc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007352a7991d52d8e68de46dfe3cd7d4f48edda7ae7773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000733b359252e4a9b352a127addbcc2547460aa4e51c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073edcb20e324e75553c9c7e7578efae48aab4702ff73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000737132c9f36abe62eab74cdfdd08c154c9ae45691b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007351200aa490f8df9ebdc9671cf8c8f8a12c089fda73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ceb6798d609f86e156f36735eb39108af6d9a8cb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073e360776eda4764cdee0b7613857f286b861ab4d473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073484ec62385e780f2460feac34864a77ba5a1813473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073202e1b414d601395c30a6f70effa082f36ea8f7973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073f8c75c5e9ec6875c57c0dbc30b59934b37908c4e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000733491a2c7aa4d12d67a5ab628185ce07821b9c55373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073a596370bc21dee36872b98009dfbbf465dbfefa373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073dfba1c121d57d317467dcf6eba3df7b32c5c736f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073389d3c071687a92f060995327acb015e936a27ce73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007304d42ded30a02986dd5e17d39dd34fba381fcc4e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073cd494a22fcf4888976c145f9e389869c4ec313aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073ff91128081043dceb6c0bd3f752fa447fbaa933573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007306151656d748990d77e20a2d47c4f9369aa7464573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000736a9b9563f32bc418f35067ce47554c894799515b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000739c906f90137c764035d180d3983f15e7c2cb8bbe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000738bd8795cbeed15f8d5074f493c53b39c11ed37b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007393e9594a8f2b5671aee54b86283fa5a7261f93d773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600073c6b89634f0afb34b59c05a0b7cd132141778addd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060007351661d54e0b6653446c602fd4d973d5205f22dc373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b82805462001ab79062001ca7565b90600052602060002090601f01602090048101928262001adb576000855562001b27565b82601f1062001af657805160ff191683800117855562001b27565b8280016001018555821562001b27579182015b8281111562001b2657825182559160200191906001019062001b09565b5b50905062001b36919062001b3a565b5090565b5b8082111562001b5557600081600090555060010162001b3b565b5090565b60008151905062001b6a8162001d3a565b92915050565b60008151905062001b818162001d54565b92915050565b600080600080600060a0868803121562001ba65762001ba562001d0c565b5b600062001bb68882890162001b59565b955050602062001bc98882890162001b70565b945050604062001bdc8882890162001b70565b935050606062001bef8882890162001b70565b925050608062001c028882890162001b70565b9150509295509295909350565b600062001c1e601f8362001c58565b915062001c2b8262001d11565b602082019050919050565b6000602082019050818103600083015262001c518162001c0f565b9050919050565b600082825260208201905092915050565b600062001c768262001c7d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062001cc057607f821691505b6020821081141562001cd75762001cd662001cdd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f7072654d696e74537570706c79206d757374203c3d206d6178537570706c7900600082015250565b62001d458162001c69565b811462001d5157600080fd5b50565b62001d5f8162001c9d565b811462001d6b57600080fd5b50565b60805160601c60a05160c05160e0516101005161562862001de06000396000613009015260008181610c3f0152611ab00152600081816111e501528181611fa8015261270c015260008181611b13015281816125e60152612fe80152600081816116cc0152611cf101526156286000f3fe6080604052600436106102c95760003560e01c806370a0823111610175578063b88d4fde116100dc578063d5abeb0111610095578063efb863601161006f578063efb8636014610b83578063f2fde38b14610bc0578063f85061ca14610be9578063fe95989714610c14576102c9565b8063d5abeb0114610ade578063e985e9c514610b09578063ef21e96014610b46576102c9565b8063b88d4fde146109aa578063c06f8d68146109d3578063c3a7cf9f14610a10578063c467201e14610a4d578063c87b56dd14610a78578063cba8a95a14610ab5576102c9565b80639a7c8e691161012e5780639a7c8e6914610895578063a0712d68146108c0578063a22cb465146108dc578063a2e9147714610905578063abf9b5a814610930578063afdc16bd1461096d576102c9565b806370a0823114610771578063715018a6146107ae5780637fb9c3d2146107c557806385e5d72b146108025780638da5cb5b1461083f57806395d89b411461086a576102c9565b80634156658511610234578063580092d4116101ed5780636352211e116101c75780636352211e146106b557806363fe5cca146106f2578063659419a41461071b5780636c0360eb14610746576102c9565b8063580092d4146106345780635d148e5c1461065f57806362f4fb2d1461068a576102c9565b8063415665851461050057806342842e0e1461052957806347301d37146105525780634dc1dbec1461058f5780634f6ccce7146105ba57806353833b1d146105f7576102c9565b806318160ddd1161028657806318160ddd146103de57806323b872dd146104095780632f745c591461043257806330438ede1461046f57806331b5b907146104ac5780633a2f0907146104d5576102c9565b806301f56997146102ce57806301ffc9a7146102f957806306fdde0314610336578063081812fc14610361578063095ea7b31461039e5780631602a124146103c7575b600080fd5b3480156102da57600080fd5b506102e3610c3d565b6040516102f091906149c3565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190613ed1565b610c61565b60405161032d91906145eb565b60405180910390f35b34801561034257600080fd5b5061034b610cdb565b6040516103589190614621565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613f74565b610d6d565b6040516103959190614562565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613e91565b610df2565b005b3480156103d357600080fd5b506103dc610f0a565b005b3480156103ea57600080fd5b506103f3610faa565b60405161040091906149c3565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613d7b565b610fb7565b005b34801561043e57600080fd5b5061045960048036038101906104549190613e91565b611017565b60405161046691906149c3565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613d0e565b6110bc565b6040516104a391906145eb565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613f2b565b6110dc565b005b3480156104e157600080fd5b506104ea6111e3565b6040516104f791906149c3565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190613d0e565b611207565b005b34801561053557600080fd5b50610550600480360381019061054b9190613d7b565b611371565b005b34801561055e57600080fd5b5061057960048036038101906105749190613f74565b611391565b6040516105869190614562565b60405180910390f35b34801561059b57600080fd5b506105a46113d0565b6040516105b191906149c3565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613f74565b6113db565b6040516105ee91906149c3565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613d0e565b61144c565b60405161062b91906149c3565b60405180910390f35b34801561064057600080fd5b50610649611464565b6040516106569190614606565b60405180910390f35b34801561066b57600080fd5b506106746114d8565b60405161068191906145eb565b60405180910390f35b34801561069657600080fd5b5061069f6114eb565b6040516106ac91906149c3565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613f74565b6114f1565b6040516106e99190614562565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613d0e565b6115a3565b005b34801561072757600080fd5b506107306116ca565b60405161073d9190614562565b60405180910390f35b34801561075257600080fd5b5061075b6116ee565b6040516107689190614621565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613d0e565b61177c565b6040516107a591906149c3565b60405180910390f35b3480156107ba57600080fd5b506107c3611834565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190613d0e565b6118bc565b6040516107f991906149c3565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613d0e565b6118d4565b60405161083691906145c9565b60405180910390f35b34801561084b57600080fd5b50610854611984565b6040516108619190614562565b60405180910390f35b34801561087657600080fd5b5061087f6119ae565b60405161088c9190614621565b60405180910390f35b3480156108a157600080fd5b506108aa611a40565b6040516108b791906145eb565b60405180910390f35b6108da60048036038101906108d59190613f74565b611a53565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613e51565b611dfe565b005b34801561091157600080fd5b5061091a611f7f565b60405161092791906145eb565b60405180910390f35b34801561093c57600080fd5b5061095760048036038101906109529190613d0e565b611feb565b60405161096491906145eb565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613f74565b61200b565b6040516109a191906145eb565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190613dce565b612035565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190613f74565b612097565b604051610a079190614562565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190613d0e565b6120d6565b604051610a4491906145eb565b60405180910390f35b348015610a5957600080fd5b50610a626123c0565b604051610a6f91906145eb565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a9190613f74565b6123d3565b604051610aac9190614621565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613e91565b61247a565b005b348015610aea57600080fd5b50610af36125e4565b604051610b0091906149c3565b60405180910390f35b348015610b1557600080fd5b50610b306004803603810190610b2b9190613d3b565b612608565b604051610b3d91906145eb565b60405180910390f35b348015610b5257600080fd5b50610b6d6004803603810190610b689190613d0e565b61269c565b604051610b7a91906145eb565b60405180910390f35b348015610b8f57600080fd5b50610baa6004803603810190610ba59190613f74565b612737565b604051610bb791906145eb565b60405180910390f35b348015610bcc57600080fd5b50610be76004803603810190610be29190613d0e565b612757565b005b348015610bf557600080fd5b50610bfe61284f565b604051610c0b91906149c3565b60405180910390f35b348015610c2057600080fd5b50610c3b6004803603810190610c369190613e91565b612855565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cd45750610cd3826129bf565b5b9050919050565b606060008054610cea90614cc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1690614cc1565b8015610d635780601f10610d3857610100808354040283529160200191610d63565b820191906000526020600020905b815481529060010190602001808311610d4657829003601f168201915b5050505050905090565b6000610d7882612aa1565b610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae90614803565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dfd826114f1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906148e3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e8d612b0d565b73ffffffffffffffffffffffffffffffffffffffff161480610ebc5750610ebb81610eb6612b0d565b612608565b5b610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290614763565b60405180910390fd5b610f058383612b15565b505050565b610f12612b0d565b73ffffffffffffffffffffffffffffffffffffffff16610f30611984565b73ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614843565b60405180910390fd5b6001601460006101000a81548160ff02191690831515021790555042600f81905550565b6000600880549050905090565b610fc8610fc2612b0d565b82612bce565b611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614903565b60405180910390fd5b611012838383612cac565b505050565b60006110228361177c565b8210611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90614663565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b6110e4612b0d565b73ffffffffffffffffffffffffffffffffffffffff16611102611984565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90614843565b60405180910390fd5b60001515601460029054906101000a900460ff161515146111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a5906148a3565b60405180910390fd5b80601590805190602001906111c4929190613b0d565b506001601460026101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61120f612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661122d611984565b73ffffffffffffffffffffffffffffffffffffffff1614611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90614843565b60405180910390fd5b60001515601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90614923565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61138c83838360405180602001604052806000815250612035565b505050565b600b81815481106113a157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b66f523226980800081565b60006113e5610faa565b8210611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90614963565b60405180910390fd5b6008828154811061143a57611439614e5a565b5b90600052602060002001549050919050565b600e6020528060005260406000206000915090505481565b600080600f541415611498577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506114d5565b610708600f546114a89190614aec565b42106114b757600090506114d5565b42610708600f546114c89190614aec565b6114d29190614bcd565b90505b90565b601460029054906101000a900460ff1681565b600f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611591906147a3565b60405180910390fd5b80915050919050565b6115ab612b0d565b73ffffffffffffffffffffffffffffffffffffffff166115c9611984565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614843565b60405180910390fd5b601460019054906101000a900460ff161561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614943565b60405180910390fd5b60005b600a8110156116ab57611698826001611689610faa565b6116939190614aec565b612f08565b80806116a390614d24565b915050611672565b506001601460016101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601580546116fb90614cc1565b80601f016020809104026020016040519081016040528092919081815260200182805461172790614cc1565b80156117745780601f1061174957610100808354040283529160200191611774565b820191906000526020600020905b81548152906001019060200180831161175757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490614783565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61183c612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661185a611984565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790614843565b60405180910390fd5b6118ba6000612f1e565b565b600d6020528060005260406000206000915090505481565b606060006118e18361177c565b67ffffffffffffffff8111156118fa576118f9614e89565b5b6040519080825280602002602001820160405280156119285781602001602082028036833780820191505090505b50905060005b6119378461177c565b81101561197a576119488482611017565b82828151811061195b5761195a614e5a565b5b602002602001018181525050808061197290614d24565b91505061192e565b5080915050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119bd90614cc1565b80601f01602080910402602001604051908101604052809291908181526020018280546119e990614cc1565b8015611a365780601f10611a0b57610100808354040283529160200191611a36565b820191906000526020600020905b815481529060010190602001808311611a1957829003601f168201915b5050505050905090565b601460019054906101000a900460ff1681565b6000611a5d610faa565b9050601460009054906101000a900460ff16611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906149a3565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000821115611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b08906148c3565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008282611b3e9190614aec565b1115611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690614823565b60405180910390fd5b66f523226980800082611b929190614b73565b341015611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614983565b60405180910390fd5b611bdd3361269c565b8015611be95750600182145b15611ca557600160136000828254611c019190614aec565b925050819055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000611c7b600185611c769190614aec565b612fe4565b815260200190815260200160002060006101000a81548160ff021916908315150217905550611ced565b611cad611f7f565b611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce3906147c3565b60405180910390fd5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1634604051611d339061454d565b60006040518083038185875af1925050503d8060008114611d70576040519150601f19603f3d011682016040523d82523d6000602084013e611d75565b606091505b5050905080611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090614723565b60405180910390fd5b60005b83811015611df857611de53382600186611dd69190614aec565b611de09190614aec565b612f08565b8080611df090614d24565b915050611dbc565b50505050565b611e06612b0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b90614703565b60405180910390fd5b8060056000611e81612b0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f2e612b0d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f7391906145eb565b60405180910390a35050565b6000601460009054906101000a900460ff168015611f9f57506000600f54115b8015611fe657507f0000000000000000000000000000000000000000000000000000000000000000601354101580611fe55750600f5461070842611fe39190614bcd565b115b5b905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b612046612040612b0d565b83612bce565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90614903565b60405180910390fd5b61209184848484613044565b50505050565b600c81815481106120a757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600090505b600b80549050811015612222576000600b828154811061210157612100614e5a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016121ac9190614562565b60206040518083038186803b1580156121c457600080fd5b505afa1580156121d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fc9190613fa1565b1061220d57600193505050506123bb565b5050808061221a90614d24565b9150506120de565b5060005b600c8054905081101561236a576000600c828154811061224957612248614e5a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016122f49190614562565b60206040518083038186803b15801561230c57600080fd5b505afa158015612320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123449190613fa1565b1061235557600193505050506123bb565b5050808061236290614d24565b915050612226565b50601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b601460009054906101000a900460ff1681565b60606123de82612aa1565b61241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614883565b60405180910390fd5b60006124276130a0565b905060008151116124475760405180602001604052806000815250612472565b8061245184613132565b604051602001612462929190614529565b6040516020818303038152906040525b915050919050565b612482612b0d565b73ffffffffffffffffffffffffffffffffffffffff166124a0611984565b73ffffffffffffffffffffffffffffffffffffffff16146124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90614843565b60405180910390fd5b60008111612539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090614643565b60405180910390fd5b600c829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006126a7826120d6565b8015612703575060001515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b801561273057507f0000000000000000000000000000000000000000000000000000000000000000601354105b9050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b61275f612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661277d611984565b73ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614843565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a906146a3565b60405180910390fd5b61284c81612f1e565b50565b60135481565b61285d612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661287b611984565b73ffffffffffffffffffffffffffffffffffffffff16146128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c890614843565b60405180910390fd5b60008111612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614643565b60405180910390fd5b600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a8a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a9a5750612a9982613293565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b88836114f1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612bd982612aa1565b612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f90614743565b60405180910390fd5b6000612c23836114f1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c9257508373ffffffffffffffffffffffffffffffffffffffff16612c7a84610d6d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ca35750612ca28185612608565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ccc826114f1565b73ffffffffffffffffffffffffffffffffffffffff1614612d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1990614863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d89906146e3565b60405180910390fd5b612d9d8383836132fd565b612da8600082612b15565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df89190614bcd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4f9190614aec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612f1a82612f1583612fe4565b613411565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836130339190614aec565b61303d9190614d6d565b9050919050565b61304f848484612cac565b61305b8484848461342f565b61309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309190614683565b60405180910390fd5b50505050565b6060601580546130af90614cc1565b80601f01602080910402602001604051908101604052809291908181526020018280546130db90614cc1565b80156131285780601f106130fd57610100808354040283529160200191613128565b820191906000526020600020905b81548152906001019060200180831161310b57829003601f168201915b5050505050905090565b6060600082141561317a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061328e565b600082905060005b600082146131ac57808061319590614d24565b915050600a826131a59190614b42565b9150613182565b60008167ffffffffffffffff8111156131c8576131c7614e89565b5b6040519080825280601f01601f1916602001820160405280156131fa5781602001600182028036833780820191505090505b5090505b60008514613287576001826132139190614bcd565b9150600a856132229190614d6d565b603061322e9190614aec565b60f81b81838151811061324457613243614e5a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132809190614b42565b94506131fe565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6133088383836135c6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561334b57613346816135cb565b61338a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613389576133888382613614565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133cd576133c881613781565b61340c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461340b5761340a8282613852565b5b5b505050565b61342b8282604051806020016040528060008152506138d1565b5050565b60006134508473ffffffffffffffffffffffffffffffffffffffff1661392c565b156135b9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613479612b0d565b8786866040518563ffffffff1660e01b815260040161349b949392919061457d565b602060405180830381600087803b1580156134b557600080fd5b505af19250505080156134e657506040513d601f19601f820116820180604052508101906134e39190613efe565b60015b613569573d8060008114613516576040519150601f19603f3d011682016040523d82523d6000602084013e61351b565b606091505b50600081511415613561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355890614683565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135be565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136218461177c565b61362b9190614bcd565b9050600060076000848152602001908152602001600020549050818114613710576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137959190614bcd565b90506000600960008481526020019081526020016000205490506000600883815481106137c5576137c4614e5a565b5b9060005260206000200154905080600883815481106137e7576137e6614e5a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061383657613835614e2b565b5b6001900381819060005260206000200160009055905550505050565b600061385d8361177c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6138db838361393f565b6138e8600084848461342f565b613927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391e90614683565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a6906147e3565b60405180910390fd5b6139b881612aa1565b156139f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ef906146c3565b60405180910390fd5b613a04600083836132fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a549190614aec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613b1990614cc1565b90600052602060002090601f016020900481019282613b3b5760008555613b82565b82601f10613b5457805160ff1916838001178555613b82565b82800160010185558215613b82579182015b82811115613b81578251825591602001919060010190613b66565b5b509050613b8f9190613b93565b5090565b5b80821115613bac576000816000905550600101613b94565b5090565b6000613bc3613bbe84614a03565b6149de565b905082815260208101848484011115613bdf57613bde614ebd565b5b613bea848285614c7f565b509392505050565b6000613c05613c0084614a34565b6149de565b905082815260208101848484011115613c2157613c20614ebd565b5b613c2c848285614c7f565b509392505050565b600081359050613c4381615596565b92915050565b600081359050613c58816155ad565b92915050565b600081359050613c6d816155c4565b92915050565b600081519050613c82816155c4565b92915050565b600082601f830112613c9d57613c9c614eb8565b5b8135613cad848260208601613bb0565b91505092915050565b600082601f830112613ccb57613cca614eb8565b5b8135613cdb848260208601613bf2565b91505092915050565b600081359050613cf3816155db565b92915050565b600081519050613d08816155db565b92915050565b600060208284031215613d2457613d23614ec7565b5b6000613d3284828501613c34565b91505092915050565b60008060408385031215613d5257613d51614ec7565b5b6000613d6085828601613c34565b9250506020613d7185828601613c34565b9150509250929050565b600080600060608486031215613d9457613d93614ec7565b5b6000613da286828701613c34565b9350506020613db386828701613c34565b9250506040613dc486828701613ce4565b9150509250925092565b60008060008060808587031215613de857613de7614ec7565b5b6000613df687828801613c34565b9450506020613e0787828801613c34565b9350506040613e1887828801613ce4565b925050606085013567ffffffffffffffff811115613e3957613e38614ec2565b5b613e4587828801613c88565b91505092959194509250565b60008060408385031215613e6857613e67614ec7565b5b6000613e7685828601613c34565b9250506020613e8785828601613c49565b9150509250929050565b60008060408385031215613ea857613ea7614ec7565b5b6000613eb685828601613c34565b9250506020613ec785828601613ce4565b9150509250929050565b600060208284031215613ee757613ee6614ec7565b5b6000613ef584828501613c5e565b91505092915050565b600060208284031215613f1457613f13614ec7565b5b6000613f2284828501613c73565b91505092915050565b600060208284031215613f4157613f40614ec7565b5b600082013567ffffffffffffffff811115613f5f57613f5e614ec2565b5b613f6b84828501613cb6565b91505092915050565b600060208284031215613f8a57613f89614ec7565b5b6000613f9884828501613ce4565b91505092915050565b600060208284031215613fb757613fb6614ec7565b5b6000613fc584828501613cf9565b91505092915050565b6000613fda838361450b565b60208301905092915050565b613fef81614c01565b82525050565b600061400082614a75565b61400a8185614aa3565b935061401583614a65565b8060005b8381101561404657815161402d8882613fce565b975061403883614a96565b925050600181019050614019565b5085935050505092915050565b61405c81614c13565b82525050565b600061406d82614a80565b6140778185614ab4565b9350614087818560208601614c8e565b61409081614ecc565b840191505092915050565b6140a481614c4b565b82525050565b60006140b582614a8b565b6140bf8185614ad0565b93506140cf818560208601614c8e565b6140d881614ecc565b840191505092915050565b60006140ee82614a8b565b6140f88185614ae1565b9350614108818560208601614c8e565b80840191505092915050565b6000614121601683614ad0565b915061412c82614edd565b602082019050919050565b6000614144602b83614ad0565b915061414f82614f06565b604082019050919050565b6000614167603283614ad0565b915061417282614f55565b604082019050919050565b600061418a602683614ad0565b915061419582614fa4565b604082019050919050565b60006141ad601c83614ad0565b91506141b882614ff3565b602082019050919050565b60006141d0602483614ad0565b91506141db8261501c565b604082019050919050565b60006141f3601983614ad0565b91506141fe8261506b565b602082019050919050565b6000614216601d83614ad0565b915061422182615094565b602082019050919050565b6000614239602c83614ad0565b9150614244826150bd565b604082019050919050565b600061425c603883614ad0565b91506142678261510c565b604082019050919050565b600061427f602a83614ad0565b915061428a8261515b565b604082019050919050565b60006142a2602983614ad0565b91506142ad826151aa565b604082019050919050565b60006142c5602083614ad0565b91506142d0826151f9565b602082019050919050565b60006142e8602083614ad0565b91506142f382615222565b602082019050919050565b600061430b602c83614ad0565b91506143168261524b565b604082019050919050565b600061432e601c83614ad0565b91506143398261529a565b602082019050919050565b6000614351602083614ad0565b915061435c826152c3565b602082019050919050565b6000614374602983614ad0565b915061437f826152ec565b604082019050919050565b6000614397602f83614ad0565b91506143a28261533b565b604082019050919050565b60006143ba601a83614ad0565b91506143c58261538a565b602082019050919050565b60006143dd602f83614ad0565b91506143e8826153b3565b604082019050919050565b6000614400602183614ad0565b915061440b82615402565b604082019050919050565b6000614423600083614ac5565b915061442e82615451565b600082019050919050565b6000614446603183614ad0565b915061445182615454565b604082019050919050565b6000614469601b83614ad0565b9150614474826154a3565b602082019050919050565b600061448c601b83614ad0565b9150614497826154cc565b602082019050919050565b60006144af602c83614ad0565b91506144ba826154f5565b604082019050919050565b60006144d2601583614ad0565b91506144dd82615544565b602082019050919050565b60006144f5601783614ad0565b91506145008261556d565b602082019050919050565b61451481614c75565b82525050565b61452381614c75565b82525050565b600061453582856140e3565b915061454182846140e3565b91508190509392505050565b600061455882614416565b9150819050919050565b60006020820190506145776000830184613fe6565b92915050565b60006080820190506145926000830187613fe6565b61459f6020830186613fe6565b6145ac604083018561451a565b81810360608301526145be8184614062565b905095945050505050565b600060208201905081810360008301526145e38184613ff5565b905092915050565b60006020820190506146006000830184614053565b92915050565b600060208201905061461b600083018461409b565b92915050565b6000602082019050818103600083015261463b81846140aa565b905092915050565b6000602082019050818103600083015261465c81614114565b9050919050565b6000602082019050818103600083015261467c81614137565b9050919050565b6000602082019050818103600083015261469c8161415a565b9050919050565b600060208201905081810360008301526146bc8161417d565b9050919050565b600060208201905081810360008301526146dc816141a0565b9050919050565b600060208201905081810360008301526146fc816141c3565b9050919050565b6000602082019050818103600083015261471c816141e6565b9050919050565b6000602082019050818103600083015261473c81614209565b9050919050565b6000602082019050818103600083015261475c8161422c565b9050919050565b6000602082019050818103600083015261477c8161424f565b9050919050565b6000602082019050818103600083015261479c81614272565b9050919050565b600060208201905081810360008301526147bc81614295565b9050919050565b600060208201905081810360008301526147dc816142b8565b9050919050565b600060208201905081810360008301526147fc816142db565b9050919050565b6000602082019050818103600083015261481c816142fe565b9050919050565b6000602082019050818103600083015261483c81614321565b9050919050565b6000602082019050818103600083015261485c81614344565b9050919050565b6000602082019050818103600083015261487c81614367565b9050919050565b6000602082019050818103600083015261489c8161438a565b9050919050565b600060208201905081810360008301526148bc816143ad565b9050919050565b600060208201905081810360008301526148dc816143d0565b9050919050565b600060208201905081810360008301526148fc816143f3565b9050919050565b6000602082019050818103600083015261491c81614439565b9050919050565b6000602082019050818103600083015261493c8161445c565b9050919050565b6000602082019050818103600083015261495c8161447f565b9050919050565b6000602082019050818103600083015261497c816144a2565b9050919050565b6000602082019050818103600083015261499c816144c5565b9050919050565b600060208201905081810360008301526149bc816144e8565b9050919050565b60006020820190506149d8600083018461451a565b92915050565b60006149e86149f9565b90506149f48282614cf3565b919050565b6000604051905090565b600067ffffffffffffffff821115614a1e57614a1d614e89565b5b614a2782614ecc565b9050602081019050919050565b600067ffffffffffffffff821115614a4f57614a4e614e89565b5b614a5882614ecc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614af782614c75565b9150614b0283614c75565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3757614b36614d9e565b5b828201905092915050565b6000614b4d82614c75565b9150614b5883614c75565b925082614b6857614b67614dcd565b5b828204905092915050565b6000614b7e82614c75565b9150614b8983614c75565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bc257614bc1614d9e565b5b828202905092915050565b6000614bd882614c75565b9150614be383614c75565b925082821015614bf657614bf5614d9e565b5b828203905092915050565b6000614c0c82614c55565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cac578082015181840152602081019050614c91565b83811115614cbb576000848401525b50505050565b60006002820490506001821680614cd957607f821691505b60208210811415614ced57614cec614dfc565b5b50919050565b614cfc82614ecc565b810181811067ffffffffffffffff82111715614d1b57614d1a614e89565b5b80604052505050565b6000614d2f82614c75565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d6257614d61614d9e565b5b600182019050919050565b6000614d7882614c75565b9150614d8383614c75565b925082614d9357614d92614dcd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6d696e42616c616e6365206d757374206265203e203000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5472616e7366657220746f206665652077616c6c6574206661696c6564000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520746f207072652d6d696e74600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204a696d73206c65667420746f206d696e7400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616e206f6e6c7920736574204261736520555249206f6e6365000000000000600082015250565b7f54686572652069732061206c696d6974206f6e206d696e74696e6720746f6f2060008201527f6d616e7920617420612074696d65210000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4164647265737320616c72656164792077686974656c69737465640000000000600082015250565b7f446576204d696e74205065726d616e656e746c79204c6f636b65640000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f4d696e74206973206e6f7420616c6c6f77656420796574000000000000000000600082015250565b61559f81614c01565b81146155aa57600080fd5b50565b6155b681614c13565b81146155c157600080fd5b50565b6155cd81614c1f565b81146155d857600080fd5b50565b6155e481614c75565b81146155ef57600080fd5b5056fea2646970667358221220c4f7c4f124df5c88b9a669a14f6cd7f6c559980d067020326cb732459a08e98664736f6c63430008070033697066733a2f2f516d6633794c714c4532447770764e344d6d50797937626b4347585a467a6638454a50526f596965624a4e3936582f000000000000000000000000bc49de68bcbd164574847a7ced47e7475179c76b0000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000029

Deployed Bytecode

0x6080604052600436106102c95760003560e01c806370a0823111610175578063b88d4fde116100dc578063d5abeb0111610095578063efb863601161006f578063efb8636014610b83578063f2fde38b14610bc0578063f85061ca14610be9578063fe95989714610c14576102c9565b8063d5abeb0114610ade578063e985e9c514610b09578063ef21e96014610b46576102c9565b8063b88d4fde146109aa578063c06f8d68146109d3578063c3a7cf9f14610a10578063c467201e14610a4d578063c87b56dd14610a78578063cba8a95a14610ab5576102c9565b80639a7c8e691161012e5780639a7c8e6914610895578063a0712d68146108c0578063a22cb465146108dc578063a2e9147714610905578063abf9b5a814610930578063afdc16bd1461096d576102c9565b806370a0823114610771578063715018a6146107ae5780637fb9c3d2146107c557806385e5d72b146108025780638da5cb5b1461083f57806395d89b411461086a576102c9565b80634156658511610234578063580092d4116101ed5780636352211e116101c75780636352211e146106b557806363fe5cca146106f2578063659419a41461071b5780636c0360eb14610746576102c9565b8063580092d4146106345780635d148e5c1461065f57806362f4fb2d1461068a576102c9565b8063415665851461050057806342842e0e1461052957806347301d37146105525780634dc1dbec1461058f5780634f6ccce7146105ba57806353833b1d146105f7576102c9565b806318160ddd1161028657806318160ddd146103de57806323b872dd146104095780632f745c591461043257806330438ede1461046f57806331b5b907146104ac5780633a2f0907146104d5576102c9565b806301f56997146102ce57806301ffc9a7146102f957806306fdde0314610336578063081812fc14610361578063095ea7b31461039e5780631602a124146103c7575b600080fd5b3480156102da57600080fd5b506102e3610c3d565b6040516102f091906149c3565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b9190613ed1565b610c61565b60405161032d91906145eb565b60405180910390f35b34801561034257600080fd5b5061034b610cdb565b6040516103589190614621565b60405180910390f35b34801561036d57600080fd5b5061038860048036038101906103839190613f74565b610d6d565b6040516103959190614562565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613e91565b610df2565b005b3480156103d357600080fd5b506103dc610f0a565b005b3480156103ea57600080fd5b506103f3610faa565b60405161040091906149c3565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613d7b565b610fb7565b005b34801561043e57600080fd5b5061045960048036038101906104549190613e91565b611017565b60405161046691906149c3565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613d0e565b6110bc565b6040516104a391906145eb565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190613f2b565b6110dc565b005b3480156104e157600080fd5b506104ea6111e3565b6040516104f791906149c3565b60405180910390f35b34801561050c57600080fd5b5061052760048036038101906105229190613d0e565b611207565b005b34801561053557600080fd5b50610550600480360381019061054b9190613d7b565b611371565b005b34801561055e57600080fd5b5061057960048036038101906105749190613f74565b611391565b6040516105869190614562565b60405180910390f35b34801561059b57600080fd5b506105a46113d0565b6040516105b191906149c3565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613f74565b6113db565b6040516105ee91906149c3565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613d0e565b61144c565b60405161062b91906149c3565b60405180910390f35b34801561064057600080fd5b50610649611464565b6040516106569190614606565b60405180910390f35b34801561066b57600080fd5b506106746114d8565b60405161068191906145eb565b60405180910390f35b34801561069657600080fd5b5061069f6114eb565b6040516106ac91906149c3565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613f74565b6114f1565b6040516106e99190614562565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190613d0e565b6115a3565b005b34801561072757600080fd5b506107306116ca565b60405161073d9190614562565b60405180910390f35b34801561075257600080fd5b5061075b6116ee565b6040516107689190614621565b60405180910390f35b34801561077d57600080fd5b5061079860048036038101906107939190613d0e565b61177c565b6040516107a591906149c3565b60405180910390f35b3480156107ba57600080fd5b506107c3611834565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190613d0e565b6118bc565b6040516107f991906149c3565b60405180910390f35b34801561080e57600080fd5b5061082960048036038101906108249190613d0e565b6118d4565b60405161083691906145c9565b60405180910390f35b34801561084b57600080fd5b50610854611984565b6040516108619190614562565b60405180910390f35b34801561087657600080fd5b5061087f6119ae565b60405161088c9190614621565b60405180910390f35b3480156108a157600080fd5b506108aa611a40565b6040516108b791906145eb565b60405180910390f35b6108da60048036038101906108d59190613f74565b611a53565b005b3480156108e857600080fd5b5061090360048036038101906108fe9190613e51565b611dfe565b005b34801561091157600080fd5b5061091a611f7f565b60405161092791906145eb565b60405180910390f35b34801561093c57600080fd5b5061095760048036038101906109529190613d0e565b611feb565b60405161096491906145eb565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f9190613f74565b61200b565b6040516109a191906145eb565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190613dce565b612035565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190613f74565b612097565b604051610a079190614562565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a329190613d0e565b6120d6565b604051610a4491906145eb565b60405180910390f35b348015610a5957600080fd5b50610a626123c0565b604051610a6f91906145eb565b60405180910390f35b348015610a8457600080fd5b50610a9f6004803603810190610a9a9190613f74565b6123d3565b604051610aac9190614621565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613e91565b61247a565b005b348015610aea57600080fd5b50610af36125e4565b604051610b0091906149c3565b60405180910390f35b348015610b1557600080fd5b50610b306004803603810190610b2b9190613d3b565b612608565b604051610b3d91906145eb565b60405180910390f35b348015610b5257600080fd5b50610b6d6004803603810190610b689190613d0e565b61269c565b604051610b7a91906145eb565b60405180910390f35b348015610b8f57600080fd5b50610baa6004803603810190610ba59190613f74565b612737565b604051610bb791906145eb565b60405180910390f35b348015610bcc57600080fd5b50610be76004803603810190610be29190613d0e565b612757565b005b348015610bf557600080fd5b50610bfe61284f565b604051610c0b91906149c3565b60405180910390f35b348015610c2057600080fd5b50610c3b6004803603810190610c369190613e91565b612855565b005b7f000000000000000000000000000000000000000000000000000000000000001481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cd45750610cd3826129bf565b5b9050919050565b606060008054610cea90614cc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d1690614cc1565b8015610d635780601f10610d3857610100808354040283529160200191610d63565b820191906000526020600020905b815481529060010190602001808311610d4657829003601f168201915b5050505050905090565b6000610d7882612aa1565b610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae90614803565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610dfd826114f1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e65906148e3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e8d612b0d565b73ffffffffffffffffffffffffffffffffffffffff161480610ebc5750610ebb81610eb6612b0d565b612608565b5b610efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef290614763565b60405180910390fd5b610f058383612b15565b505050565b610f12612b0d565b73ffffffffffffffffffffffffffffffffffffffff16610f30611984565b73ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614843565b60405180910390fd5b6001601460006101000a81548160ff02191690831515021790555042600f81905550565b6000600880549050905090565b610fc8610fc2612b0d565b82612bce565b611007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffe90614903565b60405180910390fd5b611012838383612cac565b505050565b60006110228361177c565b8210611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a90614663565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b6110e4612b0d565b73ffffffffffffffffffffffffffffffffffffffff16611102611984565b73ffffffffffffffffffffffffffffffffffffffff1614611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90614843565b60405180910390fd5b60001515601460029054906101000a900460ff161515146111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a5906148a3565b60405180910390fd5b80601590805190602001906111c4929190613b0d565b506001601460026101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000020081565b61120f612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661122d611984565b73ffffffffffffffffffffffffffffffffffffffff1614611283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127a90614843565b60405180910390fd5b60001515601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90614923565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61138c83838360405180602001604052806000815250612035565b505050565b600b81815481106113a157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b66f523226980800081565b60006113e5610faa565b8210611426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141d90614963565b60405180910390fd5b6008828154811061143a57611439614e5a565b5b90600052602060002001549050919050565b600e6020528060005260406000206000915090505481565b600080600f541415611498577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506114d5565b610708600f546114a89190614aec565b42106114b757600090506114d5565b42610708600f546114c89190614aec565b6114d29190614bcd565b90505b90565b601460029054906101000a900460ff1681565b600f5481565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611591906147a3565b60405180910390fd5b80915050919050565b6115ab612b0d565b73ffffffffffffffffffffffffffffffffffffffff166115c9611984565b73ffffffffffffffffffffffffffffffffffffffff161461161f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161690614843565b60405180910390fd5b601460019054906101000a900460ff161561166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166690614943565b60405180910390fd5b60005b600a8110156116ab57611698826001611689610faa565b6116939190614aec565b612f08565b80806116a390614d24565b915050611672565b506001601460016101000a81548160ff02191690831515021790555050565b7f000000000000000000000000bc49de68bcbd164574847a7ced47e7475179c76b81565b601580546116fb90614cc1565b80601f016020809104026020016040519081016040528092919081815260200182805461172790614cc1565b80156117745780601f1061174957610100808354040283529160200191611774565b820191906000526020600020905b81548152906001019060200180831161175757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490614783565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61183c612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661185a611984565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790614843565b60405180910390fd5b6118ba6000612f1e565b565b600d6020528060005260406000206000915090505481565b606060006118e18361177c565b67ffffffffffffffff8111156118fa576118f9614e89565b5b6040519080825280602002602001820160405280156119285781602001602082028036833780820191505090505b50905060005b6119378461177c565b81101561197a576119488482611017565b82828151811061195b5761195a614e5a565b5b602002602001018181525050808061197290614d24565b91505061192e565b5080915050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119bd90614cc1565b80601f01602080910402602001604051908101604052809291908181526020018280546119e990614cc1565b8015611a365780601f10611a0b57610100808354040283529160200191611a36565b820191906000526020600020905b815481529060010190602001808311611a1957829003601f168201915b5050505050905090565b601460019054906101000a900460ff1681565b6000611a5d610faa565b9050601460009054906101000a900460ff16611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa5906149a3565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000014821115611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b08906148c3565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000008008282611b3e9190614aec565b1115611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690614823565b60405180910390fd5b66f523226980800082611b929190614b73565b341015611bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcb90614983565b60405180910390fd5b611bdd3361269c565b8015611be95750600182145b15611ca557600160136000828254611c019190614aec565b925050819055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000611c7b600185611c769190614aec565b612fe4565b815260200190815260200160002060006101000a81548160ff021916908315150217905550611ced565b611cad611f7f565b611cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce3906147c3565b60405180910390fd5b5b60007f000000000000000000000000bc49de68bcbd164574847a7ced47e7475179c76b73ffffffffffffffffffffffffffffffffffffffff1634604051611d339061454d565b60006040518083038185875af1925050503d8060008114611d70576040519150601f19603f3d011682016040523d82523d6000602084013e611d75565b606091505b5050905080611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db090614723565b60405180910390fd5b60005b83811015611df857611de53382600186611dd69190614aec565b611de09190614aec565b612f08565b8080611df090614d24565b915050611dbc565b50505050565b611e06612b0d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b90614703565b60405180910390fd5b8060056000611e81612b0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f2e612b0d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f7391906145eb565b60405180910390a35050565b6000601460009054906101000a900460ff168015611f9f57506000600f54115b8015611fe657507f0000000000000000000000000000000000000000000000000000000000000200601354101580611fe55750600f5461070842611fe39190614bcd565b115b5b905090565b60106020528060005260406000206000915054906101000a900460ff1681565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b612046612040612b0d565b83612bce565b612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207c90614903565b60405180910390fd5b61209184848484613044565b50505050565b600c81815481106120a757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600090505b600b80549050811015612222576000600b828154811061210157612100614e5a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016121ac9190614562565b60206040518083038186803b1580156121c457600080fd5b505afa1580156121d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fc9190613fa1565b1061220d57600193505050506123bb565b5050808061221a90614d24565b9150506120de565b5060005b600c8054905081101561236a576000600c828154811061224957612248614e5a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808273ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016122f49190614562565b60206040518083038186803b15801561230c57600080fd5b505afa158015612320573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123449190613fa1565b1061235557600193505050506123bb565b5050808061236290614d24565b915050612226565b50601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b601460009054906101000a900460ff1681565b60606123de82612aa1565b61241d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241490614883565b60405180910390fd5b60006124276130a0565b905060008151116124475760405180602001604052806000815250612472565b8061245184613132565b604051602001612462929190614529565b6040516020818303038152906040525b915050919050565b612482612b0d565b73ffffffffffffffffffffffffffffffffffffffff166124a0611984565b73ffffffffffffffffffffffffffffffffffffffff16146124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90614843565b60405180910390fd5b60008111612539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090614643565b60405180910390fd5b600c829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b7f000000000000000000000000000000000000000000000000000000000000080081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006126a7826120d6565b8015612703575060001515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b801561273057507f0000000000000000000000000000000000000000000000000000000000000200601354105b9050919050565b60126020528060005260406000206000915054906101000a900460ff1681565b61275f612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661277d611984565b73ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614843565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a906146a3565b60405180910390fd5b61284c81612f1e565b50565b60135481565b61285d612b0d565b73ffffffffffffffffffffffffffffffffffffffff1661287b611984565b73ffffffffffffffffffffffffffffffffffffffff16146128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c890614843565b60405180910390fd5b60008111612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90614643565b60405180910390fd5b600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a8a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a9a5750612a9982613293565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612b88836114f1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612bd982612aa1565b612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f90614743565b60405180910390fd5b6000612c23836114f1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c9257508373ffffffffffffffffffffffffffffffffffffffff16612c7a84610d6d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612ca35750612ca28185612608565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ccc826114f1565b73ffffffffffffffffffffffffffffffffffffffff1614612d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1990614863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d89906146e3565b60405180910390fd5b612d9d8383836132fd565b612da8600082612b15565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df89190614bcd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4f9190614aec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612f1a82612f1583612fe4565b613411565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f00000000000000000000000000000000000000000000000000000000000008007f0000000000000000000000000000000000000000000000000000000000000029836130339190614aec565b61303d9190614d6d565b9050919050565b61304f848484612cac565b61305b8484848461342f565b61309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309190614683565b60405180910390fd5b50505050565b6060601580546130af90614cc1565b80601f01602080910402602001604051908101604052809291908181526020018280546130db90614cc1565b80156131285780601f106130fd57610100808354040283529160200191613128565b820191906000526020600020905b81548152906001019060200180831161310b57829003601f168201915b5050505050905090565b6060600082141561317a576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061328e565b600082905060005b600082146131ac57808061319590614d24565b915050600a826131a59190614b42565b9150613182565b60008167ffffffffffffffff8111156131c8576131c7614e89565b5b6040519080825280601f01601f1916602001820160405280156131fa5781602001600182028036833780820191505090505b5090505b60008514613287576001826132139190614bcd565b9150600a856132229190614d6d565b603061322e9190614aec565b60f81b81838151811061324457613243614e5a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132809190614b42565b94506131fe565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6133088383836135c6565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561334b57613346816135cb565b61338a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613389576133888382613614565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133cd576133c881613781565b61340c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461340b5761340a8282613852565b5b5b505050565b61342b8282604051806020016040528060008152506138d1565b5050565b60006134508473ffffffffffffffffffffffffffffffffffffffff1661392c565b156135b9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613479612b0d565b8786866040518563ffffffff1660e01b815260040161349b949392919061457d565b602060405180830381600087803b1580156134b557600080fd5b505af19250505080156134e657506040513d601f19601f820116820180604052508101906134e39190613efe565b60015b613569573d8060008114613516576040519150601f19603f3d011682016040523d82523d6000602084013e61351b565b606091505b50600081511415613561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355890614683565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135be565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136218461177c565b61362b9190614bcd565b9050600060076000848152602001908152602001600020549050818114613710576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137959190614bcd565b90506000600960008481526020019081526020016000205490506000600883815481106137c5576137c4614e5a565b5b9060005260206000200154905080600883815481106137e7576137e6614e5a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061383657613835614e2b565b5b6001900381819060005260206000200160009055905550505050565b600061385d8361177c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6138db838361393f565b6138e8600084848461342f565b613927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391e90614683565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a6906147e3565b60405180910390fd5b6139b881612aa1565b156139f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139ef906146c3565b60405180910390fd5b613a04600083836132fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a549190614aec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613b1990614cc1565b90600052602060002090601f016020900481019282613b3b5760008555613b82565b82601f10613b5457805160ff1916838001178555613b82565b82800160010185558215613b82579182015b82811115613b81578251825591602001919060010190613b66565b5b509050613b8f9190613b93565b5090565b5b80821115613bac576000816000905550600101613b94565b5090565b6000613bc3613bbe84614a03565b6149de565b905082815260208101848484011115613bdf57613bde614ebd565b5b613bea848285614c7f565b509392505050565b6000613c05613c0084614a34565b6149de565b905082815260208101848484011115613c2157613c20614ebd565b5b613c2c848285614c7f565b509392505050565b600081359050613c4381615596565b92915050565b600081359050613c58816155ad565b92915050565b600081359050613c6d816155c4565b92915050565b600081519050613c82816155c4565b92915050565b600082601f830112613c9d57613c9c614eb8565b5b8135613cad848260208601613bb0565b91505092915050565b600082601f830112613ccb57613cca614eb8565b5b8135613cdb848260208601613bf2565b91505092915050565b600081359050613cf3816155db565b92915050565b600081519050613d08816155db565b92915050565b600060208284031215613d2457613d23614ec7565b5b6000613d3284828501613c34565b91505092915050565b60008060408385031215613d5257613d51614ec7565b5b6000613d6085828601613c34565b9250506020613d7185828601613c34565b9150509250929050565b600080600060608486031215613d9457613d93614ec7565b5b6000613da286828701613c34565b9350506020613db386828701613c34565b9250506040613dc486828701613ce4565b9150509250925092565b60008060008060808587031215613de857613de7614ec7565b5b6000613df687828801613c34565b9450506020613e0787828801613c34565b9350506040613e1887828801613ce4565b925050606085013567ffffffffffffffff811115613e3957613e38614ec2565b5b613e4587828801613c88565b91505092959194509250565b60008060408385031215613e6857613e67614ec7565b5b6000613e7685828601613c34565b9250506020613e8785828601613c49565b9150509250929050565b60008060408385031215613ea857613ea7614ec7565b5b6000613eb685828601613c34565b9250506020613ec785828601613ce4565b9150509250929050565b600060208284031215613ee757613ee6614ec7565b5b6000613ef584828501613c5e565b91505092915050565b600060208284031215613f1457613f13614ec7565b5b6000613f2284828501613c73565b91505092915050565b600060208284031215613f4157613f40614ec7565b5b600082013567ffffffffffffffff811115613f5f57613f5e614ec2565b5b613f6b84828501613cb6565b91505092915050565b600060208284031215613f8a57613f89614ec7565b5b6000613f9884828501613ce4565b91505092915050565b600060208284031215613fb757613fb6614ec7565b5b6000613fc584828501613cf9565b91505092915050565b6000613fda838361450b565b60208301905092915050565b613fef81614c01565b82525050565b600061400082614a75565b61400a8185614aa3565b935061401583614a65565b8060005b8381101561404657815161402d8882613fce565b975061403883614a96565b925050600181019050614019565b5085935050505092915050565b61405c81614c13565b82525050565b600061406d82614a80565b6140778185614ab4565b9350614087818560208601614c8e565b61409081614ecc565b840191505092915050565b6140a481614c4b565b82525050565b60006140b582614a8b565b6140bf8185614ad0565b93506140cf818560208601614c8e565b6140d881614ecc565b840191505092915050565b60006140ee82614a8b565b6140f88185614ae1565b9350614108818560208601614c8e565b80840191505092915050565b6000614121601683614ad0565b915061412c82614edd565b602082019050919050565b6000614144602b83614ad0565b915061414f82614f06565b604082019050919050565b6000614167603283614ad0565b915061417282614f55565b604082019050919050565b600061418a602683614ad0565b915061419582614fa4565b604082019050919050565b60006141ad601c83614ad0565b91506141b882614ff3565b602082019050919050565b60006141d0602483614ad0565b91506141db8261501c565b604082019050919050565b60006141f3601983614ad0565b91506141fe8261506b565b602082019050919050565b6000614216601d83614ad0565b915061422182615094565b602082019050919050565b6000614239602c83614ad0565b9150614244826150bd565b604082019050919050565b600061425c603883614ad0565b91506142678261510c565b604082019050919050565b600061427f602a83614ad0565b915061428a8261515b565b604082019050919050565b60006142a2602983614ad0565b91506142ad826151aa565b604082019050919050565b60006142c5602083614ad0565b91506142d0826151f9565b602082019050919050565b60006142e8602083614ad0565b91506142f382615222565b602082019050919050565b600061430b602c83614ad0565b91506143168261524b565b604082019050919050565b600061432e601c83614ad0565b91506143398261529a565b602082019050919050565b6000614351602083614ad0565b915061435c826152c3565b602082019050919050565b6000614374602983614ad0565b915061437f826152ec565b604082019050919050565b6000614397602f83614ad0565b91506143a28261533b565b604082019050919050565b60006143ba601a83614ad0565b91506143c58261538a565b602082019050919050565b60006143dd602f83614ad0565b91506143e8826153b3565b604082019050919050565b6000614400602183614ad0565b915061440b82615402565b604082019050919050565b6000614423600083614ac5565b915061442e82615451565b600082019050919050565b6000614446603183614ad0565b915061445182615454565b604082019050919050565b6000614469601b83614ad0565b9150614474826154a3565b602082019050919050565b600061448c601b83614ad0565b9150614497826154cc565b602082019050919050565b60006144af602c83614ad0565b91506144ba826154f5565b604082019050919050565b60006144d2601583614ad0565b91506144dd82615544565b602082019050919050565b60006144f5601783614ad0565b91506145008261556d565b602082019050919050565b61451481614c75565b82525050565b61452381614c75565b82525050565b600061453582856140e3565b915061454182846140e3565b91508190509392505050565b600061455882614416565b9150819050919050565b60006020820190506145776000830184613fe6565b92915050565b60006080820190506145926000830187613fe6565b61459f6020830186613fe6565b6145ac604083018561451a565b81810360608301526145be8184614062565b905095945050505050565b600060208201905081810360008301526145e38184613ff5565b905092915050565b60006020820190506146006000830184614053565b92915050565b600060208201905061461b600083018461409b565b92915050565b6000602082019050818103600083015261463b81846140aa565b905092915050565b6000602082019050818103600083015261465c81614114565b9050919050565b6000602082019050818103600083015261467c81614137565b9050919050565b6000602082019050818103600083015261469c8161415a565b9050919050565b600060208201905081810360008301526146bc8161417d565b9050919050565b600060208201905081810360008301526146dc816141a0565b9050919050565b600060208201905081810360008301526146fc816141c3565b9050919050565b6000602082019050818103600083015261471c816141e6565b9050919050565b6000602082019050818103600083015261473c81614209565b9050919050565b6000602082019050818103600083015261475c8161422c565b9050919050565b6000602082019050818103600083015261477c8161424f565b9050919050565b6000602082019050818103600083015261479c81614272565b9050919050565b600060208201905081810360008301526147bc81614295565b9050919050565b600060208201905081810360008301526147dc816142b8565b9050919050565b600060208201905081810360008301526147fc816142db565b9050919050565b6000602082019050818103600083015261481c816142fe565b9050919050565b6000602082019050818103600083015261483c81614321565b9050919050565b6000602082019050818103600083015261485c81614344565b9050919050565b6000602082019050818103600083015261487c81614367565b9050919050565b6000602082019050818103600083015261489c8161438a565b9050919050565b600060208201905081810360008301526148bc816143ad565b9050919050565b600060208201905081810360008301526148dc816143d0565b9050919050565b600060208201905081810360008301526148fc816143f3565b9050919050565b6000602082019050818103600083015261491c81614439565b9050919050565b6000602082019050818103600083015261493c8161445c565b9050919050565b6000602082019050818103600083015261495c8161447f565b9050919050565b6000602082019050818103600083015261497c816144a2565b9050919050565b6000602082019050818103600083015261499c816144c5565b9050919050565b600060208201905081810360008301526149bc816144e8565b9050919050565b60006020820190506149d8600083018461451a565b92915050565b60006149e86149f9565b90506149f48282614cf3565b919050565b6000604051905090565b600067ffffffffffffffff821115614a1e57614a1d614e89565b5b614a2782614ecc565b9050602081019050919050565b600067ffffffffffffffff821115614a4f57614a4e614e89565b5b614a5882614ecc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614af782614c75565b9150614b0283614c75565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b3757614b36614d9e565b5b828201905092915050565b6000614b4d82614c75565b9150614b5883614c75565b925082614b6857614b67614dcd565b5b828204905092915050565b6000614b7e82614c75565b9150614b8983614c75565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bc257614bc1614d9e565b5b828202905092915050565b6000614bd882614c75565b9150614be383614c75565b925082821015614bf657614bf5614d9e565b5b828203905092915050565b6000614c0c82614c55565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cac578082015181840152602081019050614c91565b83811115614cbb576000848401525b50505050565b60006002820490506001821680614cd957607f821691505b60208210811415614ced57614cec614dfc565b5b50919050565b614cfc82614ecc565b810181811067ffffffffffffffff82111715614d1b57614d1a614e89565b5b80604052505050565b6000614d2f82614c75565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d6257614d61614d9e565b5b600182019050919050565b6000614d7882614c75565b9150614d8383614c75565b925082614d9357614d92614dcd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6d696e42616c616e6365206d757374206265203e203000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5472616e7366657220746f206665652077616c6c6574206661696c6564000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420656c696769626c6520746f207072652d6d696e74600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204a696d73206c65667420746f206d696e7400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f43616e206f6e6c7920736574204261736520555249206f6e6365000000000000600082015250565b7f54686572652069732061206c696d6974206f6e206d696e74696e6720746f6f2060008201527f6d616e7920617420612074696d65210000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4164647265737320616c72656164792077686974656c69737465640000000000600082015250565b7f446576204d696e74205065726d616e656e746c79204c6f636b65640000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b7f4d696e74206973206e6f7420616c6c6f77656420796574000000000000000000600082015250565b61559f81614c01565b81146155aa57600080fd5b50565b6155b681614c13565b81146155c157600080fd5b50565b6155cd81614c1f565b81146155d857600080fd5b50565b6155e481614c75565b81146155ef57600080fd5b5056fea2646970667358221220c4f7c4f124df5c88b9a669a14f6cd7f6c559980d067020326cb732459a08e98664736f6c63430008070033

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

000000000000000000000000bc49de68bcbd164574847a7ced47e7475179c76b0000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000029

-----Decoded View---------------
Arg [0] : feeWallet (address): 0xbC49de68bCBD164574847A7ced47e7475179C76B
Arg [1] : preMintSupply_ (uint256): 512
Arg [2] : maxSupply_ (uint256): 2048
Arg [3] : maxMintPerTransaction_ (uint256): 20
Arg [4] : obfuscationOffset (uint256): 41

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000bc49de68bcbd164574847a7ced47e7475179c76b
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000800
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000029


Deployed Bytecode Sourcemap

46176:10122:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46592:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34805:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21698:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23257:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22780:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47619:113;;;;;;;;;;;;;:::i;:::-;;35445;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24147:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35113:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46789:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56103:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46549:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48186:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24557:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46224:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46416:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35635:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46359:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48716:276;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47016:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46694:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21392:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51258:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46470:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47054:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21122:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45449:94;;;;;;;;;;;;;:::i;:::-;;46305:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49889:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44798:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21867:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46978:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48998:883;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23550:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48504:206;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46730:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48385:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24813:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46264:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50345:623;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46942:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22042:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47738:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46510:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23916:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50163:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46846:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45698:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46904:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47965:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46592:46;;;:::o;34805:224::-;34907:4;34946:35;34931:50;;;:11;:50;;;;:90;;;;34985:36;35009:11;34985:23;:36::i;:::-;34931:90;34924:97;;34805:224;;;:::o;21698:100::-;21752:13;21785:5;21778:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21698:100;:::o;23257:221::-;23333:7;23361:16;23369:7;23361;:16::i;:::-;23353:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23446:15;:24;23462:7;23446:24;;;;;;;;;;;;;;;;;;;;;23439:31;;23257:221;;;:::o;22780:411::-;22861:13;22877:23;22892:7;22877:14;:23::i;:::-;22861:39;;22925:5;22919:11;;:2;:11;;;;22911:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23019:5;23003:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23028:37;23045:5;23052:12;:10;:12::i;:::-;23028:16;:37::i;:::-;23003:62;22981:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23162:21;23171:2;23175:7;23162:8;:21::i;:::-;22850:341;22780:411;;:::o;47619:113::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47681:4:::1;47667:11;;:18;;;;;;;;;;;;;;;;;;47711:15;47692:16;:34;;;;47619:113::o:0;35445:::-;35506:7;35533:10;:17;;;;35526:24;;35445:113;:::o;24147:339::-;24342:41;24361:12;:10;:12::i;:::-;24375:7;24342:18;:41::i;:::-;24334:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24450:28;24460:4;24466:2;24470:7;24450:9;:28::i;:::-;24147:339;;;:::o;35113:256::-;35210:7;35246:23;35263:5;35246:16;:23::i;:::-;35238:5;:31;35230:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35335:12;:19;35348:5;35335:19;;;;;;;;;;;;;;;:26;35355:5;35335:26;;;;;;;;;;;;35328:33;;35113:256;;;;:::o;46789:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;56103:190::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56199:5:::1;56182:22;;:13;;;;;;;;;;;:22;;;56174:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;56252:8;56242:7;:18;;;;;;;;;;;;:::i;:::-;;56283:4;56267:13;;:20;;;;;;;;;;;;;;;;;;56103:190:::0;:::o;46549:38::-;;;:::o;48186:193::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48293:5:::1;48260:38;;:21;:29;48282:6;48260:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;48252:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;48369:4;48337:21;:29;48359:6;48337:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;48186:193:::0;:::o;24557:185::-;24695:39;24712:4;24718:2;24722:7;24695:39;;;;;;;;;;;;:16;:39::i;:::-;24557:185;;;:::o;46224:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46416:49::-;46454:11;46416:49;:::o;35635:233::-;35710:7;35746:30;:28;:30::i;:::-;35738:5;:38;35730:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35843:10;35854:5;35843:17;;;;;;;;:::i;:::-;;;;;;;;;;35836:24;;35635:233;;;:::o;46359:50::-;;;;;;;;;;;;;;;;;:::o;48716:276::-;48765:6;48804:1;48784:16;;:21;48780:53;;;48823:2;48816:9;;;;48780:53;48881:10;48862:16;;:29;;;;:::i;:::-;48843:15;:48;48839:79;;48909:1;48902:8;;;;48839:79;48970:15;48957:10;48938:16;;:29;;;;:::i;:::-;:47;;;;:::i;:::-;48924:62;;48716:276;;:::o;47016:33::-;;;;;;;;;;;;;:::o;46694:31::-;;;;:::o;21392:239::-;21464:7;21484:13;21500:7;:16;21508:7;21500:16;;;;;;;;;;;;;;;;;;;;;21484:32;;21552:1;21535:19;;:5;:19;;;;21527:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21618:5;21611:12;;;21392:239;;;:::o;51258:250::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51333:13:::1;;;;;;;;;;;51332:14;51324:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;51390:9;51385:91;51409:2;51405:1;:6;51385:91;;;51429:39;51439:9;51466:1;51450:13;:11;:13::i;:::-;:17;;;;:::i;:::-;51429:9;:39::i;:::-;51413:3;;;;;:::i;:::-;;;;51385:91;;;;51498:4;51482:13;;:20;;;;;;;;;;;;;;;;;;51258:250:::0;:::o;46470:35::-;;;:::o;47054:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21122:208::-;21194:7;21239:1;21222:19;;:5;:19;;;;21214:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21306:9;:16;21316:5;21306:16;;;;;;;;;;;;;;;;21299:23;;21122:208;;;:::o;45449:94::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45514:21:::1;45532:1;45514:9;:21::i;:::-;45449:94::o:0;46305:49::-;;;;;;;;;;;;;;;;;:::o;49889:268::-;49944:16;49969:20;50006:17;50016:6;50006:9;:17::i;:::-;49992:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49969:55;;50036:9;50031:104;50055:17;50065:6;50055:9;:17::i;:::-;50051:1;:21;50031:104;;;50097:30;50117:6;50125:1;50097:19;:30::i;:::-;50088:3;50092:1;50088:6;;;;;;;;:::i;:::-;;;;;;;:39;;;;;50074:3;;;;;:::i;:::-;;;;50031:104;;;;50148:3;50141:10;;;49889:268;;;:::o;44798:87::-;44844:7;44871:6;;;;;;;;;;;44864:13;;44798:87;:::o;21867:104::-;21923:13;21956:7;21949:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21867:104;:::o;46978:33::-;;;;;;;;;;;;;:::o;48998:883::-;49045:19;49067:13;:11;:13::i;:::-;49045:35;;49095:11;;;;;;;;;;;49087:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;49154:21;49149:1;:26;;49141:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;49261:9;49256:1;49242:11;:15;;;;:::i;:::-;:28;;49234:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46454:11;49331:1;:15;;;;:::i;:::-;49318:9;:28;;49310:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49385:22;49396:10;49385;:22::i;:::-;:32;;;;;49416:1;49411;:6;49385:32;49381:275;;;49446:1;49428:14;;:19;;;;;;;:::i;:::-;;;;;;;;49490:4;49456:19;:31;49476:10;49456:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;49557:4;49503:18;:51;49522:31;49551:1;49537:11;:15;;;;:::i;:::-;49522:14;:31::i;:::-;49503:51;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;49381:275;;;49592:19;:17;:19::i;:::-;49584:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49381:275;49665:12;49683:10;:15;;49706:9;49683:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49664:56;;;49735:7;49727:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49790:9;49785:91;49809:1;49805;:5;49785:91;;;49826:42;49836:10;49866:1;49862;49848:11;:15;;;;:::i;:::-;:19;;;;:::i;:::-;49826:9;:42::i;:::-;49812:3;;;;;:::i;:::-;;;;49785:91;;;;49038:843;;48998:883;:::o;23550:295::-;23665:12;:10;:12::i;:::-;23653:24;;:8;:24;;;;23645:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23765:8;23720:18;:32;23739:12;:10;:12::i;:::-;23720:32;;;;;;;;;;;;;;;:42;23753:8;23720:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23818:8;23789:48;;23804:12;:10;:12::i;:::-;23789:48;;;23828:8;23789:48;;;;;;:::i;:::-;;;;;;;;23550:295;;:::o;48504:206::-;48554:4;48574:11;;;;;;;;;;;:35;;;;;48608:1;48589:16;;:20;48574:35;:130;;;;;48639:13;48621:14;;:31;;:82;;;;48687:16;;48674:10;48656:15;:28;;;;:::i;:::-;:47;48621:82;48574:130;48567:137;;48504:206;:::o;46730:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;48385:113::-;48445:4;48465:18;:27;48484:7;48465:27;;;;;;;;;;;;;;;;;;;;;48458:34;;48385:113;;;:::o;24813:328::-;24988:41;25007:12;:10;:12::i;:::-;25021:7;24988:18;:41::i;:::-;24980:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25094:39;25108:4;25114:2;25118:7;25127:5;25094:13;:39::i;:::-;24813:328;;;;:::o;46264:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50345:623::-;50403:4;50421:9;50433:1;50421:13;;50416:243;50440:18;:25;;;;50436:1;:29;50416:243;;;50481:13;50497:18;50516:1;50497:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50481:37;;50527:14;50544:13;:20;50558:5;50544:20;;;;;;;;;;;;;;;;50527:37;;50612:6;50584:5;50577:23;;;50601:6;50577:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;50573:79;;50638:4;50631:11;;;;;;;50573:79;50472:187;;50467:3;;;;;:::i;:::-;;;;50416:243;;;;50672:9;50667:251;50691:19;:26;;;;50687:1;:30;50667:251;;;50733:14;50751:19;50771:1;50751:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50733:40;;50782:14;50799;:22;50814:6;50799:22;;;;;;;;;;;;;;;;50782:39;;50871:6;50842;50834:25;;;50860:6;50834:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;50830:81;;50897:4;50890:11;;;;;;;50830:81;50724:194;;50719:3;;;;;:::i;:::-;;;;50667:251;;;;50933:21;:29;50955:6;50933:29;;;;;;;;;;;;;;;;;;;;;;;;;50926:36;;50345:623;;;;:::o;46942:31::-;;;;;;;;;;;;;:::o;22042:334::-;22115:13;22149:16;22157:7;22149;:16::i;:::-;22141:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22230:21;22254:10;:8;:10::i;:::-;22230:34;;22306:1;22288:7;22282:21;:25;:86;;;;;;;;;;;;;;;;;22334:7;22343:18;:7;:16;:18::i;:::-;22317:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22282:86;22275:93;;;22042:334;;;:::o;47738:221::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47844:1:::1;47831:10;:14;47823:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;47879:19;47904:6;47879:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47943:10;47918:14;:22;47933:6;47918:22;;;;;;;;;;;;;;;:35;;;;47738:221:::0;;:::o;46510:34::-;;;:::o;23916:164::-;24013:4;24037:18;:25;24056:5;24037:25;;;;;;;;;;;;;;;:35;24063:8;24037:35;;;;;;;;;;;;;;;;;;;;;;;;;24030:42;;23916:164;;;;:::o;50163:176::-;50220:4;50240:19;50252:6;50240:11;:19::i;:::-;:59;;;;;50294:5;50263:36;;:19;:27;50283:6;50263:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;50240:59;:93;;;;;50320:13;50303:14;;:30;50240:93;50233:100;;50163:176;;;:::o;46846:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;45698:192::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45807:1:::1;45787:22;;:8;:22;;;;45779:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45863:19;45873:8;45863:9;:19::i;:::-;45698:192:::0;:::o;46904:33::-;;;;:::o;47965:215::-;45029:12;:10;:12::i;:::-;45018:23;;:7;:5;:7::i;:::-;:23;;;45010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48069:1:::1;48056:10;:14;48048:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;48104:18;48128:5;48104:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48164:10;48141:13;:20;48155:5;48141:20;;;;;;;;;;;;;;;:33;;;;47965:215:::0;;:::o;20753:305::-;20855:4;20907:25;20892:40;;;:11;:40;;;;:105;;;;20964:33;20949:48;;;:11;:48;;;;20892:105;:158;;;;21014:36;21038:11;21014:23;:36::i;:::-;20892:158;20872:178;;20753:305;;;:::o;26651:127::-;26716:4;26768:1;26740:30;;:7;:16;26748:7;26740:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26733:37;;26651:127;;;:::o;16161:98::-;16214:7;16241:10;16234:17;;16161:98;:::o;30633:174::-;30735:2;30708:15;:24;30724:7;30708:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30791:7;30787:2;30753:46;;30762:23;30777:7;30762:14;:23::i;:::-;30753:46;;;;;;;;;;;;30633:174;;:::o;26945:348::-;27038:4;27063:16;27071:7;27063;:16::i;:::-;27055:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27139:13;27155:23;27170:7;27155:14;:23::i;:::-;27139:39;;27208:5;27197:16;;:7;:16;;;:51;;;;27241:7;27217:31;;:20;27229:7;27217:11;:20::i;:::-;:31;;;27197:51;:87;;;;27252:32;27269:5;27276:7;27252:16;:32::i;:::-;27197:87;27189:96;;;26945:348;;;;:::o;29937:578::-;30096:4;30069:31;;:23;30084:7;30069:14;:23::i;:::-;:31;;;30061:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30179:1;30165:16;;:2;:16;;;;30157:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30235:39;30256:4;30262:2;30266:7;30235:20;:39::i;:::-;30339:29;30356:1;30360:7;30339:8;:29::i;:::-;30400:1;30381:9;:15;30391:4;30381:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30429:1;30412:9;:13;30422:2;30412:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30460:2;30441:7;:16;30449:7;30441:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30499:7;30495:2;30480:27;;30489:4;30480:27;;;;;;;;;;;;29937:578;;;:::o;50974:137::-;51054:51;51070:9;51081:23;51096:7;51081:14;:23::i;:::-;51054:15;:51::i;:::-;50974:137;;:::o;45898:173::-;45954:16;45973:6;;;;;;;;;;;45954:25;;45999:8;45990:6;;:17;;;;;;;;;;;;;;;;;;46054:8;46023:40;;46044:8;46023:40;;;;;;;;;;;;45943:128;45898:173;:::o;51117:135::-;51181:7;51237:9;51215:18;51205:7;:28;;;;:::i;:::-;51204:42;;;;:::i;:::-;51197:49;;51117:135;;;:::o;26023:315::-;26180:28;26190:4;26196:2;26200:7;26180:9;:28::i;:::-;26227:48;26250:4;26256:2;26260:7;26269:5;26227:22;:48::i;:::-;26219:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26023:315;;;;:::o;55993:104::-;56053:13;56084:7;56077:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55993:104;:::o;16692:723::-;16748:13;16978:1;16969:5;:10;16965:53;;;16996:10;;;;;;;;;;;;;;;;;;;;;16965:53;17028:12;17043:5;17028:20;;17059:14;17084:78;17099:1;17091:4;:9;17084:78;;17117:8;;;;;:::i;:::-;;;;17148:2;17140:10;;;;;:::i;:::-;;;17084:78;;;17172:19;17204:6;17194:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17172:39;;17222:154;17238:1;17229:5;:10;17222:154;;17266:1;17256:11;;;;;:::i;:::-;;;17333:2;17325:5;:10;;;;:::i;:::-;17312:2;:24;;;;:::i;:::-;17299:39;;17282:6;17289;17282:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17362:2;17353:11;;;;;:::i;:::-;;;17222:154;;;17400:6;17386:21;;;;;16692:723;;;;:::o;19253:157::-;19338:4;19377:25;19362:40;;;:11;:40;;;;19355:47;;19253:157;;;:::o;36481:589::-;36625:45;36652:4;36658:2;36662:7;36625:26;:45::i;:::-;36703:1;36687:18;;:4;:18;;;36683:187;;;36722:40;36754:7;36722:31;:40::i;:::-;36683:187;;;36792:2;36784:10;;:4;:10;;;36780:90;;36811:47;36844:4;36850:7;36811:32;:47::i;:::-;36780:90;36683:187;36898:1;36884:16;;:2;:16;;;36880:183;;;36917:45;36954:7;36917:36;:45::i;:::-;36880:183;;;36990:4;36984:10;;:2;:10;;;36980:83;;37011:40;37039:2;37043:7;37011:27;:40::i;:::-;36980:83;36880:183;36481:589;;;:::o;27635:110::-;27711:26;27721:2;27725:7;27711:26;;;;;;;;;;;;:9;:26::i;:::-;27635:110;;:::o;31372:799::-;31527:4;31548:15;:2;:13;;;:15::i;:::-;31544:620;;;31600:2;31584:36;;;31621:12;:10;:12::i;:::-;31635:4;31641:7;31650:5;31584:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31580:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31843:1;31826:6;:13;:18;31822:272;;;31869:60;;;;;;;;;;:::i;:::-;;;;;;;;31822:272;32044:6;32038:13;32029:6;32025:2;32021:15;32014:38;31580:529;31717:41;;;31707:51;;;:6;:51;;;;31700:58;;;;;31544:620;32148:4;32141:11;;31372:799;;;;;;;:::o;32743:126::-;;;;:::o;37793:164::-;37897:10;:17;;;;37870:15;:24;37886:7;37870:24;;;;;;;;;;;:44;;;;37925:10;37941:7;37925:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37793:164;:::o;38584:988::-;38850:22;38900:1;38875:22;38892:4;38875:16;:22::i;:::-;:26;;;;:::i;:::-;38850:51;;38912:18;38933:17;:26;38951:7;38933:26;;;;;;;;;;;;38912:47;;39080:14;39066:10;:28;39062:328;;39111:19;39133:12;:18;39146:4;39133:18;;;;;;;;;;;;;;;:34;39152:14;39133:34;;;;;;;;;;;;39111:56;;39217:11;39184:12;:18;39197:4;39184:18;;;;;;;;;;;;;;;:30;39203:10;39184:30;;;;;;;;;;;:44;;;;39334:10;39301:17;:30;39319:11;39301:30;;;;;;;;;;;:43;;;;39096:294;39062:328;39486:17;:26;39504:7;39486:26;;;;;;;;;;;39479:33;;;39530:12;:18;39543:4;39530:18;;;;;;;;;;;;;;;:34;39549:14;39530:34;;;;;;;;;;;39523:41;;;38665:907;;38584:988;;:::o;39867:1079::-;40120:22;40165:1;40145:10;:17;;;;:21;;;;:::i;:::-;40120:46;;40177:18;40198:15;:24;40214:7;40198:24;;;;;;;;;;;;40177:45;;40549:19;40571:10;40582:14;40571:26;;;;;;;;:::i;:::-;;;;;;;;;;40549:48;;40635:11;40610:10;40621;40610:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40746:10;40715:15;:28;40731:11;40715:28;;;;;;;;;;;:41;;;;40887:15;:24;40903:7;40887:24;;;;;;;;;;;40880:31;;;40922:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39938:1008;;;39867:1079;:::o;37371:221::-;37456:14;37473:20;37490:2;37473:16;:20::i;:::-;37456:37;;37531:7;37504:12;:16;37517:2;37504:16;;;;;;;;;;;;;;;:24;37521:6;37504:24;;;;;;;;;;;:34;;;;37578:6;37549:17;:26;37567:7;37549:26;;;;;;;;;;;:35;;;;37445:147;37371:221;;:::o;27972:321::-;28102:18;28108:2;28112:7;28102:5;:18::i;:::-;28153:54;28184:1;28188:2;28192:7;28201:5;28153:22;:54::i;:::-;28131:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27972:321;;;:::o;8199:387::-;8259:4;8467:12;8534:7;8522:20;8514:28;;8577:1;8570:4;:8;8563:15;;;8199:387;;;:::o;28629:382::-;28723:1;28709:16;;:2;:16;;;;28701:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28782:16;28790:7;28782;:16::i;:::-;28781:17;28773:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28844:45;28873:1;28877:2;28881:7;28844:20;:45::i;:::-;28919:1;28902:9;:13;28912:2;28902:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28950:2;28931:7;:16;28939:7;28931:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28995:7;28991:2;28970:33;;28987:1;28970:33;;;;;;;;;;;;28629:382;;:::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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:327::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6002:1;6027:52;6071:7;6062:6;6051:9;6047:22;6027:52;:::i;:::-;6017:62;;5973:116;5769:327;;;;:::o;6102:349::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:63;6426:7;6417:6;6406:9;6402:22;6371:63;:::i;:::-;6361:73;;6317:127;6102:349;;;;:::o;6457:509::-;6526:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6729:1;6718:9;6714:17;6701:31;6759:18;6751:6;6748:30;6745:117;;;6781:79;;:::i;:::-;6745:117;6886:63;6941:7;6932:6;6921:9;6917:22;6886:63;:::i;:::-;6876:73;;6672:287;6457:509;;;;:::o;6972:329::-;7031:6;7080:2;7068:9;7059:7;7055:23;7051:32;7048:119;;;7086:79;;:::i;:::-;7048:119;7206:1;7231:53;7276:7;7267:6;7256:9;7252:22;7231:53;:::i;:::-;7221:63;;7177:117;6972:329;;;;:::o;7307:351::-;7377:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:64;7633:7;7624:6;7613:9;7609:22;7577:64;:::i;:::-;7567:74;;7523:128;7307:351;;;;:::o;7664:179::-;7733:10;7754:46;7796:3;7788:6;7754:46;:::i;:::-;7832:4;7827:3;7823:14;7809:28;;7664:179;;;;:::o;7849:118::-;7936:24;7954:5;7936:24;:::i;:::-;7931:3;7924:37;7849:118;;:::o;8003:732::-;8122:3;8151:54;8199:5;8151:54;:::i;:::-;8221:86;8300:6;8295:3;8221:86;:::i;:::-;8214:93;;8331:56;8381:5;8331:56;:::i;:::-;8410:7;8441:1;8426:284;8451:6;8448:1;8445:13;8426:284;;;8527:6;8521:13;8554:63;8613:3;8598:13;8554:63;:::i;:::-;8547:70;;8640:60;8693:6;8640:60;:::i;:::-;8630:70;;8486:224;8473:1;8470;8466:9;8461:14;;8426:284;;;8430:14;8726:3;8719:10;;8127:608;;;8003:732;;;;:::o;8741:109::-;8822:21;8837:5;8822:21;:::i;:::-;8817:3;8810:34;8741:109;;:::o;8856:360::-;8942:3;8970:38;9002:5;8970:38;:::i;:::-;9024:70;9087:6;9082:3;9024:70;:::i;:::-;9017:77;;9103:52;9148:6;9143:3;9136:4;9129:5;9125:16;9103:52;:::i;:::-;9180:29;9202:6;9180:29;:::i;:::-;9175:3;9171:39;9164:46;;8946:270;8856:360;;;;:::o;9222:115::-;9307:23;9324:5;9307:23;:::i;:::-;9302:3;9295:36;9222:115;;:::o;9343:364::-;9431:3;9459:39;9492:5;9459:39;:::i;:::-;9514:71;9578:6;9573:3;9514:71;:::i;:::-;9507:78;;9594:52;9639:6;9634:3;9627:4;9620:5;9616:16;9594:52;:::i;:::-;9671:29;9693:6;9671:29;:::i;:::-;9666:3;9662:39;9655:46;;9435:272;9343:364;;;;:::o;9713:377::-;9819:3;9847:39;9880:5;9847:39;:::i;:::-;9902:89;9984:6;9979:3;9902:89;:::i;:::-;9895:96;;10000:52;10045:6;10040:3;10033:4;10026:5;10022:16;10000:52;:::i;:::-;10077:6;10072:3;10068:16;10061:23;;9823:267;9713:377;;;;:::o;10096:366::-;10238:3;10259:67;10323:2;10318:3;10259:67;:::i;:::-;10252:74;;10335:93;10424:3;10335:93;:::i;:::-;10453:2;10448:3;10444:12;10437:19;;10096:366;;;:::o;10468:::-;10610:3;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10707:93;10796:3;10707:93;:::i;:::-;10825:2;10820:3;10816:12;10809:19;;10468:366;;;:::o;10840:::-;10982:3;11003:67;11067:2;11062:3;11003:67;:::i;:::-;10996:74;;11079:93;11168:3;11079:93;:::i;:::-;11197:2;11192:3;11188:12;11181:19;;10840:366;;;:::o;11212:::-;11354:3;11375:67;11439:2;11434:3;11375:67;:::i;:::-;11368:74;;11451:93;11540:3;11451:93;:::i;:::-;11569:2;11564:3;11560:12;11553:19;;11212:366;;;:::o;11584:::-;11726:3;11747:67;11811:2;11806:3;11747:67;:::i;:::-;11740:74;;11823:93;11912:3;11823:93;:::i;:::-;11941:2;11936:3;11932:12;11925:19;;11584:366;;;:::o;11956:::-;12098:3;12119:67;12183:2;12178:3;12119:67;:::i;:::-;12112:74;;12195:93;12284:3;12195:93;:::i;:::-;12313:2;12308:3;12304:12;12297:19;;11956:366;;;:::o;12328:::-;12470:3;12491:67;12555:2;12550:3;12491:67;:::i;:::-;12484:74;;12567:93;12656:3;12567:93;:::i;:::-;12685:2;12680:3;12676:12;12669:19;;12328:366;;;:::o;12700:::-;12842:3;12863:67;12927:2;12922:3;12863:67;:::i;:::-;12856:74;;12939:93;13028:3;12939:93;:::i;:::-;13057:2;13052:3;13048:12;13041:19;;12700:366;;;:::o;13072:::-;13214:3;13235:67;13299:2;13294:3;13235:67;:::i;:::-;13228:74;;13311:93;13400:3;13311:93;:::i;:::-;13429:2;13424:3;13420:12;13413:19;;13072:366;;;:::o;13444:::-;13586:3;13607:67;13671:2;13666:3;13607:67;:::i;:::-;13600:74;;13683:93;13772:3;13683:93;:::i;:::-;13801:2;13796:3;13792:12;13785:19;;13444:366;;;:::o;13816:::-;13958:3;13979:67;14043:2;14038:3;13979:67;:::i;:::-;13972:74;;14055:93;14144:3;14055:93;:::i;:::-;14173:2;14168:3;14164:12;14157:19;;13816:366;;;:::o;14188:::-;14330:3;14351:67;14415:2;14410:3;14351:67;:::i;:::-;14344:74;;14427:93;14516:3;14427:93;:::i;:::-;14545:2;14540:3;14536:12;14529:19;;14188:366;;;:::o;14560:::-;14702:3;14723:67;14787:2;14782:3;14723:67;:::i;:::-;14716:74;;14799:93;14888:3;14799:93;:::i;:::-;14917:2;14912:3;14908:12;14901:19;;14560:366;;;:::o;14932:::-;15074:3;15095:67;15159:2;15154:3;15095:67;:::i;:::-;15088:74;;15171:93;15260:3;15171:93;:::i;:::-;15289:2;15284:3;15280:12;15273:19;;14932:366;;;:::o;15304:::-;15446:3;15467:67;15531:2;15526:3;15467:67;:::i;:::-;15460:74;;15543:93;15632:3;15543:93;:::i;:::-;15661:2;15656:3;15652:12;15645:19;;15304:366;;;:::o;15676:::-;15818:3;15839:67;15903:2;15898:3;15839:67;:::i;:::-;15832:74;;15915:93;16004:3;15915:93;:::i;:::-;16033:2;16028:3;16024:12;16017:19;;15676:366;;;:::o;16048:::-;16190:3;16211:67;16275:2;16270:3;16211:67;:::i;:::-;16204:74;;16287:93;16376:3;16287:93;:::i;:::-;16405:2;16400:3;16396:12;16389:19;;16048:366;;;:::o;16420:::-;16562:3;16583:67;16647:2;16642:3;16583:67;:::i;:::-;16576:74;;16659:93;16748:3;16659:93;:::i;:::-;16777:2;16772:3;16768:12;16761:19;;16420:366;;;:::o;16792:::-;16934:3;16955:67;17019:2;17014:3;16955:67;:::i;:::-;16948:74;;17031:93;17120:3;17031:93;:::i;:::-;17149:2;17144:3;17140:12;17133:19;;16792:366;;;:::o;17164:::-;17306:3;17327:67;17391:2;17386:3;17327:67;:::i;:::-;17320:74;;17403:93;17492:3;17403:93;:::i;:::-;17521:2;17516:3;17512:12;17505:19;;17164:366;;;:::o;17536:::-;17678:3;17699:67;17763:2;17758:3;17699:67;:::i;:::-;17692:74;;17775:93;17864:3;17775:93;:::i;:::-;17893:2;17888:3;17884:12;17877:19;;17536:366;;;:::o;17908:::-;18050:3;18071:67;18135:2;18130:3;18071:67;:::i;:::-;18064:74;;18147:93;18236:3;18147:93;:::i;:::-;18265:2;18260:3;18256:12;18249:19;;17908:366;;;:::o;18280:398::-;18439:3;18460:83;18541:1;18536:3;18460:83;:::i;:::-;18453:90;;18552:93;18641:3;18552:93;:::i;:::-;18670:1;18665:3;18661:11;18654:18;;18280:398;;;:::o;18684:366::-;18826:3;18847:67;18911:2;18906:3;18847:67;:::i;:::-;18840:74;;18923:93;19012:3;18923:93;:::i;:::-;19041:2;19036:3;19032:12;19025:19;;18684:366;;;:::o;19056:::-;19198:3;19219:67;19283:2;19278:3;19219:67;:::i;:::-;19212:74;;19295:93;19384:3;19295:93;:::i;:::-;19413:2;19408:3;19404:12;19397:19;;19056:366;;;:::o;19428:::-;19570:3;19591:67;19655:2;19650:3;19591:67;:::i;:::-;19584:74;;19667:93;19756:3;19667:93;:::i;:::-;19785:2;19780:3;19776:12;19769:19;;19428:366;;;:::o;19800:::-;19942:3;19963:67;20027:2;20022:3;19963:67;:::i;:::-;19956:74;;20039:93;20128:3;20039:93;:::i;:::-;20157:2;20152:3;20148:12;20141:19;;19800:366;;;:::o;20172:::-;20314:3;20335:67;20399:2;20394:3;20335:67;:::i;:::-;20328:74;;20411:93;20500:3;20411:93;:::i;:::-;20529:2;20524:3;20520:12;20513:19;;20172:366;;;:::o;20544:::-;20686:3;20707:67;20771:2;20766:3;20707:67;:::i;:::-;20700:74;;20783:93;20872:3;20783:93;:::i;:::-;20901:2;20896:3;20892:12;20885:19;;20544:366;;;:::o;20916:108::-;20993:24;21011:5;20993:24;:::i;:::-;20988:3;20981:37;20916:108;;:::o;21030:118::-;21117:24;21135:5;21117:24;:::i;:::-;21112:3;21105:37;21030:118;;:::o;21154:435::-;21334:3;21356:95;21447:3;21438:6;21356:95;:::i;:::-;21349:102;;21468:95;21559:3;21550:6;21468:95;:::i;:::-;21461:102;;21580:3;21573:10;;21154:435;;;;;:::o;21595:379::-;21779:3;21801:147;21944:3;21801:147;:::i;:::-;21794:154;;21965:3;21958:10;;21595:379;;;:::o;21980:222::-;22073:4;22111:2;22100:9;22096:18;22088:26;;22124:71;22192:1;22181:9;22177:17;22168:6;22124:71;:::i;:::-;21980:222;;;;:::o;22208:640::-;22403:4;22441:3;22430:9;22426:19;22418:27;;22455:71;22523:1;22512:9;22508:17;22499:6;22455:71;:::i;:::-;22536:72;22604:2;22593:9;22589:18;22580:6;22536:72;:::i;:::-;22618;22686:2;22675:9;22671:18;22662:6;22618:72;:::i;:::-;22737:9;22731:4;22727:20;22722:2;22711:9;22707:18;22700:48;22765:76;22836:4;22827:6;22765:76;:::i;:::-;22757:84;;22208:640;;;;;;;:::o;22854:373::-;22997:4;23035:2;23024:9;23020:18;23012:26;;23084:9;23078:4;23074:20;23070:1;23059:9;23055:17;23048:47;23112:108;23215:4;23206:6;23112:108;:::i;:::-;23104:116;;22854:373;;;;:::o;23233:210::-;23320:4;23358:2;23347:9;23343:18;23335:26;;23371:65;23433:1;23422:9;23418:17;23409:6;23371:65;:::i;:::-;23233:210;;;;:::o;23449:218::-;23540:4;23578:2;23567:9;23563:18;23555:26;;23591:69;23657:1;23646:9;23642:17;23633:6;23591:69;:::i;:::-;23449:218;;;;:::o;23673:313::-;23786:4;23824:2;23813:9;23809:18;23801:26;;23873:9;23867:4;23863:20;23859:1;23848:9;23844:17;23837:47;23901:78;23974:4;23965:6;23901:78;:::i;:::-;23893:86;;23673:313;;;;:::o;23992:419::-;24158:4;24196:2;24185:9;24181:18;24173:26;;24245:9;24239:4;24235:20;24231:1;24220:9;24216:17;24209:47;24273:131;24399:4;24273:131;:::i;:::-;24265:139;;23992:419;;;:::o;24417:::-;24583:4;24621:2;24610:9;24606:18;24598:26;;24670:9;24664:4;24660:20;24656:1;24645:9;24641:17;24634:47;24698:131;24824:4;24698:131;:::i;:::-;24690:139;;24417:419;;;:::o;24842:::-;25008:4;25046:2;25035:9;25031:18;25023:26;;25095:9;25089:4;25085:20;25081:1;25070:9;25066:17;25059:47;25123:131;25249:4;25123:131;:::i;:::-;25115:139;;24842:419;;;:::o;25267:::-;25433:4;25471:2;25460:9;25456:18;25448:26;;25520:9;25514:4;25510:20;25506:1;25495:9;25491:17;25484:47;25548:131;25674:4;25548:131;:::i;:::-;25540:139;;25267:419;;;:::o;25692:::-;25858:4;25896:2;25885:9;25881:18;25873:26;;25945:9;25939:4;25935:20;25931:1;25920:9;25916:17;25909:47;25973:131;26099:4;25973:131;:::i;:::-;25965:139;;25692:419;;;:::o;26117:::-;26283:4;26321:2;26310:9;26306:18;26298:26;;26370:9;26364:4;26360:20;26356:1;26345:9;26341:17;26334:47;26398:131;26524:4;26398:131;:::i;:::-;26390:139;;26117:419;;;:::o;26542:::-;26708:4;26746:2;26735:9;26731:18;26723:26;;26795:9;26789:4;26785:20;26781:1;26770:9;26766:17;26759:47;26823:131;26949:4;26823:131;:::i;:::-;26815:139;;26542:419;;;:::o;26967:::-;27133:4;27171:2;27160:9;27156:18;27148:26;;27220:9;27214:4;27210:20;27206:1;27195:9;27191:17;27184:47;27248:131;27374:4;27248:131;:::i;:::-;27240:139;;26967:419;;;:::o;27392:::-;27558:4;27596:2;27585:9;27581:18;27573:26;;27645:9;27639:4;27635:20;27631:1;27620:9;27616:17;27609:47;27673:131;27799:4;27673:131;:::i;:::-;27665:139;;27392:419;;;:::o;27817:::-;27983:4;28021:2;28010:9;28006:18;27998:26;;28070:9;28064:4;28060:20;28056:1;28045:9;28041:17;28034:47;28098:131;28224:4;28098:131;:::i;:::-;28090:139;;27817:419;;;:::o;28242:::-;28408:4;28446:2;28435:9;28431:18;28423:26;;28495:9;28489:4;28485:20;28481:1;28470:9;28466:17;28459:47;28523:131;28649:4;28523:131;:::i;:::-;28515:139;;28242:419;;;:::o;28667:::-;28833:4;28871:2;28860:9;28856:18;28848:26;;28920:9;28914:4;28910:20;28906:1;28895:9;28891:17;28884:47;28948:131;29074:4;28948:131;:::i;:::-;28940:139;;28667:419;;;:::o;29092:::-;29258:4;29296:2;29285:9;29281:18;29273:26;;29345:9;29339:4;29335:20;29331:1;29320:9;29316:17;29309:47;29373:131;29499:4;29373:131;:::i;:::-;29365:139;;29092:419;;;:::o;29517:::-;29683:4;29721:2;29710:9;29706:18;29698:26;;29770:9;29764:4;29760:20;29756:1;29745:9;29741:17;29734:47;29798:131;29924:4;29798:131;:::i;:::-;29790:139;;29517:419;;;:::o;29942:::-;30108:4;30146:2;30135:9;30131:18;30123:26;;30195:9;30189:4;30185:20;30181:1;30170:9;30166:17;30159:47;30223:131;30349:4;30223:131;:::i;:::-;30215:139;;29942:419;;;:::o;30367:::-;30533:4;30571:2;30560:9;30556:18;30548:26;;30620:9;30614:4;30610:20;30606:1;30595:9;30591:17;30584:47;30648:131;30774:4;30648:131;:::i;:::-;30640:139;;30367:419;;;:::o;30792:::-;30958:4;30996:2;30985:9;30981:18;30973:26;;31045:9;31039:4;31035:20;31031:1;31020:9;31016:17;31009:47;31073:131;31199:4;31073:131;:::i;:::-;31065:139;;30792:419;;;:::o;31217:::-;31383:4;31421:2;31410:9;31406:18;31398:26;;31470:9;31464:4;31460:20;31456:1;31445:9;31441:17;31434:47;31498:131;31624:4;31498:131;:::i;:::-;31490:139;;31217:419;;;:::o;31642:::-;31808:4;31846:2;31835:9;31831:18;31823:26;;31895:9;31889:4;31885:20;31881:1;31870:9;31866:17;31859:47;31923:131;32049:4;31923:131;:::i;:::-;31915:139;;31642:419;;;:::o;32067:::-;32233:4;32271:2;32260:9;32256:18;32248:26;;32320:9;32314:4;32310:20;32306:1;32295:9;32291:17;32284:47;32348:131;32474:4;32348:131;:::i;:::-;32340:139;;32067:419;;;:::o;32492:::-;32658:4;32696:2;32685:9;32681:18;32673:26;;32745:9;32739:4;32735:20;32731:1;32720:9;32716:17;32709:47;32773:131;32899:4;32773:131;:::i;:::-;32765:139;;32492:419;;;:::o;32917:::-;33083:4;33121:2;33110:9;33106:18;33098:26;;33170:9;33164:4;33160:20;33156:1;33145:9;33141:17;33134:47;33198:131;33324:4;33198:131;:::i;:::-;33190:139;;32917:419;;;:::o;33342:::-;33508:4;33546:2;33535:9;33531:18;33523:26;;33595:9;33589:4;33585:20;33581:1;33570:9;33566:17;33559:47;33623:131;33749:4;33623:131;:::i;:::-;33615:139;;33342:419;;;:::o;33767:::-;33933:4;33971:2;33960:9;33956:18;33948:26;;34020:9;34014:4;34010:20;34006:1;33995:9;33991:17;33984:47;34048:131;34174:4;34048:131;:::i;:::-;34040:139;;33767:419;;;:::o;34192:::-;34358:4;34396:2;34385:9;34381:18;34373:26;;34445:9;34439:4;34435:20;34431:1;34420:9;34416:17;34409:47;34473:131;34599:4;34473:131;:::i;:::-;34465:139;;34192:419;;;:::o;34617:::-;34783:4;34821:2;34810:9;34806:18;34798:26;;34870:9;34864:4;34860:20;34856:1;34845:9;34841:17;34834:47;34898:131;35024:4;34898:131;:::i;:::-;34890:139;;34617:419;;;:::o;35042:::-;35208:4;35246:2;35235:9;35231:18;35223:26;;35295:9;35289:4;35285:20;35281:1;35270:9;35266:17;35259:47;35323:131;35449:4;35323:131;:::i;:::-;35315:139;;35042:419;;;:::o;35467:::-;35633:4;35671:2;35660:9;35656:18;35648:26;;35720:9;35714:4;35710:20;35706:1;35695:9;35691:17;35684:47;35748:131;35874:4;35748:131;:::i;:::-;35740:139;;35467:419;;;:::o;35892:222::-;35985:4;36023:2;36012:9;36008:18;36000:26;;36036:71;36104:1;36093:9;36089:17;36080:6;36036:71;:::i;:::-;35892:222;;;;:::o;36120:129::-;36154:6;36181:20;;:::i;:::-;36171:30;;36210:33;36238:4;36230:6;36210:33;:::i;:::-;36120:129;;;:::o;36255:75::-;36288:6;36321:2;36315:9;36305:19;;36255:75;:::o;36336:307::-;36397:4;36487:18;36479:6;36476:30;36473:56;;;36509:18;;:::i;:::-;36473:56;36547:29;36569:6;36547:29;:::i;:::-;36539:37;;36631:4;36625;36621:15;36613:23;;36336:307;;;:::o;36649:308::-;36711:4;36801:18;36793:6;36790:30;36787:56;;;36823:18;;:::i;:::-;36787:56;36861:29;36883:6;36861:29;:::i;:::-;36853:37;;36945:4;36939;36935:15;36927:23;;36649:308;;;:::o;36963:132::-;37030:4;37053:3;37045:11;;37083:4;37078:3;37074:14;37066:22;;36963:132;;;:::o;37101:114::-;37168:6;37202:5;37196:12;37186:22;;37101:114;;;:::o;37221:98::-;37272:6;37306:5;37300:12;37290:22;;37221:98;;;:::o;37325:99::-;37377:6;37411:5;37405:12;37395:22;;37325:99;;;:::o;37430:113::-;37500:4;37532;37527:3;37523:14;37515:22;;37430:113;;;:::o;37549:184::-;37648:11;37682:6;37677:3;37670:19;37722:4;37717:3;37713:14;37698:29;;37549:184;;;;:::o;37739:168::-;37822:11;37856:6;37851:3;37844:19;37896:4;37891:3;37887:14;37872:29;;37739:168;;;;:::o;37913:147::-;38014:11;38051:3;38036:18;;37913:147;;;;:::o;38066:169::-;38150:11;38184:6;38179:3;38172:19;38224:4;38219:3;38215:14;38200:29;;38066:169;;;;:::o;38241:148::-;38343:11;38380:3;38365:18;;38241:148;;;;:::o;38395:305::-;38435:3;38454:20;38472:1;38454:20;:::i;:::-;38449:25;;38488:20;38506:1;38488:20;:::i;:::-;38483:25;;38642:1;38574:66;38570:74;38567:1;38564:81;38561:107;;;38648:18;;:::i;:::-;38561:107;38692:1;38689;38685:9;38678:16;;38395:305;;;;:::o;38706:185::-;38746:1;38763:20;38781:1;38763:20;:::i;:::-;38758:25;;38797:20;38815:1;38797:20;:::i;:::-;38792:25;;38836:1;38826:35;;38841:18;;:::i;:::-;38826:35;38883:1;38880;38876:9;38871:14;;38706:185;;;;:::o;38897:348::-;38937:7;38960:20;38978:1;38960:20;:::i;:::-;38955:25;;38994:20;39012:1;38994:20;:::i;:::-;38989:25;;39182:1;39114:66;39110:74;39107:1;39104:81;39099:1;39092:9;39085:17;39081:105;39078:131;;;39189:18;;:::i;:::-;39078:131;39237:1;39234;39230:9;39219:20;;38897:348;;;;:::o;39251:191::-;39291:4;39311:20;39329:1;39311:20;:::i;:::-;39306:25;;39345:20;39363:1;39345:20;:::i;:::-;39340:25;;39384:1;39381;39378:8;39375:34;;;39389:18;;:::i;:::-;39375:34;39434:1;39431;39427:9;39419:17;;39251:191;;;;:::o;39448:96::-;39485:7;39514:24;39532:5;39514:24;:::i;:::-;39503:35;;39448:96;;;:::o;39550:90::-;39584:7;39627:5;39620:13;39613:21;39602:32;;39550:90;;;:::o;39646:149::-;39682:7;39722:66;39715:5;39711:78;39700:89;;39646:149;;;:::o;39801:76::-;39837:7;39866:5;39855:16;;39801:76;;;:::o;39883:126::-;39920:7;39960:42;39953:5;39949:54;39938:65;;39883:126;;;:::o;40015:77::-;40052:7;40081:5;40070:16;;40015:77;;;:::o;40098:154::-;40182:6;40177:3;40172;40159:30;40244:1;40235:6;40230:3;40226:16;40219:27;40098:154;;;:::o;40258:307::-;40326:1;40336:113;40350:6;40347:1;40344:13;40336:113;;;40435:1;40430:3;40426:11;40420:18;40416:1;40411:3;40407:11;40400:39;40372:2;40369:1;40365:10;40360:15;;40336:113;;;40467:6;40464:1;40461:13;40458:101;;;40547:1;40538:6;40533:3;40529:16;40522:27;40458:101;40307:258;40258:307;;;:::o;40571:320::-;40615:6;40652:1;40646:4;40642:12;40632:22;;40699:1;40693:4;40689:12;40720:18;40710:81;;40776:4;40768:6;40764:17;40754:27;;40710:81;40838:2;40830:6;40827:14;40807:18;40804:38;40801:84;;;40857:18;;:::i;:::-;40801:84;40622:269;40571:320;;;:::o;40897:281::-;40980:27;41002:4;40980:27;:::i;:::-;40972:6;40968:40;41110:6;41098:10;41095:22;41074:18;41062:10;41059:34;41056:62;41053:88;;;41121:18;;:::i;:::-;41053:88;41161:10;41157:2;41150:22;40940:238;40897:281;;:::o;41184:233::-;41223:3;41246:24;41264:5;41246:24;:::i;:::-;41237:33;;41292:66;41285:5;41282:77;41279:103;;;41362:18;;:::i;:::-;41279:103;41409:1;41402:5;41398:13;41391:20;;41184:233;;;:::o;41423:176::-;41455:1;41472:20;41490:1;41472:20;:::i;:::-;41467:25;;41506:20;41524:1;41506:20;:::i;:::-;41501:25;;41545:1;41535:35;;41550:18;;:::i;:::-;41535:35;41591:1;41588;41584:9;41579:14;;41423:176;;;;:::o;41605:180::-;41653:77;41650:1;41643:88;41750:4;41747:1;41740:15;41774:4;41771:1;41764:15;41791:180;41839:77;41836:1;41829:88;41936:4;41933:1;41926:15;41960:4;41957:1;41950:15;41977:180;42025:77;42022:1;42015:88;42122:4;42119:1;42112:15;42146:4;42143:1;42136:15;42163:180;42211:77;42208:1;42201:88;42308:4;42305:1;42298:15;42332:4;42329:1;42322:15;42349:180;42397:77;42394:1;42387:88;42494:4;42491:1;42484:15;42518:4;42515:1;42508:15;42535:180;42583:77;42580:1;42573:88;42680:4;42677:1;42670:15;42704:4;42701:1;42694:15;42721:117;42830:1;42827;42820:12;42844:117;42953:1;42950;42943:12;42967:117;43076:1;43073;43066:12;43090:117;43199:1;43196;43189:12;43213:102;43254:6;43305:2;43301:7;43296:2;43289:5;43285:14;43281:28;43271:38;;43213:102;;;:::o;43321:172::-;43461:24;43457:1;43449:6;43445:14;43438:48;43321:172;:::o;43499:230::-;43639:34;43635:1;43627:6;43623:14;43616:58;43708:13;43703:2;43695:6;43691:15;43684:38;43499:230;:::o;43735:237::-;43875:34;43871:1;43863:6;43859:14;43852:58;43944:20;43939:2;43931:6;43927:15;43920:45;43735:237;:::o;43978:225::-;44118:34;44114:1;44106:6;44102:14;44095:58;44187:8;44182:2;44174:6;44170:15;44163:33;43978:225;:::o;44209:178::-;44349:30;44345:1;44337:6;44333:14;44326:54;44209:178;:::o;44393:223::-;44533:34;44529:1;44521:6;44517:14;44510:58;44602:6;44597:2;44589:6;44585:15;44578:31;44393:223;:::o;44622:175::-;44762:27;44758:1;44750:6;44746:14;44739:51;44622:175;:::o;44803:179::-;44943:31;44939:1;44931:6;44927:14;44920:55;44803:179;:::o;44988:231::-;45128:34;45124:1;45116:6;45112:14;45105:58;45197:14;45192:2;45184:6;45180:15;45173:39;44988:231;:::o;45225:243::-;45365:34;45361:1;45353:6;45349:14;45342:58;45434:26;45429:2;45421:6;45417:15;45410:51;45225:243;:::o;45474:229::-;45614:34;45610:1;45602:6;45598:14;45591:58;45683:12;45678:2;45670:6;45666:15;45659:37;45474:229;:::o;45709:228::-;45849:34;45845:1;45837:6;45833:14;45826:58;45918:11;45913:2;45905:6;45901:15;45894:36;45709:228;:::o;45943:182::-;46083:34;46079:1;46071:6;46067:14;46060:58;45943:182;:::o;46131:::-;46271:34;46267:1;46259:6;46255:14;46248:58;46131:182;:::o;46319:231::-;46459:34;46455:1;46447:6;46443:14;46436:58;46528:14;46523:2;46515:6;46511:15;46504:39;46319:231;:::o;46556:178::-;46696:30;46692:1;46684:6;46680:14;46673:54;46556:178;:::o;46740:182::-;46880:34;46876:1;46868:6;46864:14;46857:58;46740:182;:::o;46928:228::-;47068:34;47064:1;47056:6;47052:14;47045:58;47137:11;47132:2;47124:6;47120:15;47113:36;46928:228;:::o;47162:234::-;47302:34;47298:1;47290:6;47286:14;47279:58;47371:17;47366:2;47358:6;47354:15;47347:42;47162:234;:::o;47402:176::-;47542:28;47538:1;47530:6;47526:14;47519:52;47402:176;:::o;47584:234::-;47724:34;47720:1;47712:6;47708:14;47701:58;47793:17;47788:2;47780:6;47776:15;47769:42;47584:234;:::o;47824:220::-;47964:34;47960:1;47952:6;47948:14;47941:58;48033:3;48028:2;48020:6;48016:15;48009:28;47824:220;:::o;48050:114::-;;:::o;48170:236::-;48310:34;48306:1;48298:6;48294:14;48287:58;48379:19;48374:2;48366:6;48362:15;48355:44;48170:236;:::o;48412:177::-;48552:29;48548:1;48540:6;48536:14;48529:53;48412:177;:::o;48595:::-;48735:29;48731:1;48723:6;48719:14;48712:53;48595:177;:::o;48778:231::-;48918:34;48914:1;48906:6;48902:14;48895:58;48987:14;48982:2;48974:6;48970:15;48963:39;48778:231;:::o;49015:171::-;49155:23;49151:1;49143:6;49139:14;49132:47;49015:171;:::o;49192:173::-;49332:25;49328:1;49320:6;49316:14;49309:49;49192:173;:::o;49371:122::-;49444:24;49462:5;49444:24;:::i;:::-;49437:5;49434:35;49424:63;;49483:1;49480;49473:12;49424:63;49371:122;:::o;49499:116::-;49569:21;49584:5;49569:21;:::i;:::-;49562:5;49559:32;49549:60;;49605:1;49602;49595:12;49549:60;49499:116;:::o;49621:120::-;49693:23;49710:5;49693:23;:::i;:::-;49686:5;49683:34;49673:62;;49731:1;49728;49721:12;49673:62;49621:120;:::o;49747:122::-;49820:24;49838:5;49820:24;:::i;:::-;49813:5;49810:35;49800:63;;49859:1;49856;49849:12;49800:63;49747:122;:::o

Swarm Source

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