ETH Price: $2,273.91 (-3.80%)

Token

Phantom Club (PC)
 

Overview

Max Total Supply

1,533 PC

Holders

79

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x468e6e56b1a24677b37c505ec10e42b274e64e96
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:
PhantomClub

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-03-03
*/

// SPDX-License-Identifier: MIT
/**
 * @title Deadhead Apes
 * @author Shahid Ahmed
 * @dev Used for Ethereum projects compatible with OpenSea
 */
pragma solidity ^0.8.0;

interface IERC165 {
    
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin\contracts\token\ERC1155\extensions\IERC1155MetadataURI.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin\contracts\utils\Address.sol

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin\contracts\utils\introspection\ERC165.sol

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

pragma solidity ^0.8.0;

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

// File: @openzeppelin\contracts\token\ERC1155\ERC1155.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;






/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

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

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin\contracts\token\ERC1155\extensions\ERC1155Supply.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

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

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// File: @openzeppelin\contracts\security\Pausable.sol

// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin\contracts\utils\Strings.sol

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

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\cryptography\ECDSA.sol

// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

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

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

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

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

pragma solidity ^0.8.0;

contract PhantomClub is ERC1155Supply, Ownable, Pausable {
    using   ECDSA for bytes32;

    string  public name;
    string  public symbol;
    uint16  public  nonce_SP                                    = 0;
    uint16  public  nonce_PP                                    = 0;

    uint    public constant TOKEN_ID_STANDARDPASS               = 1;
    uint    public TOKEN_PRICE_STANDARDPASS;
    uint16  public MAX_TOKENS_STANDARDPASS;
    uint    public constant TOKEN_ID_PLATINUMPASS               = 2;
    uint    public TOKEN_PRICE_PLATINUMPASS;
    uint16  public MAX_TOKENS_PLATINUMPASS;

    bool    public saleIsActive_STANDARDPASS                    = true;
    bool    public saleIsActive_PLATINUMPASS                    = true;

    
    uint8   public  maxTx;
    uint8   public  maxTxFree;
    uint8   public  maxTxGP;
    uint8   public  maxTxFreeGP                                 = 3;
    uint16  public  maxFree;
    uint16  public  maxFreeGP                                   = 0;


    // Used to ensure each new token id can only be minted once by the owner
    mapping (uint256 => bool) public collectionMinted;
    mapping (uint256 => string) public tokenURI;
    mapping (address => bool) public hasAddressMinted333;

    constructor(
        string memory uriBase,
        string memory _name,
        string memory _symbol,
        uint _TOKEN_PRICE_STANDARDPASS,
        uint _TOKEN_PRICE_PLATINUMPASS,
        uint16 _MAX_TOKENS_STANDARDPASS,
        uint16 _MAX_TOKENS_PLATINUMPASS,
        uint8 _maxTx,
        uint8 _maxTxFree,
        uint8 _maxTxGP,
        uint16 _maxFree
    ) ERC1155(uriBase) {
        name = _name;
        symbol = _symbol;
        TOKEN_PRICE_STANDARDPASS = _TOKEN_PRICE_STANDARDPASS;
        TOKEN_PRICE_PLATINUMPASS = _TOKEN_PRICE_PLATINUMPASS;
        MAX_TOKENS_STANDARDPASS = _MAX_TOKENS_STANDARDPASS;
        MAX_TOKENS_PLATINUMPASS = _MAX_TOKENS_PLATINUMPASS;
        maxTx       = _maxTx;
        maxTxFree   = _maxTxFree;
        maxTxGP     = _maxTxGP;
        maxFree     = _maxFree;
    }

    function uri(uint256 tokenId) public view override returns (string memory) {
        // If no URI exists for the specific id requested, fallback to the default ERC-1155 URI.
        if (bytes(tokenURI[tokenId]).length == 0) {
            return super.uri(tokenId);
        }
        return tokenURI[tokenId];
    }

    function setGlobalURI(string memory newTokenURI) public onlyOwner {
        _setURI(newTokenURI);
    }

    function setSTANDARDPASSSaleState() public onlyOwner {
        saleIsActive_STANDARDPASS = !saleIsActive_STANDARDPASS;
    }

    function setGOLDPASSSaleState() public onlyOwner {
        saleIsActive_PLATINUMPASS = !saleIsActive_PLATINUMPASS;
    }

    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function setMAX_TOKENS_STANDARDPASS(uint16 _newSupply) external onlyOwner {
        MAX_TOKENS_STANDARDPASS = _newSupply;
    }

    function setMAX_TOKENS_GOLDPASS(uint16 _newSupply) external onlyOwner {
        MAX_TOKENS_PLATINUMPASS = _newSupply;
    }

    function setMaxTx(uint8 _newMax) external onlyOwner {
        maxTx = _newMax;
    }

    function setMaxTxFree(uint8 _newMax) external onlyOwner {
        maxTxFree = _newMax;
    }

    function setMaxTxGP(uint8 _newMax) external onlyOwner {
        maxTxGP = _newMax;
    }

    function setMaxTxFreeGP(uint8 _newMax) external onlyOwner {
        maxTxFreeGP = _newMax;
    }

    function setMaxFree(uint16 _newMax) external onlyOwner {
        maxFree = _newMax;
    }

    function setMaxFreeGP(uint16 _newMax) external onlyOwner {
        maxFreeGP = _newMax;
    }

    function setPriceSP(uint _newPrice) external onlyOwner {
        TOKEN_PRICE_STANDARDPASS = _newPrice;
    }

    function setPriceGP(uint _newPrice) external onlyOwner {
        TOKEN_PRICE_PLATINUMPASS = _newPrice;
    }

    function mint_standardpass(uint16 numberOfTokens) external payable {
        require(saleIsActive_STANDARDPASS, "SALE_NOT_ACTIVE");
        require(totalSupply(TOKEN_ID_STANDARDPASS) < MAX_TOKENS_STANDARDPASS, "MAX_TOKEN_SUPPLY_REACHED");
        require(numberOfTokens > 0, "MUST_MINT_AT_LEAST_ONE_TOKEN");
        if (numberOfTokens + nonce_SP <= maxFree) {
            require(numberOfTokens <= maxTxFree || numberOfTokens < 1, "CANT_BUY_MORE_THEN_ALLOWED_FREE");
        }else{
            require(numberOfTokens <= maxTx || numberOfTokens < 1, "CANT_BUY_MORE_THEN_ALLOWED");
            require(TOKEN_PRICE_STANDARDPASS * numberOfTokens == msg.value, "PRICE_WAS_INCORRECT");
        }
        _mint(msg.sender, TOKEN_ID_STANDARDPASS, numberOfTokens, "");
        nonce_SP = nonce_SP + numberOfTokens;
    }

    function mint_goldpass(uint16 numberOfTokens) external payable {
        require(saleIsActive_PLATINUMPASS, "SALE_NOT_ACTIVE");
        require(totalSupply(TOKEN_ID_PLATINUMPASS) < MAX_TOKENS_PLATINUMPASS, "MAX_TOKEN_SUPPLY_REACHED");
        require(numberOfTokens > 0, "MUST_MINT_AT_LEAST_ONE_TOKEN");
        if (numberOfTokens + nonce_SP <= maxFreeGP) {
            require(numberOfTokens <= maxTxFreeGP || numberOfTokens < 1, "CANT_BUY_MORE_THEN_ALLOWED");
        }else{
            require(numberOfTokens <= maxTxGP || numberOfTokens < 1, "CANT_BUY_MORE_THEN_ALLOWED");
            require(TOKEN_PRICE_PLATINUMPASS * numberOfTokens == msg.value, "PRICE_WAS_INCORRECT");
        }
        _mint(msg.sender, TOKEN_ID_PLATINUMPASS, numberOfTokens, "");
        nonce_PP = (nonce_PP + numberOfTokens);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public override {
        require(amount > 0, "AMOUNT_CANNOT_BE_ZERO");
        return super.safeTransferFrom(from, to, id, amount, data);
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }

    function withdraw() external onlyOwner {
        require(address(this).balance > 0, "BALANCE_IS_ZERO");
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uriBase","type":"string"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_TOKEN_PRICE_STANDARDPASS","type":"uint256"},{"internalType":"uint256","name":"_TOKEN_PRICE_PLATINUMPASS","type":"uint256"},{"internalType":"uint16","name":"_MAX_TOKENS_STANDARDPASS","type":"uint16"},{"internalType":"uint16","name":"_MAX_TOKENS_PLATINUMPASS","type":"uint16"},{"internalType":"uint8","name":"_maxTx","type":"uint8"},{"internalType":"uint8","name":"_maxTxFree","type":"uint8"},{"internalType":"uint8","name":"_maxTxGP","type":"uint8"},{"internalType":"uint16","name":"_maxFree","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_TOKENS_PLATINUMPASS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS_STANDARDPASS","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ID_PLATINUMPASS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_ID_STANDARDPASS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PRICE_PLATINUMPASS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PRICE_STANDARDPASS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"collectionMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasAddressMinted333","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFree","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeGP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxFree","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxFreeGP","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxGP","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"numberOfTokens","type":"uint16"}],"name":"mint_goldpass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"numberOfTokens","type":"uint16"}],"name":"mint_standardpass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce_PP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nonce_SP","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive_PLATINUMPASS","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleIsActive_STANDARDPASS","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setGOLDPASSSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newTokenURI","type":"string"}],"name":"setGlobalURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSupply","type":"uint16"}],"name":"setMAX_TOKENS_GOLDPASS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newSupply","type":"uint16"}],"name":"setMAX_TOKENS_STANDARDPASS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newMax","type":"uint16"}],"name":"setMaxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_newMax","type":"uint16"}],"name":"setMaxFreeGP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTxFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTxFreeGP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_newMax","type":"uint8"}],"name":"setMaxTxGP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPriceGP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPriceSP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSTANDARDPASSSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600760006101000a81548161ffff021916908361ffff1602179055506000600760026101000a81548161ffff021916908361ffff1602179055506001600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506003600b60076101000a81548160ff021916908360ff1602179055506000600b600a6101000a81548161ffff021916908361ffff160217905550348015620000bd57600080fd5b5060405162005c5b38038062005c5b8339818101604052810190620000e3919062000487565b8a620000f5816200022a60201b60201c565b50620001166200010a6200024660201b60201c565b6200024e60201b60201c565b6000600460146101000a81548160ff02191690831515021790555089600590805190602001906200014992919062000314565b5088600690805190602001906200016292919062000314565b508760088190555086600a8190555085600960006101000a81548161ffff021916908361ffff16021790555084600b60006101000a81548161ffff021916908361ffff16021790555083600b60046101000a81548160ff021916908360ff16021790555082600b60056101000a81548160ff021916908360ff16021790555081600b60066101000a81548160ff021916908360ff16021790555080600b60086101000a81548161ffff021916908361ffff1602179055505050505050505050505050620007e8565b80600290805190602001906200024292919062000314565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200032290620006ab565b90600052602060002090601f01602090048101928262000346576000855562000392565b82601f106200036157805160ff191683800117855562000392565b8280016001018555821562000392579182015b828111156200039157825182559160200191906001019062000374565b5b509050620003a19190620003a5565b5090565b5b80821115620003c0576000816000905550600101620003a6565b5090565b6000620003db620003d5846200061a565b620005f1565b905082815260208101848484011115620003fa57620003f96200077a565b5b6200040784828562000675565b509392505050565b600082601f83011262000427576200042662000775565b5b815162000439848260208601620003c4565b91505092915050565b60008151905062000453816200079a565b92915050565b6000815190506200046a81620007b4565b92915050565b6000815190506200048181620007ce565b92915050565b60008060008060008060008060008060006101608c8e031215620004b057620004af62000784565b5b60008c015167ffffffffffffffff811115620004d157620004d06200077f565b5b620004df8e828f016200040f565b9b505060208c015167ffffffffffffffff8111156200050357620005026200077f565b5b620005118e828f016200040f565b9a505060408c015167ffffffffffffffff8111156200053557620005346200077f565b5b620005438e828f016200040f565b9950506060620005568e828f0162000459565b9850506080620005698e828f0162000459565b97505060a06200057c8e828f0162000442565b96505060c06200058f8e828f0162000442565b95505060e0620005a28e828f0162000470565b945050610100620005b68e828f0162000470565b935050610120620005ca8e828f0162000470565b925050610140620005de8e828f0162000442565b9150509295989b509295989b9093969950565b6000620005fd62000610565b90506200060b8282620006e1565b919050565b6000604051905090565b600067ffffffffffffffff82111562000638576200063762000746565b5b620006438262000789565b9050602081019050919050565b600061ffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200069557808201518184015260208101905062000678565b83811115620006a5576000848401525b50505050565b60006002820490506001821680620006c457607f821691505b60208210811415620006db57620006da62000717565b5b50919050565b620006ec8262000789565b810181811067ffffffffffffffff821117156200070e576200070d62000746565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620007a58162000650565b8114620007b157600080fd5b50565b620007bf816200065e565b8114620007cb57600080fd5b50565b620007d98162000668565b8114620007e557600080fd5b50565b61546380620007f86000396000f3fe6080604052600436106103195760003560e01c80635d0ed034116101ab578063aa6781f9116100f7578063c87b56dd11610095578063d9a87c121161006f578063d9a87c1214610b4d578063e985e9c514610b76578063f242432a14610bb3578063f2fde38b14610bdc57610319565b8063c87b56dd14610ab7578063cdd49ac814610af4578063d742303114610b1057610319565b8063b9b6b34e116100d1578063b9b6b34e14610a11578063bd85b03914610a28578063c15d0e2114610a65578063c3aed09f14610a8e57610319565b8063aa6781f914610992578063b71854fd146109bb578063b728345b146109e657610319565b80638456cb59116101645780639c8bd5981161013e5780639c8bd598146108f95780639fee7ea814610924578063a22cb4651461094d578063a3ea762f1461097657610319565b80638456cb591461088c5780638da5cb5b146108a357806395d89b41146108ce57610319565b80635d0ed034146107a257806365f48e62146107cd578063679a4389146107f6578063715018a6146108215780637437681e1461083857806377792f251461086357610319565b80633ccfd60b1161026a57806348ee691b116102235780634f558e79116101fd5780634f558e79146106e6578063503ec933146107235780635c975abb1461074e5780635cd8f5261461077957610319565b806348ee691b146106555780634cc766f5146106805780634e1273f4146106a957610319565b80633ccfd60b1461058f5780633f4ba83a146105a6578063422e6702146105bd57806342669069146105e857806345678a5d146105ff578063485a68a31461062a57610319565b80631768c88c116102d75780632aea97aa116102b15780632aea97aa146104d35780632d6c37b4146104fe5780632eb2c2d61461053b578063336f38211461056457610319565b80631768c88c146104545780631a8c46ec1461047d5780631eb17eec146104a857610319565b8062fdd58e1461031e57806301ffc9a71461035b57806306fdde0314610398578063087b0b86146103c35780630d3d0116146103ee5780630e89341c14610417575b600080fd5b34801561032a57600080fd5b5061034560048036038101906103409190613d82565b610c05565b6040516103529190614839565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190613e3a565b610cce565b60405161038f9190614501565b60405180910390f35b3480156103a457600080fd5b506103ad610db0565b6040516103ba919061451c565b60405180910390f35b3480156103cf57600080fd5b506103d8610e3e565b6040516103e5919061481e565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613f37565b610e52565b005b34801561042357600080fd5b5061043e60048036038101906104399190613f0a565b610eec565b60405161044b919061451c565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190613edd565b610fca565b005b34801561048957600080fd5b50610492611066565b60405161049f9190614839565b60405180910390f35b3480156104b457600080fd5b506104bd61106c565b6040516104ca9190614501565b60405180910390f35b3480156104df57600080fd5b506104e861107f565b6040516104f59190614501565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613b6f565b611092565b6040516105329190614501565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613bdc565b6110b2565b005b34801561057057600080fd5b50610579611153565b6040516105869190614839565b60405180910390f35b34801561059b57600080fd5b506105a4611158565b005b3480156105b257600080fd5b506105bb611260565b005b3480156105c957600080fd5b506105d26112e6565b6040516105df919061487d565b60405180910390f35b3480156105f457600080fd5b506105fd6112f9565b005b34801561060b57600080fd5b506106146113a1565b6040516106219190614839565b60405180910390f35b34801561063657600080fd5b5061063f6113a6565b60405161064c919061481e565b60405180910390f35b34801561066157600080fd5b5061066a6113ba565b604051610677919061481e565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190613edd565b6113ce565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190613dc2565b61146a565b6040516106dd91906144a8565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613f0a565b611583565b60405161071a9190614501565b60405180910390f35b34801561072f57600080fd5b50610738611597565b604051610745919061487d565b60405180910390f35b34801561075a57600080fd5b506107636115aa565b6040516107709190614501565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190613edd565b6115c1565b005b3480156107ae57600080fd5b506107b761165d565b6040516107c49190614839565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190613f37565b611663565b005b34801561080257600080fd5b5061080b6116fd565b604051610818919061481e565b60405180910390f35b34801561082d57600080fd5b50610836611711565b005b34801561084457600080fd5b5061084d611799565b60405161085a919061487d565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613f0a565b6117ac565b005b34801561089857600080fd5b506108a1611832565b005b3480156108af57600080fd5b506108b86118b8565b6040516108c591906143cb565b60405180910390f35b3480156108da57600080fd5b506108e36118e2565b6040516108f0919061451c565b60405180910390f35b34801561090557600080fd5b5061090e611970565b60405161091b919061481e565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190613edd565b611984565b005b34801561095957600080fd5b50610974600480360381019061096f9190613d42565b611a20565b005b610990600480360381019061098b9190613edd565b611a36565b005b34801561099e57600080fd5b506109b960048036038101906109b49190613f37565b611ce9565b005b3480156109c757600080fd5b506109d0611d83565b6040516109dd919061487d565b60405180910390f35b3480156109f257600080fd5b506109fb611d96565b604051610a08919061481e565b60405180910390f35b348015610a1d57600080fd5b50610a26611daa565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613f0a565b611e52565b604051610a5c9190614839565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a879190613e94565b611e6f565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab09190613f37565b611ef7565b005b348015610ac357600080fd5b50610ade6004803603810190610ad99190613f0a565b611f91565b604051610aeb919061451c565b60405180910390f35b610b0e6004803603810190610b099190613edd565b612031565b005b348015610b1c57600080fd5b50610b376004803603810190610b329190613f0a565b6122e4565b604051610b449190614501565b60405180910390f35b348015610b5957600080fd5b50610b746004803603810190610b6f9190613f0a565b612304565b005b348015610b8257600080fd5b50610b9d6004803603810190610b989190613b9c565b61238a565b604051610baa9190614501565b60405180910390f35b348015610bbf57600080fd5b50610bda6004803603810190610bd59190613cab565b61241e565b005b348015610be857600080fd5b50610c036004803603810190610bfe9190613b6f565b612475565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d906145be565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d9957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610da95750610da88261256d565b5b9050919050565b60058054610dbd90614bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610de990614bd5565b8015610e365780601f10610e0b57610100808354040283529160200191610e36565b820191906000526020600020905b815481529060010190602001808311610e1957829003601f168201915b505050505081565b600b600a9054906101000a900461ffff1681565b610e5a6125d7565b73ffffffffffffffffffffffffffffffffffffffff16610e786118b8565b73ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec59061471e565b60405180910390fd5b80600b60076101000a81548160ff021916908360ff16021790555050565b60606000600d60008481526020019081526020016000208054610f0e90614bd5565b90501415610f2657610f1f826125df565b9050610fc5565b600d60008381526020019081526020016000208054610f4490614bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7090614bd5565b8015610fbd5780601f10610f9257610100808354040283529160200191610fbd565b820191906000526020600020905b815481529060010190602001808311610fa057829003601f168201915b505050505090505b919050565b610fd26125d7565b73ffffffffffffffffffffffffffffffffffffffff16610ff06118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d9061471e565b60405180910390fd5b80600960006101000a81548161ffff021916908361ffff16021790555050565b60085481565b600b60039054906101000a900460ff1681565b600b60029054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b6110ba6125d7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061110057506110ff856110fa6125d7565b61238a565b5b61113f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111369061469e565b60405180910390fd5b61114c8585858585612673565b5050505050565b600281565b6111606125d7565b73ffffffffffffffffffffffffffffffffffffffff1661117e6118b8565b73ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb9061471e565b60405180910390fd5b60004711611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e906146fe565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561125d573d6000803e3d6000fd5b50565b6112686125d7565b73ffffffffffffffffffffffffffffffffffffffff166112866118b8565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d39061471e565b60405180910390fd5b6112e4612987565b565b600b60069054906101000a900460ff1681565b6113016125d7565b73ffffffffffffffffffffffffffffffffffffffff1661131f6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c9061471e565b60405180910390fd5b600b60029054906101000a900460ff1615600b60026101000a81548160ff021916908315150217905550565b600181565b600b60089054906101000a900461ffff1681565b600960009054906101000a900461ffff1681565b6113d66125d7565b73ffffffffffffffffffffffffffffffffffffffff166113f46118b8565b73ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114419061471e565b60405180910390fd5b80600b60086101000a81548161ffff021916908361ffff16021790555050565b606081518351146114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a7906147be565b60405180910390fd5b6000835167ffffffffffffffff8111156114cd576114cc614d0e565b5b6040519080825280602002602001820160405280156114fb5781602001602082028036833780820191505090505b50905060005b8451811015611578576115488582815181106115205761151f614cdf565b5b602002602001015185838151811061153b5761153a614cdf565b5b6020026020010151610c05565b82828151811061155b5761155a614cdf565b5b6020026020010181815250508061157190614c38565b9050611501565b508091505092915050565b60008061158f83611e52565b119050919050565b600b60059054906101000a900460ff1681565b6000600460149054906101000a900460ff16905090565b6115c96125d7565b73ffffffffffffffffffffffffffffffffffffffff166115e76118b8565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349061471e565b60405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b600a5481565b61166b6125d7565b73ffffffffffffffffffffffffffffffffffffffff166116896118b8565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d69061471e565b60405180910390fd5b80600b60046101000a81548160ff021916908360ff16021790555050565b600760029054906101000a900461ffff1681565b6117196125d7565b73ffffffffffffffffffffffffffffffffffffffff166117376118b8565b73ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117849061471e565b60405180910390fd5b6117976000612a29565b565b600b60049054906101000a900460ff1681565b6117b46125d7565b73ffffffffffffffffffffffffffffffffffffffff166117d26118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f9061471e565b60405180910390fd5b8060088190555050565b61183a6125d7565b73ffffffffffffffffffffffffffffffffffffffff166118586118b8565b73ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a59061471e565b60405180910390fd5b6118b6612aef565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600680546118ef90614bd5565b80601f016020809104026020016040519081016040528092919081815260200182805461191b90614bd5565b80156119685780601f1061193d57610100808354040283529160200191611968565b820191906000526020600020905b81548152906001019060200180831161194b57829003601f168201915b505050505081565b600b60009054906101000a900461ffff1681565b61198c6125d7565b73ffffffffffffffffffffffffffffffffffffffff166119aa6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f79061471e565b60405180910390fd5b80600b600a6101000a81548161ffff021916908361ffff16021790555050565b611a32611a2b6125d7565b8383612b92565b5050565b600b60029054906101000a900460ff16611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c9061473e565b60405180910390fd5b600960009054906101000a900461ffff1661ffff16611aa46001611e52565b10611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb906145fe565b60405180910390fd5b60008161ffff1611611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b22906146be565b60405180910390fd5b600b60089054906101000a900461ffff1661ffff16600760009054906101000a900461ffff1682611b5c91906149e8565b61ffff1611611bd257600b60059054906101000a900460ff1660ff168161ffff16111580611b8e575060018161ffff16105b611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc49061457e565b60405180910390fd5b611c8e565b600b60049054906101000a900460ff1660ff168161ffff16111580611bfb575060018161ffff16105b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c319061475e565b60405180910390fd5b348161ffff16600854611c4d9190614a76565b14611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c849061477e565b60405180910390fd5b5b611cae3360018361ffff1660405180602001604052806000815250612cff565b80600760009054906101000a900461ffff16611cca91906149e8565b600760006101000a81548161ffff021916908361ffff16021790555050565b611cf16125d7565b73ffffffffffffffffffffffffffffffffffffffff16611d0f6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c9061471e565b60405180910390fd5b80600b60056101000a81548160ff021916908360ff16021790555050565b600b60079054906101000a900460ff1681565b600760009054906101000a900461ffff1681565b611db26125d7565b73ffffffffffffffffffffffffffffffffffffffff16611dd06118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061471e565b60405180910390fd5b600b60039054906101000a900460ff1615600b60036101000a81548160ff021916908315150217905550565b600060036000838152602001908152602001600020549050919050565b611e776125d7565b73ffffffffffffffffffffffffffffffffffffffff16611e956118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee29061471e565b60405180910390fd5b611ef481612e95565b50565b611eff6125d7565b73ffffffffffffffffffffffffffffffffffffffff16611f1d6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a9061471e565b60405180910390fd5b80600b60066101000a81548160ff021916908360ff16021790555050565b600d6020528060005260406000206000915090508054611fb090614bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fdc90614bd5565b80156120295780601f10611ffe57610100808354040283529160200191612029565b820191906000526020600020905b81548152906001019060200180831161200c57829003601f168201915b505050505081565b600b60039054906101000a900460ff16612080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120779061473e565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff1661209f6002611e52565b106120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906145fe565b60405180910390fd5b60008161ffff1611612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d906146be565b60405180910390fd5b600b600a9054906101000a900461ffff1661ffff16600760009054906101000a900461ffff168261215791906149e8565b61ffff16116121cd57600b60079054906101000a900460ff1660ff168161ffff16111580612189575060018161ffff16105b6121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061475e565b60405180910390fd5b612289565b600b60069054906101000a900460ff1660ff168161ffff161115806121f6575060018161ffff16105b612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c9061475e565b60405180910390fd5b348161ffff16600a546122489190614a76565b14612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f9061477e565b60405180910390fd5b5b6122a93360028361ffff1660405180602001604052806000815250612cff565b80600760029054906101000a900461ffff166122c591906149e8565b600760026101000a81548161ffff021916908361ffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b61230c6125d7565b73ffffffffffffffffffffffffffffffffffffffff1661232a6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614612380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123779061471e565b60405180910390fd5b80600a8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008211612461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124589061463e565b60405180910390fd5b61246e8585858585612eaf565b5050505050565b61247d6125d7565b73ffffffffffffffffffffffffffffffffffffffff1661249b6118b8565b73ffffffffffffffffffffffffffffffffffffffff16146124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061471e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612558906145de565b60405180910390fd5b61256a81612a29565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600280546125ee90614bd5565b80601f016020809104026020016040519081016040528092919081815260200182805461261a90614bd5565b80156126675780601f1061263c57610100808354040283529160200191612667565b820191906000526020600020905b81548152906001019060200180831161264a57829003601f168201915b50505050509050919050565b81518351146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae906147de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271e9061467e565b60405180910390fd5b60006127316125d7565b9050612741818787878787612f50565b60005b84518110156128f257600085828151811061276257612761614cdf565b5b60200260200101519050600085838151811061278157612780614cdf565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612819906146de565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d79190614a20565b92505081905550505050806128eb90614c38565b9050612744565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129699291906144ca565b60405180910390a461297f818787878787612fae565b505050505050565b61298f6115aa565b6129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c59061459e565b60405180910390fd5b6000600460146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612a126125d7565b604051612a1f91906143cb565b60405180910390a1565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612af76115aa565b15612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e9061465e565b60405180910390fd5b6001600460146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b7b6125d7565b604051612b8891906143cb565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf89061479e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cf29190614501565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d66906147fe565b60405180910390fd5b6000612d796125d7565b9050612d9a81600087612d8b88613195565b612d9488613195565b87612f50565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df99190614a20565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612e77929190614854565b60405180910390a4612e8e8160008787878761320f565b5050505050565b8060029080519060200190612eab92919061381d565b5050565b612eb76125d7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612efd5750612efc85612ef76125d7565b61238a565b5b612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f339061461e565b60405180910390fd5b612f4985858585856133f6565b5050505050565b612f586115aa565b15612f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8f9061465e565b60405180910390fd5b612fa6868686868686613678565b505050505050565b612fcd8473ffffffffffffffffffffffffffffffffffffffff166137f2565b1561318d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016130139594939291906143e6565b602060405180830381600087803b15801561302d57600080fd5b505af192505050801561305e57506040513d601f19601f8201168201806040525081019061305b9190613e67565b60015b6131045761306a614d3d565b806308c379a014156130c7575061307f61530d565b8061308a57506130c9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130be919061451c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb9061453e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461318b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131829061455e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156131b4576131b3614d0e565b5b6040519080825280602002602001820160405280156131e25781602001602082028036833780820191505090505b50905082816000815181106131fa576131f9614cdf565b5b60200260200101818152505080915050919050565b61322e8473ffffffffffffffffffffffffffffffffffffffff166137f2565b156133ee578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161327495949392919061444e565b602060405180830381600087803b15801561328e57600080fd5b505af19250505080156132bf57506040513d601f19601f820116820180604052508101906132bc9190613e67565b60015b613365576132cb614d3d565b806308c379a0141561332857506132e061530d565b806132eb575061332a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331f919061451c565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335c9061453e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146133ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e39061455e565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d9061467e565b60405180910390fd5b60006134706125d7565b905061349081878761348188613195565b61348a88613195565b87612f50565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015613527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351e906146de565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135dc9190614a20565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051613659929190614854565b60405180910390a461366f82888888888861320f565b50505050505050565b613686868686868686613815565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156137385760005b8351811015613736578281815181106136da576136d9614cdf565b5b6020026020010151600360008684815181106136f9576136f8614cdf565b5b60200260200101518152602001908152602001600020600082825461371e9190614a20565b925050819055508061372f90614c38565b90506136be565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137ea5760005b83518110156137e85782818151811061378c5761378b614cdf565b5b6020026020010151600360008684815181106137ab576137aa614cdf565b5b6020026020010151815260200190815260200160002060008282546137d09190614ad0565b92505081905550806137e190614c38565b9050613770565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b82805461382990614bd5565b90600052602060002090601f01602090048101928261384b5760008555613892565b82601f1061386457805160ff1916838001178555613892565b82800160010185558215613892579182015b82811115613891578251825591602001919060010190613876565b5b50905061389f91906138a3565b5090565b5b808211156138bc5760008160009055506001016138a4565b5090565b60006138d36138ce846148bd565b614898565b905080838252602082019050828560208602820111156138f6576138f5614d64565b5b60005b85811015613926578161390c8882613a24565b8452602084019350602083019250506001810190506138f9565b5050509392505050565b600061394361393e846148e9565b614898565b9050808382526020820190508285602086028201111561396657613965614d64565b5b60005b85811015613996578161397c8882613b45565b845260208401935060208301925050600181019050613969565b5050509392505050565b60006139b36139ae84614915565b614898565b9050828152602081018484840111156139cf576139ce614d69565b5b6139da848285614b93565b509392505050565b60006139f56139f084614946565b614898565b905082815260208101848484011115613a1157613a10614d69565b5b613a1c848285614b93565b509392505050565b600081359050613a33816153a3565b92915050565b600082601f830112613a4e57613a4d614d5f565b5b8135613a5e8482602086016138c0565b91505092915050565b600082601f830112613a7c57613a7b614d5f565b5b8135613a8c848260208601613930565b91505092915050565b600081359050613aa4816153ba565b92915050565b600081359050613ab9816153d1565b92915050565b600081519050613ace816153d1565b92915050565b600082601f830112613ae957613ae8614d5f565b5b8135613af98482602086016139a0565b91505092915050565b600082601f830112613b1757613b16614d5f565b5b8135613b278482602086016139e2565b91505092915050565b600081359050613b3f816153e8565b92915050565b600081359050613b54816153ff565b92915050565b600081359050613b6981615416565b92915050565b600060208284031215613b8557613b84614d73565b5b6000613b9384828501613a24565b91505092915050565b60008060408385031215613bb357613bb2614d73565b5b6000613bc185828601613a24565b9250506020613bd285828601613a24565b9150509250929050565b600080600080600060a08688031215613bf857613bf7614d73565b5b6000613c0688828901613a24565b9550506020613c1788828901613a24565b945050604086013567ffffffffffffffff811115613c3857613c37614d6e565b5b613c4488828901613a67565b935050606086013567ffffffffffffffff811115613c6557613c64614d6e565b5b613c7188828901613a67565b925050608086013567ffffffffffffffff811115613c9257613c91614d6e565b5b613c9e88828901613ad4565b9150509295509295909350565b600080600080600060a08688031215613cc757613cc6614d73565b5b6000613cd588828901613a24565b9550506020613ce688828901613a24565b9450506040613cf788828901613b45565b9350506060613d0888828901613b45565b925050608086013567ffffffffffffffff811115613d2957613d28614d6e565b5b613d3588828901613ad4565b9150509295509295909350565b60008060408385031215613d5957613d58614d73565b5b6000613d6785828601613a24565b9250506020613d7885828601613a95565b9150509250929050565b60008060408385031215613d9957613d98614d73565b5b6000613da785828601613a24565b9250506020613db885828601613b45565b9150509250929050565b60008060408385031215613dd957613dd8614d73565b5b600083013567ffffffffffffffff811115613df757613df6614d6e565b5b613e0385828601613a39565b925050602083013567ffffffffffffffff811115613e2457613e23614d6e565b5b613e3085828601613a67565b9150509250929050565b600060208284031215613e5057613e4f614d73565b5b6000613e5e84828501613aaa565b91505092915050565b600060208284031215613e7d57613e7c614d73565b5b6000613e8b84828501613abf565b91505092915050565b600060208284031215613eaa57613ea9614d73565b5b600082013567ffffffffffffffff811115613ec857613ec7614d6e565b5b613ed484828501613b02565b91505092915050565b600060208284031215613ef357613ef2614d73565b5b6000613f0184828501613b30565b91505092915050565b600060208284031215613f2057613f1f614d73565b5b6000613f2e84828501613b45565b91505092915050565b600060208284031215613f4d57613f4c614d73565b5b6000613f5b84828501613b5a565b91505092915050565b6000613f70838361439e565b60208301905092915050565b613f8581614b04565b82525050565b6000613f9682614987565b613fa081856149b5565b9350613fab83614977565b8060005b83811015613fdc578151613fc38882613f64565b9750613fce836149a8565b925050600181019050613faf565b5085935050505092915050565b613ff281614b16565b82525050565b600061400382614992565b61400d81856149c6565b935061401d818560208601614ba2565b61402681614d78565b840191505092915050565b600061403c8261499d565b61404681856149d7565b9350614056818560208601614ba2565b61405f81614d78565b840191505092915050565b60006140776034836149d7565b915061408282614d96565b604082019050919050565b600061409a6028836149d7565b91506140a582614de5565b604082019050919050565b60006140bd601f836149d7565b91506140c882614e34565b602082019050919050565b60006140e06014836149d7565b91506140eb82614e5d565b602082019050919050565b6000614103602b836149d7565b915061410e82614e86565b604082019050919050565b60006141266026836149d7565b915061413182614ed5565b604082019050919050565b60006141496018836149d7565b915061415482614f24565b602082019050919050565b600061416c6029836149d7565b915061417782614f4d565b604082019050919050565b600061418f6015836149d7565b915061419a82614f9c565b602082019050919050565b60006141b26010836149d7565b91506141bd82614fc5565b602082019050919050565b60006141d56025836149d7565b91506141e082614fee565b604082019050919050565b60006141f86032836149d7565b91506142038261503d565b604082019050919050565b600061421b601c836149d7565b91506142268261508c565b602082019050919050565b600061423e602a836149d7565b9150614249826150b5565b604082019050919050565b6000614261600f836149d7565b915061426c82615104565b602082019050919050565b60006142846020836149d7565b915061428f8261512d565b602082019050919050565b60006142a7600f836149d7565b91506142b282615156565b602082019050919050565b60006142ca601a836149d7565b91506142d58261517f565b602082019050919050565b60006142ed6013836149d7565b91506142f8826151a8565b602082019050919050565b60006143106029836149d7565b915061431b826151d1565b604082019050919050565b60006143336029836149d7565b915061433e82615220565b604082019050919050565b60006143566028836149d7565b91506143618261526f565b604082019050919050565b60006143796021836149d7565b9150614384826152be565b604082019050919050565b61439881614b4e565b82525050565b6143a781614b7c565b82525050565b6143b681614b7c565b82525050565b6143c581614b86565b82525050565b60006020820190506143e06000830184613f7c565b92915050565b600060a0820190506143fb6000830188613f7c565b6144086020830187613f7c565b818103604083015261441a8186613f8b565b9050818103606083015261442e8185613f8b565b905081810360808301526144428184613ff8565b90509695505050505050565b600060a0820190506144636000830188613f7c565b6144706020830187613f7c565b61447d60408301866143ad565b61448a60608301856143ad565b818103608083015261449c8184613ff8565b90509695505050505050565b600060208201905081810360008301526144c28184613f8b565b905092915050565b600060408201905081810360008301526144e48185613f8b565b905081810360208301526144f88184613f8b565b90509392505050565b60006020820190506145166000830184613fe9565b92915050565b600060208201905081810360008301526145368184614031565b905092915050565b600060208201905081810360008301526145578161406a565b9050919050565b600060208201905081810360008301526145778161408d565b9050919050565b60006020820190508181036000830152614597816140b0565b9050919050565b600060208201905081810360008301526145b7816140d3565b9050919050565b600060208201905081810360008301526145d7816140f6565b9050919050565b600060208201905081810360008301526145f781614119565b9050919050565b600060208201905081810360008301526146178161413c565b9050919050565b600060208201905081810360008301526146378161415f565b9050919050565b6000602082019050818103600083015261465781614182565b9050919050565b60006020820190508181036000830152614677816141a5565b9050919050565b60006020820190508181036000830152614697816141c8565b9050919050565b600060208201905081810360008301526146b7816141eb565b9050919050565b600060208201905081810360008301526146d78161420e565b9050919050565b600060208201905081810360008301526146f781614231565b9050919050565b6000602082019050818103600083015261471781614254565b9050919050565b6000602082019050818103600083015261473781614277565b9050919050565b600060208201905081810360008301526147578161429a565b9050919050565b60006020820190508181036000830152614777816142bd565b9050919050565b60006020820190508181036000830152614797816142e0565b9050919050565b600060208201905081810360008301526147b781614303565b9050919050565b600060208201905081810360008301526147d781614326565b9050919050565b600060208201905081810360008301526147f781614349565b9050919050565b600060208201905081810360008301526148178161436c565b9050919050565b6000602082019050614833600083018461438f565b92915050565b600060208201905061484e60008301846143ad565b92915050565b600060408201905061486960008301856143ad565b61487660208301846143ad565b9392505050565b600060208201905061489260008301846143bc565b92915050565b60006148a26148b3565b90506148ae8282614c07565b919050565b6000604051905090565b600067ffffffffffffffff8211156148d8576148d7614d0e565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561490457614903614d0e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149305761492f614d0e565b5b61493982614d78565b9050602081019050919050565b600067ffffffffffffffff82111561496157614960614d0e565b5b61496a82614d78565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149f382614b4e565b91506149fe83614b4e565b92508261ffff03821115614a1557614a14614c81565b5b828201905092915050565b6000614a2b82614b7c565b9150614a3683614b7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a6b57614a6a614c81565b5b828201905092915050565b6000614a8182614b7c565b9150614a8c83614b7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ac557614ac4614c81565b5b828202905092915050565b6000614adb82614b7c565b9150614ae683614b7c565b925082821015614af957614af8614c81565b5b828203905092915050565b6000614b0f82614b5c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614bc0578082015181840152602081019050614ba5565b83811115614bcf576000848401525b50505050565b60006002820490506001821680614bed57607f821691505b60208210811415614c0157614c00614cb0565b5b50919050565b614c1082614d78565b810181811067ffffffffffffffff82111715614c2f57614c2e614d0e565b5b80604052505050565b6000614c4382614b7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c7657614c75614c81565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614d5c5760046000803e614d59600051614d89565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f43414e545f4255595f4d4f52455f5448454e5f414c4c4f5745445f4652454500600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d41585f544f4b454e5f535550504c595f524541434845440000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f414d4f554e545f43414e4e4f545f42455f5a45524f0000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d5553545f4d494e545f41545f4c454153545f4f4e455f544f4b454e00000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f42414c414e43455f49535f5a45524f0000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53414c455f4e4f545f4143544956450000000000000000000000000000000000600082015250565b7f43414e545f4255595f4d4f52455f5448454e5f414c4c4f574544000000000000600082015250565b7f50524943455f5741535f494e434f525245435400000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561531d576153a0565b6153256148b3565b60043d036004823e80513d602482011167ffffffffffffffff8211171561534d5750506153a0565b808201805167ffffffffffffffff81111561536b57505050506153a0565b80602083010160043d0385018111156153885750505050506153a0565b61539782602001850186614c07565b82955050505050505b90565b6153ac81614b04565b81146153b757600080fd5b50565b6153c381614b16565b81146153ce57600080fd5b50565b6153da81614b22565b81146153e557600080fd5b50565b6153f181614b4e565b81146153fc57600080fd5b50565b61540881614b7c565b811461541357600080fd5b50565b61541f81614b86565b811461542a57600080fd5b5056fea264697066735822122060075e768e600684f35fdb87670ae19bbc212d9399c0f294be42228312e47c5f64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f7068616e746f6d636c75622e696f2f6d657461646174612f7b69647d2e6a736f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5068616e746f6d20436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025043000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103195760003560e01c80635d0ed034116101ab578063aa6781f9116100f7578063c87b56dd11610095578063d9a87c121161006f578063d9a87c1214610b4d578063e985e9c514610b76578063f242432a14610bb3578063f2fde38b14610bdc57610319565b8063c87b56dd14610ab7578063cdd49ac814610af4578063d742303114610b1057610319565b8063b9b6b34e116100d1578063b9b6b34e14610a11578063bd85b03914610a28578063c15d0e2114610a65578063c3aed09f14610a8e57610319565b8063aa6781f914610992578063b71854fd146109bb578063b728345b146109e657610319565b80638456cb59116101645780639c8bd5981161013e5780639c8bd598146108f95780639fee7ea814610924578063a22cb4651461094d578063a3ea762f1461097657610319565b80638456cb591461088c5780638da5cb5b146108a357806395d89b41146108ce57610319565b80635d0ed034146107a257806365f48e62146107cd578063679a4389146107f6578063715018a6146108215780637437681e1461083857806377792f251461086357610319565b80633ccfd60b1161026a57806348ee691b116102235780634f558e79116101fd5780634f558e79146106e6578063503ec933146107235780635c975abb1461074e5780635cd8f5261461077957610319565b806348ee691b146106555780634cc766f5146106805780634e1273f4146106a957610319565b80633ccfd60b1461058f5780633f4ba83a146105a6578063422e6702146105bd57806342669069146105e857806345678a5d146105ff578063485a68a31461062a57610319565b80631768c88c116102d75780632aea97aa116102b15780632aea97aa146104d35780632d6c37b4146104fe5780632eb2c2d61461053b578063336f38211461056457610319565b80631768c88c146104545780631a8c46ec1461047d5780631eb17eec146104a857610319565b8062fdd58e1461031e57806301ffc9a71461035b57806306fdde0314610398578063087b0b86146103c35780630d3d0116146103ee5780630e89341c14610417575b600080fd5b34801561032a57600080fd5b5061034560048036038101906103409190613d82565b610c05565b6040516103529190614839565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190613e3a565b610cce565b60405161038f9190614501565b60405180910390f35b3480156103a457600080fd5b506103ad610db0565b6040516103ba919061451c565b60405180910390f35b3480156103cf57600080fd5b506103d8610e3e565b6040516103e5919061481e565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613f37565b610e52565b005b34801561042357600080fd5b5061043e60048036038101906104399190613f0a565b610eec565b60405161044b919061451c565b60405180910390f35b34801561046057600080fd5b5061047b60048036038101906104769190613edd565b610fca565b005b34801561048957600080fd5b50610492611066565b60405161049f9190614839565b60405180910390f35b3480156104b457600080fd5b506104bd61106c565b6040516104ca9190614501565b60405180910390f35b3480156104df57600080fd5b506104e861107f565b6040516104f59190614501565b60405180910390f35b34801561050a57600080fd5b5061052560048036038101906105209190613b6f565b611092565b6040516105329190614501565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d9190613bdc565b6110b2565b005b34801561057057600080fd5b50610579611153565b6040516105869190614839565b60405180910390f35b34801561059b57600080fd5b506105a4611158565b005b3480156105b257600080fd5b506105bb611260565b005b3480156105c957600080fd5b506105d26112e6565b6040516105df919061487d565b60405180910390f35b3480156105f457600080fd5b506105fd6112f9565b005b34801561060b57600080fd5b506106146113a1565b6040516106219190614839565b60405180910390f35b34801561063657600080fd5b5061063f6113a6565b60405161064c919061481e565b60405180910390f35b34801561066157600080fd5b5061066a6113ba565b604051610677919061481e565b60405180910390f35b34801561068c57600080fd5b506106a760048036038101906106a29190613edd565b6113ce565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190613dc2565b61146a565b6040516106dd91906144a8565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613f0a565b611583565b60405161071a9190614501565b60405180910390f35b34801561072f57600080fd5b50610738611597565b604051610745919061487d565b60405180910390f35b34801561075a57600080fd5b506107636115aa565b6040516107709190614501565b60405180910390f35b34801561078557600080fd5b506107a0600480360381019061079b9190613edd565b6115c1565b005b3480156107ae57600080fd5b506107b761165d565b6040516107c49190614839565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef9190613f37565b611663565b005b34801561080257600080fd5b5061080b6116fd565b604051610818919061481e565b60405180910390f35b34801561082d57600080fd5b50610836611711565b005b34801561084457600080fd5b5061084d611799565b60405161085a919061487d565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613f0a565b6117ac565b005b34801561089857600080fd5b506108a1611832565b005b3480156108af57600080fd5b506108b86118b8565b6040516108c591906143cb565b60405180910390f35b3480156108da57600080fd5b506108e36118e2565b6040516108f0919061451c565b60405180910390f35b34801561090557600080fd5b5061090e611970565b60405161091b919061481e565b60405180910390f35b34801561093057600080fd5b5061094b60048036038101906109469190613edd565b611984565b005b34801561095957600080fd5b50610974600480360381019061096f9190613d42565b611a20565b005b610990600480360381019061098b9190613edd565b611a36565b005b34801561099e57600080fd5b506109b960048036038101906109b49190613f37565b611ce9565b005b3480156109c757600080fd5b506109d0611d83565b6040516109dd919061487d565b60405180910390f35b3480156109f257600080fd5b506109fb611d96565b604051610a08919061481e565b60405180910390f35b348015610a1d57600080fd5b50610a26611daa565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190613f0a565b611e52565b604051610a5c9190614839565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a879190613e94565b611e6f565b005b348015610a9a57600080fd5b50610ab56004803603810190610ab09190613f37565b611ef7565b005b348015610ac357600080fd5b50610ade6004803603810190610ad99190613f0a565b611f91565b604051610aeb919061451c565b60405180910390f35b610b0e6004803603810190610b099190613edd565b612031565b005b348015610b1c57600080fd5b50610b376004803603810190610b329190613f0a565b6122e4565b604051610b449190614501565b60405180910390f35b348015610b5957600080fd5b50610b746004803603810190610b6f9190613f0a565b612304565b005b348015610b8257600080fd5b50610b9d6004803603810190610b989190613b9c565b61238a565b604051610baa9190614501565b60405180910390f35b348015610bbf57600080fd5b50610bda6004803603810190610bd59190613cab565b61241e565b005b348015610be857600080fd5b50610c036004803603810190610bfe9190613b6f565b612475565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d906145be565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d9957507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610da95750610da88261256d565b5b9050919050565b60058054610dbd90614bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610de990614bd5565b8015610e365780601f10610e0b57610100808354040283529160200191610e36565b820191906000526020600020905b815481529060010190602001808311610e1957829003601f168201915b505050505081565b600b600a9054906101000a900461ffff1681565b610e5a6125d7565b73ffffffffffffffffffffffffffffffffffffffff16610e786118b8565b73ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec59061471e565b60405180910390fd5b80600b60076101000a81548160ff021916908360ff16021790555050565b60606000600d60008481526020019081526020016000208054610f0e90614bd5565b90501415610f2657610f1f826125df565b9050610fc5565b600d60008381526020019081526020016000208054610f4490614bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7090614bd5565b8015610fbd5780601f10610f9257610100808354040283529160200191610fbd565b820191906000526020600020905b815481529060010190602001808311610fa057829003601f168201915b505050505090505b919050565b610fd26125d7565b73ffffffffffffffffffffffffffffffffffffffff16610ff06118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d9061471e565b60405180910390fd5b80600960006101000a81548161ffff021916908361ffff16021790555050565b60085481565b600b60039054906101000a900460ff1681565b600b60029054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b6110ba6125d7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061110057506110ff856110fa6125d7565b61238a565b5b61113f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111369061469e565b60405180910390fd5b61114c8585858585612673565b5050505050565b600281565b6111606125d7565b73ffffffffffffffffffffffffffffffffffffffff1661117e6118b8565b73ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb9061471e565b60405180910390fd5b60004711611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e906146fe565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561125d573d6000803e3d6000fd5b50565b6112686125d7565b73ffffffffffffffffffffffffffffffffffffffff166112866118b8565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d39061471e565b60405180910390fd5b6112e4612987565b565b600b60069054906101000a900460ff1681565b6113016125d7565b73ffffffffffffffffffffffffffffffffffffffff1661131f6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c9061471e565b60405180910390fd5b600b60029054906101000a900460ff1615600b60026101000a81548160ff021916908315150217905550565b600181565b600b60089054906101000a900461ffff1681565b600960009054906101000a900461ffff1681565b6113d66125d7565b73ffffffffffffffffffffffffffffffffffffffff166113f46118b8565b73ffffffffffffffffffffffffffffffffffffffff161461144a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114419061471e565b60405180910390fd5b80600b60086101000a81548161ffff021916908361ffff16021790555050565b606081518351146114b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a7906147be565b60405180910390fd5b6000835167ffffffffffffffff8111156114cd576114cc614d0e565b5b6040519080825280602002602001820160405280156114fb5781602001602082028036833780820191505090505b50905060005b8451811015611578576115488582815181106115205761151f614cdf565b5b602002602001015185838151811061153b5761153a614cdf565b5b6020026020010151610c05565b82828151811061155b5761155a614cdf565b5b6020026020010181815250508061157190614c38565b9050611501565b508091505092915050565b60008061158f83611e52565b119050919050565b600b60059054906101000a900460ff1681565b6000600460149054906101000a900460ff16905090565b6115c96125d7565b73ffffffffffffffffffffffffffffffffffffffff166115e76118b8565b73ffffffffffffffffffffffffffffffffffffffff161461163d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349061471e565b60405180910390fd5b80600b60006101000a81548161ffff021916908361ffff16021790555050565b600a5481565b61166b6125d7565b73ffffffffffffffffffffffffffffffffffffffff166116896118b8565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d69061471e565b60405180910390fd5b80600b60046101000a81548160ff021916908360ff16021790555050565b600760029054906101000a900461ffff1681565b6117196125d7565b73ffffffffffffffffffffffffffffffffffffffff166117376118b8565b73ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117849061471e565b60405180910390fd5b6117976000612a29565b565b600b60049054906101000a900460ff1681565b6117b46125d7565b73ffffffffffffffffffffffffffffffffffffffff166117d26118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f9061471e565b60405180910390fd5b8060088190555050565b61183a6125d7565b73ffffffffffffffffffffffffffffffffffffffff166118586118b8565b73ffffffffffffffffffffffffffffffffffffffff16146118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a59061471e565b60405180910390fd5b6118b6612aef565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600680546118ef90614bd5565b80601f016020809104026020016040519081016040528092919081815260200182805461191b90614bd5565b80156119685780601f1061193d57610100808354040283529160200191611968565b820191906000526020600020905b81548152906001019060200180831161194b57829003601f168201915b505050505081565b600b60009054906101000a900461ffff1681565b61198c6125d7565b73ffffffffffffffffffffffffffffffffffffffff166119aa6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f79061471e565b60405180910390fd5b80600b600a6101000a81548161ffff021916908361ffff16021790555050565b611a32611a2b6125d7565b8383612b92565b5050565b600b60029054906101000a900460ff16611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c9061473e565b60405180910390fd5b600960009054906101000a900461ffff1661ffff16611aa46001611e52565b10611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb906145fe565b60405180910390fd5b60008161ffff1611611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b22906146be565b60405180910390fd5b600b60089054906101000a900461ffff1661ffff16600760009054906101000a900461ffff1682611b5c91906149e8565b61ffff1611611bd257600b60059054906101000a900460ff1660ff168161ffff16111580611b8e575060018161ffff16105b611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc49061457e565b60405180910390fd5b611c8e565b600b60049054906101000a900460ff1660ff168161ffff16111580611bfb575060018161ffff16105b611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c319061475e565b60405180910390fd5b348161ffff16600854611c4d9190614a76565b14611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c849061477e565b60405180910390fd5b5b611cae3360018361ffff1660405180602001604052806000815250612cff565b80600760009054906101000a900461ffff16611cca91906149e8565b600760006101000a81548161ffff021916908361ffff16021790555050565b611cf16125d7565b73ffffffffffffffffffffffffffffffffffffffff16611d0f6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c9061471e565b60405180910390fd5b80600b60056101000a81548160ff021916908360ff16021790555050565b600b60079054906101000a900460ff1681565b600760009054906101000a900461ffff1681565b611db26125d7565b73ffffffffffffffffffffffffffffffffffffffff16611dd06118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061471e565b60405180910390fd5b600b60039054906101000a900460ff1615600b60036101000a81548160ff021916908315150217905550565b600060036000838152602001908152602001600020549050919050565b611e776125d7565b73ffffffffffffffffffffffffffffffffffffffff16611e956118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee29061471e565b60405180910390fd5b611ef481612e95565b50565b611eff6125d7565b73ffffffffffffffffffffffffffffffffffffffff16611f1d6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614611f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6a9061471e565b60405180910390fd5b80600b60066101000a81548160ff021916908360ff16021790555050565b600d6020528060005260406000206000915090508054611fb090614bd5565b80601f0160208091040260200160405190810160405280929190818152602001828054611fdc90614bd5565b80156120295780601f10611ffe57610100808354040283529160200191612029565b820191906000526020600020905b81548152906001019060200180831161200c57829003601f168201915b505050505081565b600b60039054906101000a900460ff16612080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120779061473e565b60405180910390fd5b600b60009054906101000a900461ffff1661ffff1661209f6002611e52565b106120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906145fe565b60405180910390fd5b60008161ffff1611612126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211d906146be565b60405180910390fd5b600b600a9054906101000a900461ffff1661ffff16600760009054906101000a900461ffff168261215791906149e8565b61ffff16116121cd57600b60079054906101000a900460ff1660ff168161ffff16111580612189575060018161ffff16105b6121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf9061475e565b60405180910390fd5b612289565b600b60069054906101000a900460ff1660ff168161ffff161115806121f6575060018161ffff16105b612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222c9061475e565b60405180910390fd5b348161ffff16600a546122489190614a76565b14612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f9061477e565b60405180910390fd5b5b6122a93360028361ffff1660405180602001604052806000815250612cff565b80600760029054906101000a900461ffff166122c591906149e8565b600760026101000a81548161ffff021916908361ffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b61230c6125d7565b73ffffffffffffffffffffffffffffffffffffffff1661232a6118b8565b73ffffffffffffffffffffffffffffffffffffffff1614612380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123779061471e565b60405180910390fd5b80600a8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008211612461576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124589061463e565b60405180910390fd5b61246e8585858585612eaf565b5050505050565b61247d6125d7565b73ffffffffffffffffffffffffffffffffffffffff1661249b6118b8565b73ffffffffffffffffffffffffffffffffffffffff16146124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061471e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612558906145de565b60405180910390fd5b61256a81612a29565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6060600280546125ee90614bd5565b80601f016020809104026020016040519081016040528092919081815260200182805461261a90614bd5565b80156126675780601f1061263c57610100808354040283529160200191612667565b820191906000526020600020905b81548152906001019060200180831161264a57829003601f168201915b50505050509050919050565b81518351146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae906147de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271e9061467e565b60405180910390fd5b60006127316125d7565b9050612741818787878787612f50565b60005b84518110156128f257600085828151811061276257612761614cdf565b5b60200260200101519050600085838151811061278157612780614cdf565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612819906146de565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d79190614a20565b92505081905550505050806128eb90614c38565b9050612744565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516129699291906144ca565b60405180910390a461297f818787878787612fae565b505050505050565b61298f6115aa565b6129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c59061459e565b60405180910390fd5b6000600460146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612a126125d7565b604051612a1f91906143cb565b60405180910390a1565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612af76115aa565b15612b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2e9061465e565b60405180910390fd5b6001600460146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b7b6125d7565b604051612b8891906143cb565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf89061479e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612cf29190614501565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d66906147fe565b60405180910390fd5b6000612d796125d7565b9050612d9a81600087612d8b88613195565b612d9488613195565b87612f50565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df99190614a20565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612e77929190614854565b60405180910390a4612e8e8160008787878761320f565b5050505050565b8060029080519060200190612eab92919061381d565b5050565b612eb76125d7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612efd5750612efc85612ef76125d7565b61238a565b5b612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f339061461e565b60405180910390fd5b612f4985858585856133f6565b5050505050565b612f586115aa565b15612f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8f9061465e565b60405180910390fd5b612fa6868686868686613678565b505050505050565b612fcd8473ffffffffffffffffffffffffffffffffffffffff166137f2565b1561318d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016130139594939291906143e6565b602060405180830381600087803b15801561302d57600080fd5b505af192505050801561305e57506040513d601f19601f8201168201806040525081019061305b9190613e67565b60015b6131045761306a614d3d565b806308c379a014156130c7575061307f61530d565b8061308a57506130c9565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130be919061451c565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb9061453e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461318b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131829061455e565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156131b4576131b3614d0e565b5b6040519080825280602002602001820160405280156131e25781602001602082028036833780820191505090505b50905082816000815181106131fa576131f9614cdf565b5b60200260200101818152505080915050919050565b61322e8473ffffffffffffffffffffffffffffffffffffffff166137f2565b156133ee578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161327495949392919061444e565b602060405180830381600087803b15801561328e57600080fd5b505af19250505080156132bf57506040513d601f19601f820116820180604052508101906132bc9190613e67565b60015b613365576132cb614d3d565b806308c379a0141561332857506132e061530d565b806132eb575061332a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331f919061451c565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335c9061453e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146133ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e39061455e565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d9061467e565b60405180910390fd5b60006134706125d7565b905061349081878761348188613195565b61348a88613195565b87612f50565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015613527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351e906146de565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135dc9190614a20565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051613659929190614854565b60405180910390a461366f82888888888861320f565b50505050505050565b613686868686868686613815565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156137385760005b8351811015613736578281815181106136da576136d9614cdf565b5b6020026020010151600360008684815181106136f9576136f8614cdf565b5b60200260200101518152602001908152602001600020600082825461371e9190614a20565b925050819055508061372f90614c38565b90506136be565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156137ea5760005b83518110156137e85782818151811061378c5761378b614cdf565b5b6020026020010151600360008684815181106137ab576137aa614cdf565b5b6020026020010151815260200190815260200160002060008282546137d09190614ad0565b92505081905550806137e190614c38565b9050613770565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b82805461382990614bd5565b90600052602060002090601f01602090048101928261384b5760008555613892565b82601f1061386457805160ff1916838001178555613892565b82800160010185558215613892579182015b82811115613891578251825591602001919060010190613876565b5b50905061389f91906138a3565b5090565b5b808211156138bc5760008160009055506001016138a4565b5090565b60006138d36138ce846148bd565b614898565b905080838252602082019050828560208602820111156138f6576138f5614d64565b5b60005b85811015613926578161390c8882613a24565b8452602084019350602083019250506001810190506138f9565b5050509392505050565b600061394361393e846148e9565b614898565b9050808382526020820190508285602086028201111561396657613965614d64565b5b60005b85811015613996578161397c8882613b45565b845260208401935060208301925050600181019050613969565b5050509392505050565b60006139b36139ae84614915565b614898565b9050828152602081018484840111156139cf576139ce614d69565b5b6139da848285614b93565b509392505050565b60006139f56139f084614946565b614898565b905082815260208101848484011115613a1157613a10614d69565b5b613a1c848285614b93565b509392505050565b600081359050613a33816153a3565b92915050565b600082601f830112613a4e57613a4d614d5f565b5b8135613a5e8482602086016138c0565b91505092915050565b600082601f830112613a7c57613a7b614d5f565b5b8135613a8c848260208601613930565b91505092915050565b600081359050613aa4816153ba565b92915050565b600081359050613ab9816153d1565b92915050565b600081519050613ace816153d1565b92915050565b600082601f830112613ae957613ae8614d5f565b5b8135613af98482602086016139a0565b91505092915050565b600082601f830112613b1757613b16614d5f565b5b8135613b278482602086016139e2565b91505092915050565b600081359050613b3f816153e8565b92915050565b600081359050613b54816153ff565b92915050565b600081359050613b6981615416565b92915050565b600060208284031215613b8557613b84614d73565b5b6000613b9384828501613a24565b91505092915050565b60008060408385031215613bb357613bb2614d73565b5b6000613bc185828601613a24565b9250506020613bd285828601613a24565b9150509250929050565b600080600080600060a08688031215613bf857613bf7614d73565b5b6000613c0688828901613a24565b9550506020613c1788828901613a24565b945050604086013567ffffffffffffffff811115613c3857613c37614d6e565b5b613c4488828901613a67565b935050606086013567ffffffffffffffff811115613c6557613c64614d6e565b5b613c7188828901613a67565b925050608086013567ffffffffffffffff811115613c9257613c91614d6e565b5b613c9e88828901613ad4565b9150509295509295909350565b600080600080600060a08688031215613cc757613cc6614d73565b5b6000613cd588828901613a24565b9550506020613ce688828901613a24565b9450506040613cf788828901613b45565b9350506060613d0888828901613b45565b925050608086013567ffffffffffffffff811115613d2957613d28614d6e565b5b613d3588828901613ad4565b9150509295509295909350565b60008060408385031215613d5957613d58614d73565b5b6000613d6785828601613a24565b9250506020613d7885828601613a95565b9150509250929050565b60008060408385031215613d9957613d98614d73565b5b6000613da785828601613a24565b9250506020613db885828601613b45565b9150509250929050565b60008060408385031215613dd957613dd8614d73565b5b600083013567ffffffffffffffff811115613df757613df6614d6e565b5b613e0385828601613a39565b925050602083013567ffffffffffffffff811115613e2457613e23614d6e565b5b613e3085828601613a67565b9150509250929050565b600060208284031215613e5057613e4f614d73565b5b6000613e5e84828501613aaa565b91505092915050565b600060208284031215613e7d57613e7c614d73565b5b6000613e8b84828501613abf565b91505092915050565b600060208284031215613eaa57613ea9614d73565b5b600082013567ffffffffffffffff811115613ec857613ec7614d6e565b5b613ed484828501613b02565b91505092915050565b600060208284031215613ef357613ef2614d73565b5b6000613f0184828501613b30565b91505092915050565b600060208284031215613f2057613f1f614d73565b5b6000613f2e84828501613b45565b91505092915050565b600060208284031215613f4d57613f4c614d73565b5b6000613f5b84828501613b5a565b91505092915050565b6000613f70838361439e565b60208301905092915050565b613f8581614b04565b82525050565b6000613f9682614987565b613fa081856149b5565b9350613fab83614977565b8060005b83811015613fdc578151613fc38882613f64565b9750613fce836149a8565b925050600181019050613faf565b5085935050505092915050565b613ff281614b16565b82525050565b600061400382614992565b61400d81856149c6565b935061401d818560208601614ba2565b61402681614d78565b840191505092915050565b600061403c8261499d565b61404681856149d7565b9350614056818560208601614ba2565b61405f81614d78565b840191505092915050565b60006140776034836149d7565b915061408282614d96565b604082019050919050565b600061409a6028836149d7565b91506140a582614de5565b604082019050919050565b60006140bd601f836149d7565b91506140c882614e34565b602082019050919050565b60006140e06014836149d7565b91506140eb82614e5d565b602082019050919050565b6000614103602b836149d7565b915061410e82614e86565b604082019050919050565b60006141266026836149d7565b915061413182614ed5565b604082019050919050565b60006141496018836149d7565b915061415482614f24565b602082019050919050565b600061416c6029836149d7565b915061417782614f4d565b604082019050919050565b600061418f6015836149d7565b915061419a82614f9c565b602082019050919050565b60006141b26010836149d7565b91506141bd82614fc5565b602082019050919050565b60006141d56025836149d7565b91506141e082614fee565b604082019050919050565b60006141f86032836149d7565b91506142038261503d565b604082019050919050565b600061421b601c836149d7565b91506142268261508c565b602082019050919050565b600061423e602a836149d7565b9150614249826150b5565b604082019050919050565b6000614261600f836149d7565b915061426c82615104565b602082019050919050565b60006142846020836149d7565b915061428f8261512d565b602082019050919050565b60006142a7600f836149d7565b91506142b282615156565b602082019050919050565b60006142ca601a836149d7565b91506142d58261517f565b602082019050919050565b60006142ed6013836149d7565b91506142f8826151a8565b602082019050919050565b60006143106029836149d7565b915061431b826151d1565b604082019050919050565b60006143336029836149d7565b915061433e82615220565b604082019050919050565b60006143566028836149d7565b91506143618261526f565b604082019050919050565b60006143796021836149d7565b9150614384826152be565b604082019050919050565b61439881614b4e565b82525050565b6143a781614b7c565b82525050565b6143b681614b7c565b82525050565b6143c581614b86565b82525050565b60006020820190506143e06000830184613f7c565b92915050565b600060a0820190506143fb6000830188613f7c565b6144086020830187613f7c565b818103604083015261441a8186613f8b565b9050818103606083015261442e8185613f8b565b905081810360808301526144428184613ff8565b90509695505050505050565b600060a0820190506144636000830188613f7c565b6144706020830187613f7c565b61447d60408301866143ad565b61448a60608301856143ad565b818103608083015261449c8184613ff8565b90509695505050505050565b600060208201905081810360008301526144c28184613f8b565b905092915050565b600060408201905081810360008301526144e48185613f8b565b905081810360208301526144f88184613f8b565b90509392505050565b60006020820190506145166000830184613fe9565b92915050565b600060208201905081810360008301526145368184614031565b905092915050565b600060208201905081810360008301526145578161406a565b9050919050565b600060208201905081810360008301526145778161408d565b9050919050565b60006020820190508181036000830152614597816140b0565b9050919050565b600060208201905081810360008301526145b7816140d3565b9050919050565b600060208201905081810360008301526145d7816140f6565b9050919050565b600060208201905081810360008301526145f781614119565b9050919050565b600060208201905081810360008301526146178161413c565b9050919050565b600060208201905081810360008301526146378161415f565b9050919050565b6000602082019050818103600083015261465781614182565b9050919050565b60006020820190508181036000830152614677816141a5565b9050919050565b60006020820190508181036000830152614697816141c8565b9050919050565b600060208201905081810360008301526146b7816141eb565b9050919050565b600060208201905081810360008301526146d78161420e565b9050919050565b600060208201905081810360008301526146f781614231565b9050919050565b6000602082019050818103600083015261471781614254565b9050919050565b6000602082019050818103600083015261473781614277565b9050919050565b600060208201905081810360008301526147578161429a565b9050919050565b60006020820190508181036000830152614777816142bd565b9050919050565b60006020820190508181036000830152614797816142e0565b9050919050565b600060208201905081810360008301526147b781614303565b9050919050565b600060208201905081810360008301526147d781614326565b9050919050565b600060208201905081810360008301526147f781614349565b9050919050565b600060208201905081810360008301526148178161436c565b9050919050565b6000602082019050614833600083018461438f565b92915050565b600060208201905061484e60008301846143ad565b92915050565b600060408201905061486960008301856143ad565b61487660208301846143ad565b9392505050565b600060208201905061489260008301846143bc565b92915050565b60006148a26148b3565b90506148ae8282614c07565b919050565b6000604051905090565b600067ffffffffffffffff8211156148d8576148d7614d0e565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561490457614903614d0e565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156149305761492f614d0e565b5b61493982614d78565b9050602081019050919050565b600067ffffffffffffffff82111561496157614960614d0e565b5b61496a82614d78565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006149f382614b4e565b91506149fe83614b4e565b92508261ffff03821115614a1557614a14614c81565b5b828201905092915050565b6000614a2b82614b7c565b9150614a3683614b7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a6b57614a6a614c81565b5b828201905092915050565b6000614a8182614b7c565b9150614a8c83614b7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ac557614ac4614c81565b5b828202905092915050565b6000614adb82614b7c565b9150614ae683614b7c565b925082821015614af957614af8614c81565b5b828203905092915050565b6000614b0f82614b5c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614bc0578082015181840152602081019050614ba5565b83811115614bcf576000848401525b50505050565b60006002820490506001821680614bed57607f821691505b60208210811415614c0157614c00614cb0565b5b50919050565b614c1082614d78565b810181811067ffffffffffffffff82111715614c2f57614c2e614d0e565b5b80604052505050565b6000614c4382614b7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c7657614c75614c81565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614d5c5760046000803e614d59600051614d89565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f43414e545f4255595f4d4f52455f5448454e5f414c4c4f5745445f4652454500600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d41585f544f4b454e5f535550504c595f524541434845440000000000000000600082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f414d4f554e545f43414e4e4f545f42455f5a45524f0000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4d5553545f4d494e545f41545f4c454153545f4f4e455f544f4b454e00000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f42414c414e43455f49535f5a45524f0000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53414c455f4e4f545f4143544956450000000000000000000000000000000000600082015250565b7f43414e545f4255595f4d4f52455f5448454e5f414c4c4f574544000000000000600082015250565b7f50524943455f5741535f494e434f525245435400000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561531d576153a0565b6153256148b3565b60043d036004823e80513d602482011167ffffffffffffffff8211171561534d5750506153a0565b808201805167ffffffffffffffff81111561536b57505050506153a0565b80602083010160043d0385018111156153885750505050506153a0565b61539782602001850186614c07565b82955050505050505b90565b6153ac81614b04565b81146153b757600080fd5b50565b6153c381614b16565b81146153ce57600080fd5b50565b6153da81614b22565b81146153e557600080fd5b50565b6153f181614b4e565b81146153fc57600080fd5b50565b61540881614b7c565b811461541357600080fd5b50565b61541f81614b86565b811461542a57600080fd5b5056fea264697066735822122060075e768e600684f35fdb87670ae19bbc212d9399c0f294be42228312e47c5f64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000fa000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f7068616e746f6d636c75622e696f2f6d657461646174612f7b69647d2e6a736f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5068616e746f6d20436c7562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025043000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : uriBase (string): https://phantomclub.io/metadata/{id}.json
Arg [1] : _name (string): Phantom Club
Arg [2] : _symbol (string): PC
Arg [3] : _TOKEN_PRICE_STANDARDPASS (uint256): 30000000000000000
Arg [4] : _TOKEN_PRICE_PLATINUMPASS (uint256): 100000000000000000
Arg [5] : _MAX_TOKENS_STANDARDPASS (uint16): 4000
Arg [6] : _MAX_TOKENS_PLATINUMPASS (uint16): 1000
Arg [7] : _maxTx (uint8): 3
Arg [8] : _maxTxFree (uint8): 3
Arg [9] : _maxTxGP (uint8): 5
Arg [10] : _maxFree (uint16): 1000

-----Encoded View---------------
18 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000200
Arg [3] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [4] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000fa0
Arg [6] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [10] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [12] : 68747470733a2f2f7068616e746f6d636c75622e696f2f6d657461646174612f
Arg [13] : 7b69647d2e6a736f6e0000000000000000000000000000000000000000000000
Arg [14] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [15] : 5068616e746f6d20436c75620000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [17] : 5043000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

52916:6520:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20072:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19095:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53014:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53878:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56451:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55040:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55887:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53280:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53607:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53534;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54136:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22011:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53371:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59260:173;;;;;;;;;;;;;:::i;:::-;;55814:65;;;;;;;;;;;;;:::i;:::-;;53748:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55481:126;;;;;;;;;;;;;:::i;:::-;;53210:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53848:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53326:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56557:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20469:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34507:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53716:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39020:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56024:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53441:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56157:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53138:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37075:103;;;;;;;;;;;;;:::i;:::-;;53688:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56759:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55745:61;;;;;;;;;;;;;:::i;:::-;;36424:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53040:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53487:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56656:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21066:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56995:823;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56251:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53778:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53068;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55615:122;;;;;;;;;;;;;:::i;:::-;;34296:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55368:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56353:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54086:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57826:822;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54030:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56877:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21293:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58656:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37333:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20072:231;20158:7;20205:1;20186:21;;:7;:21;;;;20178:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20273:9;:13;20283:2;20273:13;;;;;;;;;;;:22;20287:7;20273:22;;;;;;;;;;;;;;;;20266:29;;20072:231;;;;:::o;19095:310::-;19197:4;19249:26;19234:41;;;:11;:41;;;;:110;;;;19307:37;19292:52;;;:11;:52;;;;19234:110;:163;;;;19361:36;19385:11;19361:23;:36::i;:::-;19234:163;19214:183;;19095:310;;;:::o;53014:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53878:63::-;;;;;;;;;;;;;:::o;56451:98::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56534:7:::1;56520:11;;:21;;;;;;;;;;;;;;;;;;56451:98:::0;:::o;55040:320::-;55100:13;55263:1;55234:8;:17;55243:7;55234:17;;;;;;;;;;;55228:31;;;;;:::i;:::-;;;:36;55224:94;;;55288:18;55298:7;55288:9;:18::i;:::-;55281:25;;;;55224:94;55335:8;:17;55344:7;55335:17;;;;;;;;;;;55328:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55040:320;;;;:::o;55887:129::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55998:10:::1;55972:23;;:36;;;;;;;;;;;;;;;;;;55887:129:::0;:::o;53280:39::-;;;;:::o;53607:66::-;;;;;;;;;;;;;:::o;53534:::-;;;;;;;;;;;;;:::o;54136:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;22011:442::-;22252:12;:10;:12::i;:::-;22244:20;;:4;:20;;;:60;;;;22268:36;22285:4;22291:12;:10;:12::i;:::-;22268:16;:36::i;:::-;22244:60;22222:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;22393:52;22416:4;22422:2;22426:3;22431:7;22440:4;22393:22;:52::i;:::-;22011:442;;;;;:::o;53371:63::-;53433:1;53371:63;:::o;59260:173::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59342:1:::1;59318:21;:25;59310:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;59382:10;59374:28;;:51;59403:21;59374:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;59260:173::o:0;55814:65::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55861:10:::1;:8;:10::i;:::-;55814:65::o:0;53748:23::-;;;;;;;;;;;;;:::o;55481:126::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55574:25:::1;;;;;;;;;;;55573:26;55545:25;;:54;;;;;;;;;;;;;;;;;;55481:126::o:0;53210:63::-;53272:1;53210:63;:::o;53848:23::-;;;;;;;;;;;;;:::o;53326:38::-;;;;;;;;;;;;;:::o;56557:91::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56633:7:::1;56623;;:17;;;;;;;;;;;;;;;;;;56557:91:::0;:::o;20469:524::-;20625:16;20686:3;:10;20667:8;:15;:29;20659:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20755:30;20802:8;:15;20788:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20755:63;;20836:9;20831:122;20855:8;:15;20851:1;:19;20831:122;;;20911:30;20921:8;20930:1;20921:11;;;;;;;;:::i;:::-;;;;;;;;20934:3;20938:1;20934:6;;;;;;;;:::i;:::-;;;;;;;;20911:9;:30::i;:::-;20892:13;20906:1;20892:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;20872:3;;;;:::i;:::-;;;20831:122;;;;20972:13;20965:20;;;20469:524;;;;:::o;34507:122::-;34564:4;34620:1;34588:29;34614:2;34588:25;:29::i;:::-;:33;34581:40;;34507:122;;;:::o;53716:25::-;;;;;;;;;;;;;:::o;39020:86::-;39067:4;39091:7;;;;;;;;;;;39084:14;;39020:86;:::o;56024:125::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56131:10:::1;56105:23;;:36;;;;;;;;;;;;;;;;;;56024:125:::0;:::o;53441:39::-;;;;:::o;56157:86::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56228:7:::1;56220:5;;:15;;;;;;;;;;;;;;;;;;56157:86:::0;:::o;53138:63::-;;;;;;;;;;;;;:::o;37075:103::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37140:30:::1;37167:1;37140:18;:30::i;:::-;37075:103::o:0;53688:21::-;;;;;;;;;;;;;:::o;56759:110::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56852:9:::1;56825:24;:36;;;;56759:110:::0;:::o;55745:61::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55790:8:::1;:6;:8::i;:::-;55745:61::o:0;36424:87::-;36470:7;36497:6;;;;;;;;;;;36490:13;;36424:87;:::o;53040:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53487:38::-;;;;;;;;;;;;;:::o;56656:95::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56736:7:::1;56724:9;;:19;;;;;;;;;;;;;;;;;;56656:95:::0;:::o;21066:155::-;21161:52;21180:12;:10;:12::i;:::-;21194:8;21204;21161:18;:52::i;:::-;21066:155;;:::o;56995:823::-;57081:25;;;;;;;;;;;57073:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;57182:23;;;;;;;;;;;57145:60;;:34;53272:1;57145:11;:34::i;:::-;:60;57137:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;57270:1;57253:14;:18;;;57245:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;57348:7;;;;;;;;;;;57319:36;;57336:8;;;;;;;;;;;57319:14;:25;;;;:::i;:::-;:36;;;57315:378;;57398:9;;;;;;;;;;;57380:27;;:14;:27;;;;:49;;;;57428:1;57411:14;:18;;;57380:49;57372:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;57315:378;;;57522:5;;;;;;;;;;;57504:23;;:14;:23;;;;:45;;;;57548:1;57531:14;:18;;;57504:45;57496:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;57648:9;57630:14;57603:41;;:24;;:41;;;;:::i;:::-;:54;57595:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;57315:378;57703:60;57709:10;53272:1;57744:14;57703:60;;;;;;;;;;;;;;:5;:60::i;:::-;57796:14;57785:8;;;;;;;;;;;:25;;;;:::i;:::-;57774:8;;:36;;;;;;;;;;;;;;;;;;56995:823;:::o;56251:94::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56330:7:::1;56318:9;;:19;;;;;;;;;;;;;;;;;;56251:94:::0;:::o;53778:63::-;;;;;;;;;;;;;:::o;53068:::-;;;;;;;;;;;;;:::o;55615:122::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55704:25:::1;;;;;;;;;;;55703:26;55675:25;;:54;;;;;;;;;;;;;;;;;;55615:122::o:0;34296:113::-;34358:7;34385:12;:16;34398:2;34385:16;;;;;;;;;;;;34378:23;;34296:113;;;:::o;55368:105::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55445:20:::1;55453:11;55445:7;:20::i;:::-;55368:105:::0;:::o;56353:90::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56428:7:::1;56418;;:17;;;;;;;;;;;;;;;;;;56353:90:::0;:::o;54086:43::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;57826:822::-;57908:25;;;;;;;;;;;57900:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;58009:23;;;;;;;;;;;57972:60;;:34;53433:1;57972:11;:34::i;:::-;:60;57964:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;58097:1;58080:14;:18;;;58072:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;58175:9;;;;;;;;;;;58146:38;;58163:8;;;;;;;;;;;58146:14;:25;;;;:::i;:::-;:38;;;58142:379;;58227:11;;;;;;;;;;;58209:29;;:14;:29;;;;:51;;;;58259:1;58242:14;:18;;;58209:51;58201:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;58142:379;;;58348:7;;;;;;;;;;;58330:25;;:14;:25;;;;:47;;;;58376:1;58359:14;:18;;;58330:47;58322:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;58476:9;58458:14;58431:41;;:24;;:41;;;;:::i;:::-;:54;58423:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;58142:379;58531:60;58537:10;53433:1;58572:14;58531:60;;;;;;;;;;;;;;:5;:60::i;:::-;58625:14;58614:8;;;;;;;;;;;:25;;;;:::i;:::-;58602:8;;:38;;;;;;;;;;;;;;;;;;57826:822;:::o;54030:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;56877:110::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56970:9:::1;56943:24;:36;;;;56877:110:::0;:::o;21293:168::-;21392:4;21416:18;:27;21435:7;21416:27;;;;;;;;;;;;;;;:37;21444:8;21416:37;;;;;;;;;;;;;;;;;;;;;;;;;21409:44;;21293:168;;;;:::o;58656:298::-;58851:1;58842:6;:10;58834:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;58896:50;58919:4;58925:2;58929;58933:6;58941:4;58896:22;:50::i;:::-;58656:298;;;;;:::o;37333:201::-;36655:12;:10;:12::i;:::-;36644:23;;:7;:5;:7::i;:::-;:23;;;36636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37442:1:::1;37422:22;;:8;:22;;;;37414:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37498:28;37517:8;37498:18;:28::i;:::-;37333:201:::0;:::o;17858:157::-;17943:4;17982:25;17967:40;;;:11;:40;;;;17960:47;;17858:157;;;:::o;16783:98::-;16836:7;16863:10;16856:17;;16783:98;:::o;19816:105::-;19876:13;19909:4;19902:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19816:105;;;:::o;24095:1074::-;24322:7;:14;24308:3;:10;:28;24300:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;24414:1;24400:16;;:2;:16;;;;24392:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24471:16;24490:12;:10;:12::i;:::-;24471:31;;24515:60;24536:8;24546:4;24552:2;24556:3;24561:7;24570:4;24515:20;:60::i;:::-;24593:9;24588:421;24612:3;:10;24608:1;:14;24588:421;;;24644:10;24657:3;24661:1;24657:6;;;;;;;;:::i;:::-;;;;;;;;24644:19;;24678:14;24695:7;24703:1;24695:10;;;;;;;;:::i;:::-;;;;;;;;24678:27;;24722:19;24744:9;:13;24754:2;24744:13;;;;;;;;;;;:19;24758:4;24744:19;;;;;;;;;;;;;;;;24722:41;;24801:6;24786:11;:21;;24778:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24934:6;24920:11;:20;24898:9;:13;24908:2;24898:13;;;;;;;;;;;:19;24912:4;24898:19;;;;;;;;;;;;;;;:42;;;;24991:6;24970:9;:13;24980:2;24970:13;;;;;;;;;;;:17;24984:2;24970:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;24629:380;;;24624:3;;;;:::i;:::-;;;24588:421;;;;25056:2;25026:47;;25050:4;25026:47;;25040:8;25026:47;;;25060:3;25065:7;25026:47;;;;;;;:::i;:::-;;;;;;;;25086:75;25122:8;25132:4;25138:2;25142:3;25147:7;25156:4;25086:35;:75::i;:::-;24289:880;24095:1074;;;;;:::o;40079:120::-;39623:8;:6;:8::i;:::-;39615:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;40148:5:::1;40138:7;;:15;;;;;;;;;;;;;;;;;;40169:22;40178:12;:10;:12::i;:::-;40169:22;;;;;;:::i;:::-;;;;;;;;40079:120::o:0;37694:191::-;37768:16;37787:6;;;;;;;;;;;37768:25;;37813:8;37804:6;;:17;;;;;;;;;;;;;;;;;;37868:8;37837:40;;37858:8;37837:40;;;;;;;;;;;;37757:128;37694:191;:::o;39820:118::-;39346:8;:6;:8::i;:::-;39345:9;39337:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39890:4:::1;39880:7;;:14;;;;;;;;;;;;;;;;;;39910:20;39917:12;:10;:12::i;:::-;39910:20;;;;;;:::i;:::-;;;;;;;;39820:118::o:0;30281:331::-;30436:8;30427:17;;:5;:17;;;;30419:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30539:8;30501:18;:25;30520:5;30501:25;;;;;;;;;;;;;;;:35;30527:8;30501:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30585:8;30563:41;;30578:5;30563:41;;;30595:8;30563:41;;;;;;:::i;:::-;;;;;;;;30281:331;;;:::o;26487:569::-;26654:1;26640:16;;:2;:16;;;;26632:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26707:16;26726:12;:10;:12::i;:::-;26707:31;;26751:102;26772:8;26790:1;26794:2;26798:21;26816:2;26798:17;:21::i;:::-;26821:25;26839:6;26821:17;:25::i;:::-;26848:4;26751:20;:102::i;:::-;26887:6;26866:9;:13;26876:2;26866:13;;;;;;;;;;;:17;26880:2;26866:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26946:2;26909:52;;26942:1;26909:52;;26924:8;26909:52;;;26950:2;26954:6;26909:52;;;;;;;:::i;:::-;;;;;;;;26974:74;27005:8;27023:1;27027:2;27031;27035:6;27043:4;26974:30;:74::i;:::-;26621:435;26487:569;;;;:::o;26013:88::-;26087:6;26080:4;:13;;;;;;;;;;;;:::i;:::-;;26013:88;:::o;21533:401::-;21749:12;:10;:12::i;:::-;21741:20;;:4;:20;;;:60;;;;21765:36;21782:4;21788:12;:10;:12::i;:::-;21765:16;:36::i;:::-;21741:60;21719:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;21881:45;21899:4;21905:2;21909;21913:6;21921:4;21881:17;:45::i;:::-;21533:401;;;;;:::o;58962:290::-;39346:8;:6;:8::i;:::-;39345:9;39337:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;59178:66:::1;59205:8;59215:4;59221:2;59225:3;59230:7;59239:4;59178:26;:66::i;:::-;58962:290:::0;;;;;;:::o;32549:813::-;32789:15;:2;:13;;;:15::i;:::-;32785:570;;;32842:2;32825:43;;;32869:8;32879:4;32885:3;32890:7;32899:4;32825:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32821:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33217:6;33210:14;;;;;;;;;;;:::i;:::-;;;;;;;;32821:523;;;33266:62;;;;;;;;;;:::i;:::-;;;;;;;;32821:523;32998:48;;;32986:60;;;:8;:60;;;;32982:159;;33071:50;;;;;;;;;;:::i;:::-;;;;;;;;32982:159;32905:251;32785:570;32549:813;;;;;;:::o;33370:198::-;33436:16;33465:22;33504:1;33490:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33465:41;;33528:7;33517:5;33523:1;33517:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;33555:5;33548:12;;;33370:198;;;:::o;31797:744::-;32012:15;:2;:13;;;:15::i;:::-;32008:526;;;32065:2;32048:38;;;32087:8;32097:4;32103:2;32107:6;32115:4;32048:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32044:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32396:6;32389:14;;;;;;;;;;;:::i;:::-;;;;;;;;32044:479;;;32445:62;;;;;;;;;;:::i;:::-;;;;;;;;32044:479;32182:43;;;32170:55;;;:8;:55;;;;32166:154;;32250:50;;;;;;;;;;:::i;:::-;;;;;;;;32166:154;32121:214;32008:526;31797:744;;;;;;:::o;22917:820::-;23119:1;23105:16;;:2;:16;;;;23097:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23176:16;23195:12;:10;:12::i;:::-;23176:31;;23220:96;23241:8;23251:4;23257:2;23261:21;23279:2;23261:17;:21::i;:::-;23284:25;23302:6;23284:17;:25::i;:::-;23311:4;23220:20;:96::i;:::-;23329:19;23351:9;:13;23361:2;23351:13;;;;;;;;;;;:19;23365:4;23351:19;;;;;;;;;;;;;;;;23329:41;;23404:6;23389:11;:21;;23381:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23529:6;23515:11;:20;23493:9;:13;23503:2;23493:13;;;;;;;;;;;:19;23507:4;23493:19;;;;;;;;;;;;;;;:42;;;;23578:6;23557:9;:13;23567:2;23557:13;;;;;;;;;;;:17;23571:2;23557:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23633:2;23602:46;;23627:4;23602:46;;23617:8;23602:46;;;23637:2;23641:6;23602:46;;;;;;;:::i;:::-;;;;;;;;23661:68;23692:8;23702:4;23708:2;23712;23716:6;23724:4;23661:30;:68::i;:::-;23086:651;;22917:820;;;;;:::o;34704:655::-;34943:66;34970:8;34980:4;34986:2;34990:3;34995:7;35004:4;34943:26;:66::i;:::-;35042:1;35026:18;;:4;:18;;;35022:160;;;35066:9;35061:110;35085:3;:10;35081:1;:14;35061:110;;;35145:7;35153:1;35145:10;;;;;;;;:::i;:::-;;;;;;;;35121:12;:20;35134:3;35138:1;35134:6;;;;;;;;:::i;:::-;;;;;;;;35121:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;35097:3;;;;:::i;:::-;;;35061:110;;;;35022:160;35212:1;35198:16;;:2;:16;;;35194:158;;;35236:9;35231:110;35255:3;:10;35251:1;:14;35231:110;;;35315:7;35323:1;35315:10;;;;;;;;:::i;:::-;;;;;;;;35291:12;:20;35304:3;35308:1;35304:6;;;;;;;;:::i;:::-;;;;;;;;35291:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;35267:3;;;;:::i;:::-;;;35231:110;;;;35194:158;34704:655;;;;;;:::o;8836:326::-;8896:4;9153:1;9131:7;:19;;;:23;9124:30;;8836:326;;;:::o;31568:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:137::-;4453:5;4491:6;4478:20;4469:29;;4507:32;4533:5;4507:32;:::i;:::-;4408:137;;;;:::o;4551:139::-;4597:5;4635:6;4622:20;4613:29;;4651:33;4678:5;4651:33;:::i;:::-;4551:139;;;;:::o;4696:135::-;4740:5;4778:6;4765:20;4756:29;;4794:31;4819:5;4794:31;:::i;:::-;4696:135;;;;:::o;4837:329::-;4896:6;4945:2;4933:9;4924:7;4920:23;4916:32;4913:119;;;4951:79;;:::i;:::-;4913:119;5071:1;5096:53;5141:7;5132:6;5121:9;5117:22;5096:53;:::i;:::-;5086:63;;5042:117;4837:329;;;;:::o;5172:474::-;5240:6;5248;5297:2;5285:9;5276:7;5272:23;5268:32;5265:119;;;5303:79;;:::i;:::-;5265:119;5423:1;5448:53;5493:7;5484:6;5473:9;5469:22;5448:53;:::i;:::-;5438:63;;5394:117;5550:2;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5521:118;5172:474;;;;;:::o;5652:1509::-;5806:6;5814;5822;5830;5838;5887:3;5875:9;5866:7;5862:23;5858:33;5855:120;;;5894:79;;:::i;:::-;5855:120;6014:1;6039:53;6084:7;6075:6;6064:9;6060:22;6039:53;:::i;:::-;6029:63;;5985:117;6141:2;6167:53;6212:7;6203:6;6192:9;6188:22;6167:53;:::i;:::-;6157:63;;6112:118;6297:2;6286:9;6282:18;6269:32;6328:18;6320:6;6317:30;6314:117;;;6350:79;;:::i;:::-;6314:117;6455:78;6525:7;6516:6;6505:9;6501:22;6455:78;:::i;:::-;6445:88;;6240:303;6610:2;6599:9;6595:18;6582:32;6641:18;6633:6;6630:30;6627:117;;;6663:79;;:::i;:::-;6627:117;6768:78;6838:7;6829:6;6818:9;6814:22;6768:78;:::i;:::-;6758:88;;6553:303;6923:3;6912:9;6908:19;6895:33;6955:18;6947:6;6944:30;6941:117;;;6977:79;;:::i;:::-;6941:117;7082:62;7136:7;7127:6;7116:9;7112:22;7082:62;:::i;:::-;7072:72;;6866:288;5652:1509;;;;;;;;:::o;7167:1089::-;7271:6;7279;7287;7295;7303;7352:3;7340:9;7331:7;7327:23;7323:33;7320:120;;;7359:79;;:::i;:::-;7320:120;7479:1;7504:53;7549:7;7540:6;7529:9;7525:22;7504:53;:::i;:::-;7494:63;;7450:117;7606:2;7632:53;7677:7;7668:6;7657:9;7653:22;7632:53;:::i;:::-;7622:63;;7577:118;7734:2;7760:53;7805:7;7796:6;7785:9;7781:22;7760:53;:::i;:::-;7750:63;;7705:118;7862:2;7888:53;7933:7;7924:6;7913:9;7909:22;7888:53;:::i;:::-;7878:63;;7833:118;8018:3;8007:9;8003:19;7990:33;8050:18;8042:6;8039:30;8036:117;;;8072:79;;:::i;:::-;8036:117;8177:62;8231:7;8222:6;8211:9;8207:22;8177:62;:::i;:::-;8167:72;;7961:288;7167:1089;;;;;;;;:::o;8262:468::-;8327:6;8335;8384:2;8372:9;8363:7;8359:23;8355:32;8352:119;;;8390:79;;:::i;:::-;8352:119;8510:1;8535:53;8580:7;8571:6;8560:9;8556:22;8535:53;:::i;:::-;8525:63;;8481:117;8637:2;8663:50;8705:7;8696:6;8685:9;8681:22;8663:50;:::i;:::-;8653:60;;8608:115;8262:468;;;;;:::o;8736:474::-;8804:6;8812;8861:2;8849:9;8840:7;8836:23;8832:32;8829:119;;;8867:79;;:::i;:::-;8829:119;8987:1;9012:53;9057:7;9048:6;9037:9;9033:22;9012:53;:::i;:::-;9002:63;;8958:117;9114:2;9140:53;9185:7;9176:6;9165:9;9161:22;9140:53;:::i;:::-;9130:63;;9085:118;8736:474;;;;;:::o;9216:894::-;9334:6;9342;9391:2;9379:9;9370:7;9366:23;9362:32;9359:119;;;9397:79;;:::i;:::-;9359:119;9545:1;9534:9;9530:17;9517:31;9575:18;9567:6;9564:30;9561:117;;;9597:79;;:::i;:::-;9561:117;9702:78;9772:7;9763:6;9752:9;9748:22;9702:78;:::i;:::-;9692:88;;9488:302;9857:2;9846:9;9842:18;9829:32;9888:18;9880:6;9877:30;9874:117;;;9910:79;;:::i;:::-;9874:117;10015:78;10085:7;10076:6;10065:9;10061:22;10015:78;:::i;:::-;10005:88;;9800:303;9216:894;;;;;:::o;10116:327::-;10174:6;10223:2;10211:9;10202:7;10198:23;10194:32;10191:119;;;10229:79;;:::i;:::-;10191:119;10349:1;10374:52;10418:7;10409:6;10398:9;10394:22;10374:52;:::i;:::-;10364:62;;10320:116;10116:327;;;;:::o;10449:349::-;10518:6;10567:2;10555:9;10546:7;10542:23;10538:32;10535:119;;;10573:79;;:::i;:::-;10535:119;10693:1;10718:63;10773:7;10764:6;10753:9;10749:22;10718:63;:::i;:::-;10708:73;;10664:127;10449:349;;;;:::o;10804:509::-;10873:6;10922:2;10910:9;10901:7;10897:23;10893:32;10890:119;;;10928:79;;:::i;:::-;10890:119;11076:1;11065:9;11061:17;11048:31;11106:18;11098:6;11095:30;11092:117;;;11128:79;;:::i;:::-;11092:117;11233:63;11288:7;11279:6;11268:9;11264:22;11233:63;:::i;:::-;11223:73;;11019:287;10804:509;;;;:::o;11319:327::-;11377:6;11426:2;11414:9;11405:7;11401:23;11397:32;11394:119;;;11432:79;;:::i;:::-;11394:119;11552:1;11577:52;11621:7;11612:6;11601:9;11597:22;11577:52;:::i;:::-;11567:62;;11523:116;11319:327;;;;:::o;11652:329::-;11711:6;11760:2;11748:9;11739:7;11735:23;11731:32;11728:119;;;11766:79;;:::i;:::-;11728:119;11886:1;11911:53;11956:7;11947:6;11936:9;11932:22;11911:53;:::i;:::-;11901:63;;11857:117;11652:329;;;;:::o;11987:325::-;12044:6;12093:2;12081:9;12072:7;12068:23;12064:32;12061:119;;;12099:79;;:::i;:::-;12061:119;12219:1;12244:51;12287:7;12278:6;12267:9;12263:22;12244:51;:::i;:::-;12234:61;;12190:115;11987:325;;;;:::o;12318:179::-;12387:10;12408:46;12450:3;12442:6;12408:46;:::i;:::-;12486:4;12481:3;12477:14;12463:28;;12318:179;;;;:::o;12503:118::-;12590:24;12608:5;12590:24;:::i;:::-;12585:3;12578:37;12503:118;;:::o;12657:732::-;12776:3;12805:54;12853:5;12805:54;:::i;:::-;12875:86;12954:6;12949:3;12875:86;:::i;:::-;12868:93;;12985:56;13035:5;12985:56;:::i;:::-;13064:7;13095:1;13080:284;13105:6;13102:1;13099:13;13080:284;;;13181:6;13175:13;13208:63;13267:3;13252:13;13208:63;:::i;:::-;13201:70;;13294:60;13347:6;13294:60;:::i;:::-;13284:70;;13140:224;13127:1;13124;13120:9;13115:14;;13080:284;;;13084:14;13380:3;13373:10;;12781:608;;;12657:732;;;;:::o;13395:109::-;13476:21;13491:5;13476:21;:::i;:::-;13471:3;13464:34;13395:109;;:::o;13510:360::-;13596:3;13624:38;13656:5;13624:38;:::i;:::-;13678:70;13741:6;13736:3;13678:70;:::i;:::-;13671:77;;13757:52;13802:6;13797:3;13790:4;13783:5;13779:16;13757:52;:::i;:::-;13834:29;13856:6;13834:29;:::i;:::-;13829:3;13825:39;13818:46;;13600:270;13510:360;;;;:::o;13876:364::-;13964:3;13992:39;14025:5;13992:39;:::i;:::-;14047:71;14111:6;14106:3;14047:71;:::i;:::-;14040:78;;14127:52;14172:6;14167:3;14160:4;14153:5;14149:16;14127:52;:::i;:::-;14204:29;14226:6;14204:29;:::i;:::-;14199:3;14195:39;14188:46;;13968:272;13876:364;;;;:::o;14246:366::-;14388:3;14409:67;14473:2;14468:3;14409:67;:::i;:::-;14402:74;;14485:93;14574:3;14485:93;:::i;:::-;14603:2;14598:3;14594:12;14587:19;;14246:366;;;:::o;14618:::-;14760:3;14781:67;14845:2;14840:3;14781:67;:::i;:::-;14774:74;;14857:93;14946:3;14857:93;:::i;:::-;14975:2;14970:3;14966:12;14959:19;;14618:366;;;:::o;14990:::-;15132:3;15153:67;15217:2;15212:3;15153:67;:::i;:::-;15146:74;;15229:93;15318:3;15229:93;:::i;:::-;15347:2;15342:3;15338:12;15331:19;;14990:366;;;:::o;15362:::-;15504:3;15525:67;15589:2;15584:3;15525:67;:::i;:::-;15518:74;;15601:93;15690:3;15601:93;:::i;:::-;15719:2;15714:3;15710:12;15703:19;;15362:366;;;:::o;15734:::-;15876:3;15897:67;15961:2;15956:3;15897:67;:::i;:::-;15890:74;;15973:93;16062:3;15973:93;:::i;:::-;16091:2;16086:3;16082:12;16075:19;;15734:366;;;:::o;16106:::-;16248:3;16269:67;16333:2;16328:3;16269:67;:::i;:::-;16262:74;;16345:93;16434:3;16345:93;:::i;:::-;16463:2;16458:3;16454:12;16447:19;;16106:366;;;:::o;16478:::-;16620:3;16641:67;16705:2;16700:3;16641:67;:::i;:::-;16634:74;;16717:93;16806:3;16717:93;:::i;:::-;16835:2;16830:3;16826:12;16819:19;;16478:366;;;:::o;16850:::-;16992:3;17013:67;17077:2;17072:3;17013:67;:::i;:::-;17006:74;;17089:93;17178:3;17089:93;:::i;:::-;17207:2;17202:3;17198:12;17191:19;;16850:366;;;:::o;17222:::-;17364:3;17385:67;17449:2;17444:3;17385:67;:::i;:::-;17378:74;;17461:93;17550:3;17461:93;:::i;:::-;17579:2;17574:3;17570:12;17563:19;;17222:366;;;:::o;17594:::-;17736:3;17757:67;17821:2;17816:3;17757:67;:::i;:::-;17750:74;;17833:93;17922:3;17833:93;:::i;:::-;17951:2;17946:3;17942:12;17935:19;;17594:366;;;:::o;17966:::-;18108:3;18129:67;18193:2;18188:3;18129:67;:::i;:::-;18122:74;;18205:93;18294:3;18205:93;:::i;:::-;18323:2;18318:3;18314:12;18307:19;;17966:366;;;:::o;18338:::-;18480:3;18501:67;18565:2;18560:3;18501:67;:::i;:::-;18494:74;;18577:93;18666:3;18577:93;:::i;:::-;18695:2;18690:3;18686:12;18679:19;;18338:366;;;:::o;18710:::-;18852:3;18873:67;18937:2;18932:3;18873:67;:::i;:::-;18866:74;;18949:93;19038:3;18949:93;:::i;:::-;19067:2;19062:3;19058:12;19051:19;;18710:366;;;:::o;19082:::-;19224:3;19245:67;19309:2;19304:3;19245:67;:::i;:::-;19238:74;;19321:93;19410:3;19321:93;:::i;:::-;19439:2;19434:3;19430:12;19423:19;;19082:366;;;:::o;19454:::-;19596:3;19617:67;19681:2;19676:3;19617:67;:::i;:::-;19610:74;;19693:93;19782:3;19693:93;:::i;:::-;19811:2;19806:3;19802:12;19795:19;;19454:366;;;:::o;19826:::-;19968:3;19989:67;20053:2;20048:3;19989:67;:::i;:::-;19982:74;;20065:93;20154:3;20065:93;:::i;:::-;20183:2;20178:3;20174:12;20167:19;;19826:366;;;:::o;20198:::-;20340:3;20361:67;20425:2;20420:3;20361:67;:::i;:::-;20354:74;;20437:93;20526:3;20437:93;:::i;:::-;20555:2;20550:3;20546:12;20539:19;;20198:366;;;:::o;20570:::-;20712:3;20733:67;20797:2;20792:3;20733:67;:::i;:::-;20726:74;;20809:93;20898:3;20809:93;:::i;:::-;20927:2;20922:3;20918:12;20911:19;;20570:366;;;:::o;20942:::-;21084:3;21105:67;21169:2;21164:3;21105:67;:::i;:::-;21098:74;;21181:93;21270:3;21181:93;:::i;:::-;21299:2;21294:3;21290:12;21283:19;;20942:366;;;:::o;21314:::-;21456:3;21477:67;21541:2;21536:3;21477:67;:::i;:::-;21470:74;;21553:93;21642:3;21553:93;:::i;:::-;21671:2;21666:3;21662:12;21655:19;;21314:366;;;:::o;21686:::-;21828:3;21849:67;21913:2;21908:3;21849:67;:::i;:::-;21842:74;;21925:93;22014:3;21925:93;:::i;:::-;22043:2;22038:3;22034:12;22027:19;;21686:366;;;:::o;22058:::-;22200:3;22221:67;22285:2;22280:3;22221:67;:::i;:::-;22214:74;;22297:93;22386:3;22297:93;:::i;:::-;22415:2;22410:3;22406:12;22399:19;;22058:366;;;:::o;22430:::-;22572:3;22593:67;22657:2;22652:3;22593:67;:::i;:::-;22586:74;;22669:93;22758:3;22669:93;:::i;:::-;22787:2;22782:3;22778:12;22771:19;;22430:366;;;:::o;22802:115::-;22887:23;22904:5;22887:23;:::i;:::-;22882:3;22875:36;22802:115;;:::o;22923:108::-;23000:24;23018:5;23000:24;:::i;:::-;22995:3;22988:37;22923:108;;:::o;23037:118::-;23124:24;23142:5;23124:24;:::i;:::-;23119:3;23112:37;23037:118;;:::o;23161:112::-;23244:22;23260:5;23244:22;:::i;:::-;23239:3;23232:35;23161:112;;:::o;23279:222::-;23372:4;23410:2;23399:9;23395:18;23387:26;;23423:71;23491:1;23480:9;23476:17;23467:6;23423:71;:::i;:::-;23279:222;;;;:::o;23507:1053::-;23830:4;23868:3;23857:9;23853:19;23845:27;;23882:71;23950:1;23939:9;23935:17;23926:6;23882:71;:::i;:::-;23963:72;24031:2;24020:9;24016:18;24007:6;23963:72;:::i;:::-;24082:9;24076:4;24072:20;24067:2;24056:9;24052:18;24045:48;24110:108;24213:4;24204:6;24110:108;:::i;:::-;24102:116;;24265:9;24259:4;24255:20;24250:2;24239:9;24235:18;24228:48;24293:108;24396:4;24387:6;24293:108;:::i;:::-;24285:116;;24449:9;24443:4;24439:20;24433:3;24422:9;24418:19;24411:49;24477:76;24548:4;24539:6;24477:76;:::i;:::-;24469:84;;23507:1053;;;;;;;;:::o;24566:751::-;24789:4;24827:3;24816:9;24812:19;24804:27;;24841:71;24909:1;24898:9;24894:17;24885:6;24841:71;:::i;:::-;24922:72;24990:2;24979:9;24975:18;24966:6;24922:72;:::i;:::-;25004;25072:2;25061:9;25057:18;25048:6;25004:72;:::i;:::-;25086;25154:2;25143:9;25139:18;25130:6;25086:72;:::i;:::-;25206:9;25200:4;25196:20;25190:3;25179:9;25175:19;25168:49;25234:76;25305:4;25296:6;25234:76;:::i;:::-;25226:84;;24566:751;;;;;;;;:::o;25323:373::-;25466:4;25504:2;25493:9;25489:18;25481:26;;25553:9;25547:4;25543:20;25539:1;25528:9;25524:17;25517:47;25581:108;25684:4;25675:6;25581:108;:::i;:::-;25573:116;;25323:373;;;;:::o;25702:634::-;25923:4;25961:2;25950:9;25946:18;25938:26;;26010:9;26004:4;26000:20;25996:1;25985:9;25981:17;25974:47;26038:108;26141:4;26132:6;26038:108;:::i;:::-;26030:116;;26193:9;26187:4;26183:20;26178:2;26167:9;26163:18;26156:48;26221:108;26324:4;26315:6;26221:108;:::i;:::-;26213:116;;25702:634;;;;;:::o;26342:210::-;26429:4;26467:2;26456:9;26452:18;26444:26;;26480:65;26542:1;26531:9;26527:17;26518:6;26480:65;:::i;:::-;26342:210;;;;:::o;26558:313::-;26671:4;26709:2;26698:9;26694:18;26686:26;;26758:9;26752:4;26748:20;26744:1;26733:9;26729:17;26722:47;26786:78;26859:4;26850:6;26786:78;:::i;:::-;26778:86;;26558:313;;;;:::o;26877:419::-;27043:4;27081:2;27070:9;27066:18;27058:26;;27130:9;27124:4;27120:20;27116:1;27105:9;27101:17;27094:47;27158:131;27284:4;27158:131;:::i;:::-;27150:139;;26877:419;;;:::o;27302:::-;27468:4;27506:2;27495:9;27491:18;27483:26;;27555:9;27549:4;27545:20;27541:1;27530:9;27526:17;27519:47;27583:131;27709:4;27583:131;:::i;:::-;27575:139;;27302:419;;;:::o;27727:::-;27893:4;27931:2;27920:9;27916:18;27908:26;;27980:9;27974:4;27970:20;27966:1;27955:9;27951:17;27944:47;28008:131;28134:4;28008:131;:::i;:::-;28000:139;;27727:419;;;:::o;28152:::-;28318:4;28356:2;28345:9;28341:18;28333:26;;28405:9;28399:4;28395:20;28391:1;28380:9;28376:17;28369:47;28433:131;28559:4;28433:131;:::i;:::-;28425:139;;28152:419;;;:::o;28577:::-;28743:4;28781:2;28770:9;28766:18;28758:26;;28830:9;28824:4;28820:20;28816:1;28805:9;28801:17;28794:47;28858:131;28984:4;28858:131;:::i;:::-;28850:139;;28577:419;;;:::o;29002:::-;29168:4;29206:2;29195:9;29191:18;29183:26;;29255:9;29249:4;29245:20;29241:1;29230:9;29226:17;29219:47;29283:131;29409:4;29283:131;:::i;:::-;29275:139;;29002:419;;;:::o;29427:::-;29593:4;29631:2;29620:9;29616:18;29608:26;;29680:9;29674:4;29670:20;29666:1;29655:9;29651:17;29644:47;29708:131;29834:4;29708:131;:::i;:::-;29700:139;;29427:419;;;:::o;29852:::-;30018:4;30056:2;30045:9;30041:18;30033:26;;30105:9;30099:4;30095:20;30091:1;30080:9;30076:17;30069:47;30133:131;30259:4;30133:131;:::i;:::-;30125:139;;29852:419;;;:::o;30277:::-;30443:4;30481:2;30470:9;30466:18;30458:26;;30530:9;30524:4;30520:20;30516:1;30505:9;30501:17;30494:47;30558:131;30684:4;30558:131;:::i;:::-;30550:139;;30277:419;;;:::o;30702:::-;30868:4;30906:2;30895:9;30891:18;30883:26;;30955:9;30949:4;30945:20;30941:1;30930:9;30926:17;30919:47;30983:131;31109:4;30983:131;:::i;:::-;30975:139;;30702:419;;;:::o;31127:::-;31293:4;31331:2;31320:9;31316:18;31308:26;;31380:9;31374:4;31370:20;31366:1;31355:9;31351:17;31344:47;31408:131;31534:4;31408:131;:::i;:::-;31400:139;;31127:419;;;:::o;31552:::-;31718:4;31756:2;31745:9;31741:18;31733:26;;31805:9;31799:4;31795:20;31791:1;31780:9;31776:17;31769:47;31833:131;31959:4;31833:131;:::i;:::-;31825:139;;31552:419;;;:::o;31977:::-;32143:4;32181:2;32170:9;32166:18;32158:26;;32230:9;32224:4;32220:20;32216:1;32205:9;32201:17;32194:47;32258:131;32384:4;32258:131;:::i;:::-;32250:139;;31977:419;;;:::o;32402:::-;32568:4;32606:2;32595:9;32591:18;32583:26;;32655:9;32649:4;32645:20;32641:1;32630:9;32626:17;32619:47;32683:131;32809:4;32683:131;:::i;:::-;32675:139;;32402:419;;;:::o;32827:::-;32993:4;33031:2;33020:9;33016:18;33008:26;;33080:9;33074:4;33070:20;33066:1;33055:9;33051:17;33044:47;33108:131;33234:4;33108:131;:::i;:::-;33100:139;;32827:419;;;:::o;33252:::-;33418:4;33456:2;33445:9;33441:18;33433:26;;33505:9;33499:4;33495:20;33491:1;33480:9;33476:17;33469:47;33533:131;33659:4;33533:131;:::i;:::-;33525:139;;33252:419;;;:::o;33677:::-;33843:4;33881:2;33870:9;33866:18;33858:26;;33930:9;33924:4;33920:20;33916:1;33905:9;33901:17;33894:47;33958:131;34084:4;33958:131;:::i;:::-;33950:139;;33677:419;;;:::o;34102:::-;34268:4;34306:2;34295:9;34291:18;34283:26;;34355:9;34349:4;34345:20;34341:1;34330:9;34326:17;34319:47;34383:131;34509:4;34383:131;:::i;:::-;34375:139;;34102:419;;;:::o;34527:::-;34693:4;34731:2;34720:9;34716:18;34708:26;;34780:9;34774:4;34770:20;34766:1;34755:9;34751:17;34744:47;34808:131;34934:4;34808:131;:::i;:::-;34800:139;;34527:419;;;:::o;34952:::-;35118:4;35156:2;35145:9;35141:18;35133:26;;35205:9;35199:4;35195:20;35191:1;35180:9;35176:17;35169:47;35233:131;35359:4;35233:131;:::i;:::-;35225:139;;34952:419;;;:::o;35377:::-;35543:4;35581:2;35570:9;35566:18;35558:26;;35630:9;35624:4;35620:20;35616:1;35605:9;35601:17;35594:47;35658:131;35784:4;35658:131;:::i;:::-;35650:139;;35377:419;;;:::o;35802:::-;35968:4;36006:2;35995:9;35991:18;35983:26;;36055:9;36049:4;36045:20;36041:1;36030:9;36026:17;36019:47;36083:131;36209:4;36083:131;:::i;:::-;36075:139;;35802:419;;;:::o;36227:::-;36393:4;36431:2;36420:9;36416:18;36408:26;;36480:9;36474:4;36470:20;36466:1;36455:9;36451:17;36444:47;36508:131;36634:4;36508:131;:::i;:::-;36500:139;;36227:419;;;:::o;36652:218::-;36743:4;36781:2;36770:9;36766:18;36758:26;;36794:69;36860:1;36849:9;36845:17;36836:6;36794:69;:::i;:::-;36652:218;;;;:::o;36876:222::-;36969:4;37007:2;36996:9;36992:18;36984:26;;37020:71;37088:1;37077:9;37073:17;37064:6;37020:71;:::i;:::-;36876:222;;;;:::o;37104:332::-;37225:4;37263:2;37252:9;37248:18;37240:26;;37276:71;37344:1;37333:9;37329:17;37320:6;37276:71;:::i;:::-;37357:72;37425:2;37414:9;37410:18;37401:6;37357:72;:::i;:::-;37104:332;;;;;:::o;37442:214::-;37531:4;37569:2;37558:9;37554:18;37546:26;;37582:67;37646:1;37635:9;37631:17;37622:6;37582:67;:::i;:::-;37442:214;;;;:::o;37662:129::-;37696:6;37723:20;;:::i;:::-;37713:30;;37752:33;37780:4;37772:6;37752:33;:::i;:::-;37662:129;;;:::o;37797:75::-;37830:6;37863:2;37857:9;37847:19;;37797:75;:::o;37878:311::-;37955:4;38045:18;38037:6;38034:30;38031:56;;;38067:18;;:::i;:::-;38031:56;38117:4;38109:6;38105:17;38097:25;;38177:4;38171;38167:15;38159:23;;37878:311;;;:::o;38195:::-;38272:4;38362:18;38354:6;38351:30;38348:56;;;38384:18;;:::i;:::-;38348:56;38434:4;38426:6;38422:17;38414:25;;38494:4;38488;38484:15;38476:23;;38195:311;;;:::o;38512:307::-;38573:4;38663:18;38655:6;38652:30;38649:56;;;38685:18;;:::i;:::-;38649:56;38723:29;38745:6;38723:29;:::i;:::-;38715:37;;38807:4;38801;38797:15;38789:23;;38512:307;;;:::o;38825:308::-;38887:4;38977:18;38969:6;38966:30;38963:56;;;38999:18;;:::i;:::-;38963:56;39037:29;39059:6;39037:29;:::i;:::-;39029:37;;39121:4;39115;39111:15;39103:23;;38825:308;;;:::o;39139:132::-;39206:4;39229:3;39221:11;;39259:4;39254:3;39250:14;39242:22;;39139:132;;;:::o;39277:114::-;39344:6;39378:5;39372:12;39362:22;;39277:114;;;:::o;39397:98::-;39448:6;39482:5;39476:12;39466:22;;39397:98;;;:::o;39501:99::-;39553:6;39587:5;39581:12;39571:22;;39501:99;;;:::o;39606:113::-;39676:4;39708;39703:3;39699:14;39691:22;;39606:113;;;:::o;39725:184::-;39824:11;39858:6;39853:3;39846:19;39898:4;39893:3;39889:14;39874:29;;39725:184;;;;:::o;39915:168::-;39998:11;40032:6;40027:3;40020:19;40072:4;40067:3;40063:14;40048:29;;39915:168;;;;:::o;40089:169::-;40173:11;40207:6;40202:3;40195:19;40247:4;40242:3;40238:14;40223:29;;40089:169;;;;:::o;40264:242::-;40303:3;40322:19;40339:1;40322:19;:::i;:::-;40317:24;;40355:19;40372:1;40355:19;:::i;:::-;40350:24;;40448:1;40440:6;40436:14;40433:1;40430:21;40427:47;;;40454:18;;:::i;:::-;40427:47;40498:1;40495;40491:9;40484:16;;40264:242;;;;:::o;40512:305::-;40552:3;40571:20;40589:1;40571:20;:::i;:::-;40566:25;;40605:20;40623:1;40605:20;:::i;:::-;40600:25;;40759:1;40691:66;40687:74;40684:1;40681:81;40678:107;;;40765:18;;:::i;:::-;40678:107;40809:1;40806;40802:9;40795:16;;40512:305;;;;:::o;40823:348::-;40863:7;40886:20;40904:1;40886:20;:::i;:::-;40881:25;;40920:20;40938:1;40920:20;:::i;:::-;40915:25;;41108:1;41040:66;41036:74;41033:1;41030:81;41025:1;41018:9;41011:17;41007:105;41004:131;;;41115:18;;:::i;:::-;41004:131;41163:1;41160;41156:9;41145:20;;40823:348;;;;:::o;41177:191::-;41217:4;41237:20;41255:1;41237:20;:::i;:::-;41232:25;;41271:20;41289:1;41271:20;:::i;:::-;41266:25;;41310:1;41307;41304:8;41301:34;;;41315:18;;:::i;:::-;41301:34;41360:1;41357;41353:9;41345:17;;41177:191;;;;:::o;41374:96::-;41411:7;41440:24;41458:5;41440:24;:::i;:::-;41429:35;;41374:96;;;:::o;41476:90::-;41510:7;41553:5;41546:13;41539:21;41528:32;;41476:90;;;:::o;41572:149::-;41608:7;41648:66;41641:5;41637:78;41626:89;;41572:149;;;:::o;41727:89::-;41763:7;41803:6;41796:5;41792:18;41781:29;;41727:89;;;:::o;41822:126::-;41859:7;41899:42;41892:5;41888:54;41877:65;;41822:126;;;:::o;41954:77::-;41991:7;42020:5;42009:16;;41954:77;;;:::o;42037:86::-;42072:7;42112:4;42105:5;42101:16;42090:27;;42037:86;;;:::o;42129:154::-;42213:6;42208:3;42203;42190:30;42275:1;42266:6;42261:3;42257:16;42250:27;42129:154;;;:::o;42289:307::-;42357:1;42367:113;42381:6;42378:1;42375:13;42367:113;;;42466:1;42461:3;42457:11;42451:18;42447:1;42442:3;42438:11;42431:39;42403:2;42400:1;42396:10;42391:15;;42367:113;;;42498:6;42495:1;42492:13;42489:101;;;42578:1;42569:6;42564:3;42560:16;42553:27;42489:101;42338:258;42289:307;;;:::o;42602:320::-;42646:6;42683:1;42677:4;42673:12;42663:22;;42730:1;42724:4;42720:12;42751:18;42741:81;;42807:4;42799:6;42795:17;42785:27;;42741:81;42869:2;42861:6;42858:14;42838:18;42835:38;42832:84;;;42888:18;;:::i;:::-;42832:84;42653:269;42602:320;;;:::o;42928:281::-;43011:27;43033:4;43011:27;:::i;:::-;43003:6;42999:40;43141:6;43129:10;43126:22;43105:18;43093:10;43090:34;43087:62;43084:88;;;43152:18;;:::i;:::-;43084:88;43192:10;43188:2;43181:22;42971:238;42928:281;;:::o;43215:233::-;43254:3;43277:24;43295:5;43277:24;:::i;:::-;43268:33;;43323:66;43316:5;43313:77;43310:103;;;43393:18;;:::i;:::-;43310:103;43440:1;43433:5;43429:13;43422:20;;43215:233;;;:::o;43454:180::-;43502:77;43499:1;43492:88;43599:4;43596:1;43589:15;43623:4;43620:1;43613:15;43640:180;43688:77;43685:1;43678:88;43785:4;43782:1;43775:15;43809:4;43806:1;43799:15;43826:180;43874:77;43871:1;43864:88;43971:4;43968:1;43961:15;43995:4;43992:1;43985:15;44012:180;44060:77;44057:1;44050:88;44157:4;44154:1;44147:15;44181:4;44178:1;44171:15;44198:183;44233:3;44271:1;44253:16;44250:23;44247:128;;;44309:1;44306;44303;44288:23;44331:34;44362:1;44356:8;44331:34;:::i;:::-;44324:41;;44247:128;44198:183;:::o;44387:117::-;44496:1;44493;44486:12;44510:117;44619:1;44616;44609:12;44633:117;44742:1;44739;44732:12;44756:117;44865:1;44862;44855:12;44879:117;44988:1;44985;44978:12;45002:102;45043:6;45094:2;45090:7;45085:2;45078:5;45074:14;45070:28;45060:38;;45002:102;;;:::o;45110:106::-;45154:8;45203:5;45198:3;45194:15;45173:36;;45110:106;;;:::o;45222:239::-;45362:34;45358:1;45350:6;45346:14;45339:58;45431:22;45426:2;45418:6;45414:15;45407:47;45222:239;:::o;45467:227::-;45607:34;45603:1;45595:6;45591:14;45584:58;45676:10;45671:2;45663:6;45659:15;45652:35;45467:227;:::o;45700:181::-;45840:33;45836:1;45828:6;45824:14;45817:57;45700:181;:::o;45887:170::-;46027:22;46023:1;46015:6;46011:14;46004:46;45887:170;:::o;46063:230::-;46203:34;46199:1;46191:6;46187:14;46180:58;46272:13;46267:2;46259:6;46255:15;46248:38;46063:230;:::o;46299:225::-;46439:34;46435:1;46427:6;46423:14;46416:58;46508:8;46503:2;46495:6;46491:15;46484:33;46299:225;:::o;46530:174::-;46670:26;46666:1;46658:6;46654:14;46647:50;46530:174;:::o;46710:228::-;46850:34;46846:1;46838:6;46834:14;46827:58;46919:11;46914:2;46906:6;46902:15;46895:36;46710:228;:::o;46944:171::-;47084:23;47080:1;47072:6;47068:14;47061:47;46944:171;:::o;47121:166::-;47261:18;47257:1;47249:6;47245:14;47238:42;47121:166;:::o;47293:224::-;47433:34;47429:1;47421:6;47417:14;47410:58;47502:7;47497:2;47489:6;47485:15;47478:32;47293:224;:::o;47523:237::-;47663:34;47659:1;47651:6;47647:14;47640:58;47732:20;47727:2;47719:6;47715:15;47708:45;47523:237;:::o;47766:178::-;47906:30;47902:1;47894:6;47890:14;47883:54;47766:178;:::o;47950:229::-;48090:34;48086:1;48078:6;48074:14;48067:58;48159:12;48154:2;48146:6;48142:15;48135:37;47950:229;:::o;48185:165::-;48325:17;48321:1;48313:6;48309:14;48302:41;48185:165;:::o;48356:182::-;48496:34;48492:1;48484:6;48480:14;48473:58;48356:182;:::o;48544:165::-;48684:17;48680:1;48672:6;48668:14;48661:41;48544:165;:::o;48715:176::-;48855:28;48851:1;48843:6;48839:14;48832:52;48715:176;:::o;48897:169::-;49037:21;49033:1;49025:6;49021:14;49014:45;48897:169;:::o;49072:228::-;49212:34;49208:1;49200:6;49196:14;49189:58;49281:11;49276:2;49268:6;49264:15;49257:36;49072:228;:::o;49306:::-;49446:34;49442:1;49434:6;49430:14;49423:58;49515:11;49510:2;49502:6;49498:15;49491:36;49306:228;:::o;49540:227::-;49680:34;49676:1;49668:6;49664:14;49657:58;49749:10;49744:2;49736:6;49732:15;49725:35;49540:227;:::o;49773:220::-;49913:34;49909:1;49901:6;49897:14;49890:58;49982:3;49977:2;49969:6;49965:15;49958:28;49773:220;:::o;49999:711::-;50038:3;50076:4;50058:16;50055:26;50052:39;;;50084:5;;50052:39;50113:20;;:::i;:::-;50188:1;50170:16;50166:24;50163:1;50157:4;50142:49;50221:4;50215:11;50320:16;50313:4;50305:6;50301:17;50298:39;50265:18;50257:6;50254:30;50238:113;50235:146;;;50366:5;;;;50235:146;50412:6;50406:4;50402:17;50448:3;50442:10;50475:18;50467:6;50464:30;50461:43;;;50497:5;;;;;;50461:43;50545:6;50538:4;50533:3;50529:14;50525:27;50604:1;50586:16;50582:24;50576:4;50572:35;50567:3;50564:44;50561:57;;;50611:5;;;;;;;50561:57;50628;50676:6;50670:4;50666:17;50658:6;50654:30;50648:4;50628:57;:::i;:::-;50701:3;50694:10;;50042:668;;;;;49999:711;;:::o;50716:122::-;50789:24;50807:5;50789:24;:::i;:::-;50782:5;50779:35;50769:63;;50828:1;50825;50818:12;50769:63;50716:122;:::o;50844:116::-;50914:21;50929:5;50914:21;:::i;:::-;50907:5;50904:32;50894:60;;50950:1;50947;50940:12;50894:60;50844:116;:::o;50966:120::-;51038:23;51055:5;51038:23;:::i;:::-;51031:5;51028:34;51018:62;;51076:1;51073;51066:12;51018:62;50966:120;:::o;51092:::-;51164:23;51181:5;51164:23;:::i;:::-;51157:5;51154:34;51144:62;;51202:1;51199;51192:12;51144:62;51092:120;:::o;51218:122::-;51291:24;51309:5;51291:24;:::i;:::-;51284:5;51281:35;51271:63;;51330:1;51327;51320:12;51271:63;51218:122;:::o;51346:118::-;51417:22;51433:5;51417:22;:::i;:::-;51410:5;51407:33;51397:61;;51454:1;51451;51444:12;51397:61;51346:118;:::o

Swarm Source

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