ETH Price: $2,402.75 (-9.36%)

Token

 

Overview

Max Total Supply

98

Holders

14

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
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:
ERC1155Lockable

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-18
*/

// File: contracts/IERC2981Royalties.sol


pragma solidity ^0.8.0;

/// @title IERC2981Royalties
/// @dev Interface for the ERC2981 - Token Royalty standard
interface IERC2981Royalties {
    /// @notice Called with the sale price to determine how much royalty
    //          is owed and to whom.
    /// @param _tokenId - the NFT asset queried for royalty information
    /// @param _value - the sale price of the NFT asset specified by _tokenId
    /// @return _receiver - address of who should be sent the royalty payment
    /// @return _royaltyAmount - the royalty payment amount for value sale price
    function royaltyInfo(uint256 _tokenId, uint256 _value)
        external
        view
        returns (address _receiver, uint256 _royaltyAmount);
}
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// 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/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/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @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: contracts/ERC2981Base.sol


pragma solidity ^0.8.0;



/// @dev This is a contract used to add ERC2981 support to ERC721 and 1155
abstract contract ERC2981Base is ERC165, IERC2981Royalties {
    struct RoyaltyInfo {
        address recipient;
        uint24 amount;
    }
    

    /// @inheritdoc	ERC165
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return
            interfaceId == type(IERC2981Royalties).interfaceId ||
            super.supportsInterface(interfaceId);
    }
}
// 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/IERC1155.sol


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

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/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/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.6.0) (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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, 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);

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

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

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

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

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

        _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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        _afterTokenTransfer(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 {}

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        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: contracts/newupdatedcontractnft.sol



pragma solidity ^0.8.0;




/**
 * ERC1155Lockable extending IERC1155
 *
 * Add interface function approve(address to, uint256 tokenId, bytes32 hash, bytes calldata data)
 *
 * How to Transfer:
 * Seller
 *  a. Call keys(id, pub) => Gets encrypted key by pubKey1
 *  b. Decrypt key with privKey1 
 *  c. Encrypt key with pubKey2
 *  d. Call new method approveFor for buyer with encrypted key
 * Buyer
 *  a. Call keys(id, pub2) => Gets encrypted key by pubKey2
 *  b. Decrypt key with privKey2
 *  c. Decrypt URI by key
 *  d. Call transferFrom to finalaize the transfer
 */
 
contract ERC1155Lockable is
    ERC2981Base,
    ERC1155,
    ReentrancyGuard {


    address payable owner = payable(0x2265EcB63c1a949Bf71e754b4d7448389badCA2A);
    enum NftType { PHYSICAL, DIGITAL, FOUR_D }
    // address payable owner;
    uint256 public id;



    mapping(uint256 => NftType) private _Nft_type;
    // uint private Minting_Fees = 6300000000;
    struct TokenInfo  {
        bytes uri;
        RoyaltyInfo royalty;
        string[] cdn;
        uint NFTtype;
    }

    // Mapping from token ID to approved address
    mapping(uint256 => TokenInfo) private _tokenInfo;
    // Encrypted key storage
    mapping(address => bytes) public keys;

    constructor()
        ERC1155("") {
            // owner = payable(msg.sender);
            id = 0;
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     */
    function uri(uint256 idt) public view virtual override returns (string memory) {
        return string(_tokenInfo[idt].uri);
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     *
     * @param key AES encrypted key by 'operator' address
     *
     * Emits an {Approval} event.
     */




    function approveForAll(address operator, bool approved, bytes calldata key) external {
        _setApprovalForAll(_msgSender(), operator, approved);
        if (approved) {
            keys[operator] = key;
        } else {
            delete keys[operator];
        }
    }
    


    /**
    event for keeping the nft minter address
    **/

    event MintingEvents(address _from, uint256 indexed _id);




    /**
    Returns the NFt type
    **/
    function getNftType(uint256 idt) public view virtual returns (NftType) {
        return _Nft_type[idt];
    }





    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address /*operator*/, bool /*approved*/) public virtual override {
        revert("use approveFor instead");
    }

    /**
     * @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, NftType N_type, uint256 amount, bytes calldata uri_, bytes calldata key, 
        string[] calldata cdn_, address royaltyRecipient, uint256 royaltyValue) public payable nonReentrant returns (uint) {
        require(msg.value >= 0, "Not enough amount for the Fees");
        id+=1;
        _mint(to, id, amount, "");

        _Nft_type[id] = N_type;
        if (uri_.length > 0) {
            _tokenInfo[id].uri = uri_;
        }
        // 0x76e25903fdA77482Bf12Eaca89FD36729530855F
        // 0x9cEE6Ad66Abb79E03253ba6c1cEa51204fF78615
        if (cdn_.length > 0) {
            delete _tokenInfo[id].cdn;
            string[] storage cdn = _tokenInfo[id].cdn;
            for (uint256 i = 0; i < cdn_.length;) {
                cdn.push(cdn_[i]);
                unchecked { i++; }
            }
        }
        if (royaltyValue > 0) {
            _setTokenRoyalty(id, royaltyRecipient, royaltyValue);
        }
        keys[to] = key;
        owner.transfer(msg.value);
        emit MintingEvents(address(msg.sender), id );
        
        return id;
    }
    modifier onlyOwner {
      require(msg.sender == owner, "This is only allowed for the owner");
      _;
   }


    // function withdrawOwner() public onlyOwner payable nonReentrant {
    //     owner.transfer(address(this).balance);
    // }

    function tokenCDN(uint256 _tokenId) external view returns (string[] memory) {
        return _tokenInfo[_tokenId].cdn;
    }

    /*
     * @notice Called with the sale price to determine how much royalty
     *          is owed and to whom.
     * @param _tokenId - the NFT asset queried for royalty information
     * @param _value - the sale price of the NFT asset specified by _tokenId
     * @return _receiver - address of who should be sent the royalty payment
     * @return _royaltyAmount - the royalty payment amount for value sale price
     */
    function royaltyInfo(uint256 _tokenId, uint256 _value) external view override
        returns (address _receiver, uint256 _royaltyAmount) {
        RoyaltyInfo storage royalty = _tokenInfo[_tokenId].royalty;
        _receiver = royalty.recipient;
        _royaltyAmount = (_value * royalty.amount) / 10000;
    }

    /*
     * @inheritdoc	ERC165
     */
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC2981Base, ERC1155)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }

    /**
     * @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 override {
        delete keys[from];
    }

    /*
     * @dev Sets token royalties
     * @param tokenId the token id fir which we register the royalties
     * @param recipient recipient of the royalties
     * @param value percentage (using 2 decimals - 10000 = 100, 0 = 0)
     */
    function _setTokenRoyalty(
        uint256 tokenId,
        address recipient,
        uint256 value
    ) internal {
        require(value <= 10000, 'ERC2981Royalties: Too high');
        _tokenInfo[tokenId].royalty = RoyaltyInfo(recipient, uint24(value));
    }    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":false,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"MintingEvents","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"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"},{"internalType":"bytes","name":"key","type":"bytes"}],"name":"approveForAll","outputs":[],"stateMutability":"nonpayable","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":"idt","type":"uint256"}],"name":"getNftType","outputs":[{"internalType":"enum ERC1155Lockable.NftType","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"keys","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"enum ERC1155Lockable.NftType","name":"N_type","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"uri_","type":"bytes"},{"internalType":"bytes","name":"key","type":"bytes"},{"internalType":"string[]","name":"cdn_","type":"string[]"},{"internalType":"address","name":"royaltyRecipient","type":"address"},{"internalType":"uint256","name":"royaltyValue","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_royaltyAmount","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenCDN","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idt","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6080604052732265ecb63c1a949bf71e754b4d7448389badca2a600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b506040518060200160405280600081525062000088816200009f60201b60201c565b5060016003819055506000600581905550620001d0565b8060029080519060200190620000b7929190620000bb565b5050565b828054620000c9906200016b565b90600052602060002090601f016020900481019282620000ed576000855562000139565b82601f106200010857805160ff191683800117855562000139565b8280016001018555821562000139579182015b82811115620001385782518255916020019190600101906200011b565b5b5090506200014891906200014c565b5090565b5b80821115620001675760008160009055506001016200014d565b5090565b600060028204905060018216806200018457607f821691505b602082108114156200019b576200019a620001a1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613c6880620001e06000396000f3fe6080604052600436106100e75760003560e01c80634e1273f41161008a578063af640d0f11610059578063af640d0f14610357578063b5ff5c1614610382578063e985e9c5146103ab578063f242432a146103e8576100e7565b80634e1273f414610277578063670d14b2146102b4578063a22cb465146102f1578063a82620d51461031a576100e7565b80631f38b629116100c65780631f38b629146101a35780632a55205a146101d35780632eb2c2d61461021157806342e9b55e1461023a576100e7565b8062fdd58e146100ec57806301ffc9a7146101295780630e89341c14610166575b600080fd5b3480156100f857600080fd5b50610113600480360381019061010e91906127b8565b610411565b6040516101209190613114565b60405180910390f35b34801561013557600080fd5b50610150600480360381019061014b9190612870565b6104da565b60405161015d9190612eba565b60405180910390f35b34801561017257600080fd5b5061018d600480360381019061018891906128ca565b6104ec565b60405161019a9190612f12565b60405180910390f35b6101bd60048036038101906101b891906126a0565b610594565b6040516101ca9190613114565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f591906128f7565b6108c0565b604051610208929190612e16565b60405180910390f35b34801561021d57600080fd5b5061023860048036038101906102339190612486565b61093f565b005b34801561024657600080fd5b50610261600480360381019061025c91906128ca565b6109e0565b60405161026e9190612e3f565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127f8565b610acf565b6040516102ab9190612e61565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190612419565b610be8565b6040516102e89190612ed5565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906125ec565b610c88565b005b34801561032657600080fd5b50610341600480360381019061033c91906128ca565b610cc3565b60405161034e9190612ef7565b60405180910390f35b34801561036357600080fd5b5061036c610ced565b6040516103799190613114565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061262c565b610cf3565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190612446565b610db1565b6040516103df9190612eba565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612555565b610e45565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047990612fb4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006104e582610ee6565b9050919050565b606060076000838152602001908152602001600020600001805461050f906134e0565b80601f016020809104026020016040519081016040528092919081815260200182805461053b906134e0565b80156105885780601f1061055d57610100808354040283529160200191610588565b820191906000526020600020905b81548152906001019060200180831161056b57829003601f168201915b50505050509050919050565b6000600260035414156105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d3906130f4565b60405180910390fd5b60026003819055506000341015610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f90613054565b60405180910390fd5b60016005600082825461063b9190613324565b9250508190555061065f8c6005548c60405180602001604052806000815250610fc8565b8a60066000600554815260200190815260200160002060006101000a81548160ff02191690836002811115610697576106966135ea565b5b021790555060008989905011156106d157888860076000600554815260200190815260200160002060000191906106cf929190611f55565b505b600085859050111561079b5760076000600554815260200190815260200160002060020160006107019190611fdb565b6000600760006005548152602001908152602001600020600201905060005b86869050811015610798578187878381811061073f5761073e613648565b5b90506020028101906107519190613158565b9091806001815401808255809150506001900390600052602060002001600090919290919290919290919250919061078a929190611ffc565b508080600101915050610720565b50505b60008211156107b2576107b16005548484611179565b5b8686600860008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190610800929190611f55565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610869573d6000803e3d6000fd5b506005547f86c31468aeca2480b646f7eed51b3c250361d652abb6a00f665bf5edc8dc543d3360405161089c9190612d39565b60405180910390a2600554905060016003819055509b9a5050505050505050505050565b60008060006007600086815260200190815260200160002060010190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506127108160000160149054906101000a900462ffffff1662ffffff168561092b91906133ab565b610935919061337a565b9150509250929050565b610947611278565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061098d575061098c85610987611278565b610db1565b5b6109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c390613014565b60405180910390fd5b6109d98585858585611280565b5050505050565b606060076000838152602001908152602001600020600201805480602002602001604051908101604052809291908181526020016000905b82821015610ac4578382906000526020600020018054610a37906134e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a63906134e0565b8015610ab05780601f10610a8557610100808354040283529160200191610ab0565b820191906000526020600020905b815481529060010190602001808311610a9357829003601f168201915b505050505081526020019060010190610a18565b505050509050919050565b60608151835114610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90613094565b60405180910390fd5b6000835167ffffffffffffffff811115610b3257610b31613677565b5b604051908082528060200260200182016040528015610b605781602001602082028036833780820191505090505b50905060005b8451811015610bdd57610bad858281518110610b8557610b84613648565b5b6020026020010151858381518110610ba057610b9f613648565b5b6020026020010151610411565b828281518110610bc057610bbf613648565b5b60200260200101818152505080610bd690613543565b9050610b66565b508091505092915050565b60086020528060005260406000206000915090508054610c07906134e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c33906134e0565b8015610c805780601f10610c5557610100808354040283529160200191610c80565b820191906000526020600020905b815481529060010190602001808311610c6357829003601f168201915b505050505081565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612f74565b60405180910390fd5b60006006600083815260200190815260200160002060009054906101000a900460ff169050919050565b60055481565b610d05610cfe611278565b85856115a2565b8215610d5f578181600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190610d59929190611f55565b50610dab565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610daa9190612082565b5b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e4d611278565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e935750610e9285610e8d611278565b610db1565b5b610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990612fd4565b60405180910390fd5b610edf858585858561170f565b5050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fb157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fc15750610fc0826119ab565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f906130d4565b60405180910390fd5b6000611042611278565b9050600061104f85611a25565b9050600061105c85611a25565b905061106d83600089858589611a9f565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110cc9190613324565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161114a92919061312f565b60405180910390a461116183600089858589611af2565b61117083600089898989611afa565b50505050505050565b6127108111156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590612f94565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152506007600085815260200190815260200160002060010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548162ffffff021916908362ffffff160217905550905050505050565b600033905090565b81518351146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906130b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90612ff4565b60405180910390fd5b600061133e611278565b905061134e818787878787611a9f565b60005b84518110156114ff57600085828151811061136f5761136e613648565b5b60200260200101519050600085838151811061138e5761138d613648565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613034565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114e49190613324565b92505081905550505050806114f890613543565b9050611351565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611576929190612e83565b60405180910390a461158c818787878787611af2565b61159a818787878787611ce1565b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613074565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117029190612eba565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177690612ff4565b60405180910390fd5b6000611789611278565b9050600061179685611a25565b905060006117a385611a25565b90506117b3838989858589611a9f565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190613034565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ff9190613324565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161197c92919061312f565b60405180910390a4611992848a8a86868a611af2565b6119a0848a8a8a8a8a611afa565b505050505050505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a1e5750611a1d82611ec8565b5b9050919050565b60606000600167ffffffffffffffff811115611a4457611a43613677565b5b604051908082528060200260200182016040528015611a725781602001602082028036833780820191505090505b5090508281600081518110611a8a57611a89613648565b5b60200260200101818152505080915050919050565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611aea9190612082565b505050505050565b505050505050565b611b198473ffffffffffffffffffffffffffffffffffffffff16611f32565b15611cd9578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611b5f959493929190612dbc565b602060405180830381600087803b158015611b7957600080fd5b505af1925050508015611baa57506040513d601f19601f82011682018060405250810190611ba7919061289d565b60015b611c5057611bb66136a6565b806308c379a01415611c135750611bcb613b1c565b80611bd65750611c15565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a9190612f12565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4790612f34565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90612f54565b60405180910390fd5b505b505050505050565b611d008473ffffffffffffffffffffffffffffffffffffffff16611f32565b15611ec0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d46959493929190612d54565b602060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d9157506040513d601f19601f82011682018060405250810190611d8e919061289d565b60015b611e3757611d9d6136a6565b806308c379a01415611dfa5750611db2613b1c565b80611dbd5750611dfc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df19190612f12565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90612f34565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590612f54565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f61906134e0565b90600052602060002090601f016020900481019282611f835760008555611fca565b82601f10611f9c57803560ff1916838001178555611fca565b82800160010185558215611fca579182015b82811115611fc9578235825591602001919060010190611fae565b5b509050611fd791906120c2565b5090565b5080546000825590600052602060002090810190611ff991906120df565b50565b828054612008906134e0565b90600052602060002090601f01602090048101928261202a5760008555612071565b82601f1061204357803560ff1916838001178555612071565b82800160010185558215612071579182015b82811115612070578235825591602001919060010190612055565b5b50905061207e91906120c2565b5090565b50805461208e906134e0565b6000825580601f106120a057506120bf565b601f0160209004906000526020600020908101906120be91906120c2565b5b50565b5b808211156120db5760008160009055506001016120c3565b5090565b5b808211156120ff57600081816120f69190612103565b506001016120e0565b5090565b50805461210f906134e0565b6000825580601f106121215750612140565b601f01602090049060005260206000209081019061213f91906120c2565b5b50565b6000612156612151846131e0565b6131bb565b90508083825260208201905082856020860282011115612179576121786136dc565b5b60005b858110156121a9578161218f8882612265565b84526020840193506020830192505060018101905061217c565b5050509392505050565b60006121c66121c18461320c565b6131bb565b905080838252602082019050828560208602820111156121e9576121e86136dc565b5b60005b8581101561221957816121ff8882612404565b8452602084019350602083019250506001810190506121ec565b5050509392505050565b600061223661223184613238565b6131bb565b905082815260208101848484011115612252576122516136e6565b5b61225d84828561349e565b509392505050565b60008135905061227481613bc6565b92915050565b600082601f83011261228f5761228e6136cd565b5b813561229f848260208601612143565b91505092915050565b60008083601f8401126122be576122bd6136cd565b5b8235905067ffffffffffffffff8111156122db576122da6136c8565b5b6020830191508360208202830111156122f7576122f66136dc565b5b9250929050565b600082601f830112612313576123126136cd565b5b81356123238482602086016121b3565b91505092915050565b60008135905061233b81613bdd565b92915050565b60008135905061235081613bf4565b92915050565b60008151905061236581613bf4565b92915050565b60008083601f840112612381576123806136cd565b5b8235905067ffffffffffffffff81111561239e5761239d6136c8565b5b6020830191508360018202830111156123ba576123b96136dc565b5b9250929050565b600082601f8301126123d6576123d56136cd565b5b81356123e6848260208601612223565b91505092915050565b6000813590506123fe81613c0b565b92915050565b60008135905061241381613c1b565b92915050565b60006020828403121561242f5761242e6136f0565b5b600061243d84828501612265565b91505092915050565b6000806040838503121561245d5761245c6136f0565b5b600061246b85828601612265565b925050602061247c85828601612265565b9150509250929050565b600080600080600060a086880312156124a2576124a16136f0565b5b60006124b088828901612265565b95505060206124c188828901612265565b945050604086013567ffffffffffffffff8111156124e2576124e16136eb565b5b6124ee888289016122fe565b935050606086013567ffffffffffffffff81111561250f5761250e6136eb565b5b61251b888289016122fe565b925050608086013567ffffffffffffffff81111561253c5761253b6136eb565b5b612548888289016123c1565b9150509295509295909350565b600080600080600060a08688031215612571576125706136f0565b5b600061257f88828901612265565b955050602061259088828901612265565b94505060406125a188828901612404565b93505060606125b288828901612404565b925050608086013567ffffffffffffffff8111156125d3576125d26136eb565b5b6125df888289016123c1565b9150509295509295909350565b60008060408385031215612603576126026136f0565b5b600061261185828601612265565b92505060206126228582860161232c565b9150509250929050565b60008060008060608587031215612646576126456136f0565b5b600061265487828801612265565b94505060206126658782880161232c565b935050604085013567ffffffffffffffff811115612686576126856136eb565b5b6126928782880161236b565b925092505092959194509250565b60008060008060008060008060008060006101008c8e0312156126c6576126c56136f0565b5b60006126d48e828f01612265565b9b505060206126e58e828f016123ef565b9a505060406126f68e828f01612404565b99505060608c013567ffffffffffffffff811115612717576127166136eb565b5b6127238e828f0161236b565b985098505060808c013567ffffffffffffffff811115612746576127456136eb565b5b6127528e828f0161236b565b965096505060a08c013567ffffffffffffffff811115612775576127746136eb565b5b6127818e828f016122a8565b945094505060c06127948e828f01612265565b92505060e06127a58e828f01612404565b9150509295989b509295989b9093969950565b600080604083850312156127cf576127ce6136f0565b5b60006127dd85828601612265565b92505060206127ee85828601612404565b9150509250929050565b6000806040838503121561280f5761280e6136f0565b5b600083013567ffffffffffffffff81111561282d5761282c6136eb565b5b6128398582860161227a565b925050602083013567ffffffffffffffff81111561285a576128596136eb565b5b612866858286016122fe565b9150509250929050565b600060208284031215612886576128856136f0565b5b600061289484828501612341565b91505092915050565b6000602082840312156128b3576128b26136f0565b5b60006128c184828501612356565b91505092915050565b6000602082840312156128e0576128df6136f0565b5b60006128ee84828501612404565b91505092915050565b6000806040838503121561290e5761290d6136f0565b5b600061291c85828601612404565b925050602061292d85828601612404565b9150509250929050565b60006129438383612a9c565b905092915050565b60006129578383612d1b565b60208301905092915050565b61296c81613405565b82525050565b600061297d82613289565b61298781856132cf565b93508360208202850161299985613269565b8060005b858110156129d557848403895281516129b68582612937565b94506129c1836132b5565b925060208a0199505060018101905061299d565b50829750879550505050505092915050565b60006129f282613294565b6129fc81856132e0565b9350612a0783613279565b8060005b83811015612a38578151612a1f888261294b565b9750612a2a836132c2565b925050600181019050612a0b565b5085935050505092915050565b612a4e81613417565b82525050565b6000612a5f8261329f565b612a6981856132f1565b9350612a798185602086016134ad565b612a82816136f5565b840191505092915050565b612a968161348c565b82525050565b6000612aa7826132aa565b612ab18185613302565b9350612ac18185602086016134ad565b612aca816136f5565b840191505092915050565b6000612ae0826132aa565b612aea8185613313565b9350612afa8185602086016134ad565b612b03816136f5565b840191505092915050565b6000612b1b603483613313565b9150612b2682613713565b604082019050919050565b6000612b3e602883613313565b9150612b4982613762565b604082019050919050565b6000612b61601683613313565b9150612b6c826137b1565b602082019050919050565b6000612b84601a83613313565b9150612b8f826137da565b602082019050919050565b6000612ba7602b83613313565b9150612bb282613803565b604082019050919050565b6000612bca602983613313565b9150612bd582613852565b604082019050919050565b6000612bed602583613313565b9150612bf8826138a1565b604082019050919050565b6000612c10603283613313565b9150612c1b826138f0565b604082019050919050565b6000612c33602a83613313565b9150612c3e8261393f565b604082019050919050565b6000612c56601e83613313565b9150612c618261398e565b602082019050919050565b6000612c79602983613313565b9150612c84826139b7565b604082019050919050565b6000612c9c602983613313565b9150612ca782613a06565b604082019050919050565b6000612cbf602883613313565b9150612cca82613a55565b604082019050919050565b6000612ce2602183613313565b9150612ced82613aa4565b604082019050919050565b6000612d05601f83613313565b9150612d1082613af3565b602082019050919050565b612d2481613482565b82525050565b612d3381613482565b82525050565b6000602082019050612d4e6000830184612963565b92915050565b600060a082019050612d696000830188612963565b612d766020830187612963565b8181036040830152612d8881866129e7565b90508181036060830152612d9c81856129e7565b90508181036080830152612db08184612a54565b90509695505050505050565b600060a082019050612dd16000830188612963565b612dde6020830187612963565b612deb6040830186612d2a565b612df86060830185612d2a565b8181036080830152612e0a8184612a54565b90509695505050505050565b6000604082019050612e2b6000830185612963565b612e386020830184612d2a565b9392505050565b60006020820190508181036000830152612e598184612972565b905092915050565b60006020820190508181036000830152612e7b81846129e7565b905092915050565b60006040820190508181036000830152612e9d81856129e7565b90508181036020830152612eb181846129e7565b90509392505050565b6000602082019050612ecf6000830184612a45565b92915050565b60006020820190508181036000830152612eef8184612a54565b905092915050565b6000602082019050612f0c6000830184612a8d565b92915050565b60006020820190508181036000830152612f2c8184612ad5565b905092915050565b60006020820190508181036000830152612f4d81612b0e565b9050919050565b60006020820190508181036000830152612f6d81612b31565b9050919050565b60006020820190508181036000830152612f8d81612b54565b9050919050565b60006020820190508181036000830152612fad81612b77565b9050919050565b60006020820190508181036000830152612fcd81612b9a565b9050919050565b60006020820190508181036000830152612fed81612bbd565b9050919050565b6000602082019050818103600083015261300d81612be0565b9050919050565b6000602082019050818103600083015261302d81612c03565b9050919050565b6000602082019050818103600083015261304d81612c26565b9050919050565b6000602082019050818103600083015261306d81612c49565b9050919050565b6000602082019050818103600083015261308d81612c6c565b9050919050565b600060208201905081810360008301526130ad81612c8f565b9050919050565b600060208201905081810360008301526130cd81612cb2565b9050919050565b600060208201905081810360008301526130ed81612cd5565b9050919050565b6000602082019050818103600083015261310d81612cf8565b9050919050565b60006020820190506131296000830184612d2a565b92915050565b60006040820190506131446000830185612d2a565b6131516020830184612d2a565b9392505050565b60008083356001602003843603038112613175576131746136d7565b5b80840192508235915067ffffffffffffffff821115613197576131966136d2565b5b6020830192506001820236038313156131b3576131b26136e1565b5b509250929050565b60006131c56131d6565b90506131d18282613512565b919050565b6000604051905090565b600067ffffffffffffffff8211156131fb576131fa613677565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561322757613226613677565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561325357613252613677565b5b61325c826136f5565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061332f82613482565b915061333a83613482565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561336f5761336e61358c565b5b828201905092915050565b600061338582613482565b915061339083613482565b9250826133a05761339f6135bb565b5b828204905092915050565b60006133b682613482565b91506133c183613482565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133fa576133f961358c565b5b828202905092915050565b600061341082613462565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061345d82613bb2565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006134978261344f565b9050919050565b82818337600083830152505050565b60005b838110156134cb5780820151818401526020810190506134b0565b838111156134da576000848401525b50505050565b600060028204905060018216806134f857607f821691505b6020821081141561350c5761350b613619565b5b50919050565b61351b826136f5565b810181811067ffffffffffffffff8211171561353a57613539613677565b5b80604052505050565b600061354e82613482565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135815761358061358c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156136c55760046000803e6136c2600051613706565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f75736520617070726f7665466f7220696e737465616400000000000000000000600082015250565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820616d6f756e7420666f722074686520466565730000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600060443d1015613b2c57613baf565b613b346131d6565b60043d036004823e80513d602482011167ffffffffffffffff82111715613b5c575050613baf565b808201805167ffffffffffffffff811115613b7a5750505050613baf565b80602083010160043d038501811115613b97575050505050613baf565b613ba682602001850186613512565b82955050505050505b90565b60038110613bc357613bc26135ea565b5b50565b613bcf81613405565b8114613bda57600080fd5b50565b613be681613417565b8114613bf157600080fd5b50565b613bfd81613423565b8114613c0857600080fd5b50565b60038110613c1857600080fd5b50565b613c2481613482565b8114613c2f57600080fd5b5056fea264697066735822122038fd2c71449f17fb9e18dee232085376930036061f25a541070f9ddd8296878564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106100e75760003560e01c80634e1273f41161008a578063af640d0f11610059578063af640d0f14610357578063b5ff5c1614610382578063e985e9c5146103ab578063f242432a146103e8576100e7565b80634e1273f414610277578063670d14b2146102b4578063a22cb465146102f1578063a82620d51461031a576100e7565b80631f38b629116100c65780631f38b629146101a35780632a55205a146101d35780632eb2c2d61461021157806342e9b55e1461023a576100e7565b8062fdd58e146100ec57806301ffc9a7146101295780630e89341c14610166575b600080fd5b3480156100f857600080fd5b50610113600480360381019061010e91906127b8565b610411565b6040516101209190613114565b60405180910390f35b34801561013557600080fd5b50610150600480360381019061014b9190612870565b6104da565b60405161015d9190612eba565b60405180910390f35b34801561017257600080fd5b5061018d600480360381019061018891906128ca565b6104ec565b60405161019a9190612f12565b60405180910390f35b6101bd60048036038101906101b891906126a0565b610594565b6040516101ca9190613114565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f591906128f7565b6108c0565b604051610208929190612e16565b60405180910390f35b34801561021d57600080fd5b5061023860048036038101906102339190612486565b61093f565b005b34801561024657600080fd5b50610261600480360381019061025c91906128ca565b6109e0565b60405161026e9190612e3f565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906127f8565b610acf565b6040516102ab9190612e61565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190612419565b610be8565b6040516102e89190612ed5565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906125ec565b610c88565b005b34801561032657600080fd5b50610341600480360381019061033c91906128ca565b610cc3565b60405161034e9190612ef7565b60405180910390f35b34801561036357600080fd5b5061036c610ced565b6040516103799190613114565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061262c565b610cf3565b005b3480156103b757600080fd5b506103d260048036038101906103cd9190612446565b610db1565b6040516103df9190612eba565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190612555565b610e45565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047990612fb4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006104e582610ee6565b9050919050565b606060076000838152602001908152602001600020600001805461050f906134e0565b80601f016020809104026020016040519081016040528092919081815260200182805461053b906134e0565b80156105885780601f1061055d57610100808354040283529160200191610588565b820191906000526020600020905b81548152906001019060200180831161056b57829003601f168201915b50505050509050919050565b6000600260035414156105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d3906130f4565b60405180910390fd5b60026003819055506000341015610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f90613054565b60405180910390fd5b60016005600082825461063b9190613324565b9250508190555061065f8c6005548c60405180602001604052806000815250610fc8565b8a60066000600554815260200190815260200160002060006101000a81548160ff02191690836002811115610697576106966135ea565b5b021790555060008989905011156106d157888860076000600554815260200190815260200160002060000191906106cf929190611f55565b505b600085859050111561079b5760076000600554815260200190815260200160002060020160006107019190611fdb565b6000600760006005548152602001908152602001600020600201905060005b86869050811015610798578187878381811061073f5761073e613648565b5b90506020028101906107519190613158565b9091806001815401808255809150506001900390600052602060002001600090919290919290919290919250919061078a929190611ffc565b508080600101915050610720565b50505b60008211156107b2576107b16005548484611179565b5b8686600860008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190610800929190611f55565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610869573d6000803e3d6000fd5b506005547f86c31468aeca2480b646f7eed51b3c250361d652abb6a00f665bf5edc8dc543d3360405161089c9190612d39565b60405180910390a2600554905060016003819055509b9a5050505050505050505050565b60008060006007600086815260200190815260200160002060010190508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506127108160000160149054906101000a900462ffffff1662ffffff168561092b91906133ab565b610935919061337a565b9150509250929050565b610947611278565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061098d575061098c85610987611278565b610db1565b5b6109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c390613014565b60405180910390fd5b6109d98585858585611280565b5050505050565b606060076000838152602001908152602001600020600201805480602002602001604051908101604052809291908181526020016000905b82821015610ac4578382906000526020600020018054610a37906134e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a63906134e0565b8015610ab05780601f10610a8557610100808354040283529160200191610ab0565b820191906000526020600020905b815481529060010190602001808311610a9357829003601f168201915b505050505081526020019060010190610a18565b505050509050919050565b60608151835114610b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0c90613094565b60405180910390fd5b6000835167ffffffffffffffff811115610b3257610b31613677565b5b604051908082528060200260200182016040528015610b605781602001602082028036833780820191505090505b50905060005b8451811015610bdd57610bad858281518110610b8557610b84613648565b5b6020026020010151858381518110610ba057610b9f613648565b5b6020026020010151610411565b828281518110610bc057610bbf613648565b5b60200260200101818152505080610bd690613543565b9050610b66565b508091505092915050565b60086020528060005260406000206000915090508054610c07906134e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c33906134e0565b8015610c805780601f10610c5557610100808354040283529160200191610c80565b820191906000526020600020905b815481529060010190602001808311610c6357829003601f168201915b505050505081565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cba90612f74565b60405180910390fd5b60006006600083815260200190815260200160002060009054906101000a900460ff169050919050565b60055481565b610d05610cfe611278565b85856115a2565b8215610d5f578181600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209190610d59929190611f55565b50610dab565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610daa9190612082565b5b50505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610e4d611278565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e935750610e9285610e8d611278565b610db1565b5b610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990612fd4565b60405180910390fd5b610edf858585858561170f565b5050505050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610fb157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610fc15750610fc0826119ab565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102f906130d4565b60405180910390fd5b6000611042611278565b9050600061104f85611a25565b9050600061105c85611a25565b905061106d83600089858589611a9f565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110cc9190613324565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161114a92919061312f565b60405180910390a461116183600089858589611af2565b61117083600089898989611afa565b50505050505050565b6127108111156111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b590612f94565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff1681526020018262ffffff168152506007600085815260200190815260200160002060010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548162ffffff021916908362ffffff160217905550905050505050565b600033905090565b81518351146112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906130b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90612ff4565b60405180910390fd5b600061133e611278565b905061134e818787878787611a9f565b60005b84518110156114ff57600085828151811061136f5761136e613648565b5b60200260200101519050600085838151811061138e5761138d613648565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561142f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142690613034565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114e49190613324565b92505081905550505050806114f890613543565b9050611351565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611576929190612e83565b60405180910390a461158c818787878787611af2565b61159a818787878787611ce1565b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160890613074565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117029190612eba565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561177f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177690612ff4565b60405180910390fd5b6000611789611278565b9050600061179685611a25565b905060006117a385611a25565b90506117b3838989858589611a9f565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190613034565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118ff9190613324565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161197c92919061312f565b60405180910390a4611992848a8a86868a611af2565b6119a0848a8a8a8a8a611afa565b505050505050505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a1e5750611a1d82611ec8565b5b9050919050565b60606000600167ffffffffffffffff811115611a4457611a43613677565b5b604051908082528060200260200182016040528015611a725781602001602082028036833780820191505090505b5090508281600081518110611a8a57611a89613648565b5b60200260200101818152505080915050919050565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611aea9190612082565b505050505050565b505050505050565b611b198473ffffffffffffffffffffffffffffffffffffffff16611f32565b15611cd9578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611b5f959493929190612dbc565b602060405180830381600087803b158015611b7957600080fd5b505af1925050508015611baa57506040513d601f19601f82011682018060405250810190611ba7919061289d565b60015b611c5057611bb66136a6565b806308c379a01415611c135750611bcb613b1c565b80611bd65750611c15565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0a9190612f12565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4790612f34565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90612f54565b60405180910390fd5b505b505050505050565b611d008473ffffffffffffffffffffffffffffffffffffffff16611f32565b15611ec0578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611d46959493929190612d54565b602060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d9157506040513d601f19601f82011682018060405250810190611d8e919061289d565b60015b611e3757611d9d6136a6565b806308c379a01415611dfa5750611db2613b1c565b80611dbd5750611dfc565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df19190612f12565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90612f34565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb590612f54565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611f61906134e0565b90600052602060002090601f016020900481019282611f835760008555611fca565b82601f10611f9c57803560ff1916838001178555611fca565b82800160010185558215611fca579182015b82811115611fc9578235825591602001919060010190611fae565b5b509050611fd791906120c2565b5090565b5080546000825590600052602060002090810190611ff991906120df565b50565b828054612008906134e0565b90600052602060002090601f01602090048101928261202a5760008555612071565b82601f1061204357803560ff1916838001178555612071565b82800160010185558215612071579182015b82811115612070578235825591602001919060010190612055565b5b50905061207e91906120c2565b5090565b50805461208e906134e0565b6000825580601f106120a057506120bf565b601f0160209004906000526020600020908101906120be91906120c2565b5b50565b5b808211156120db5760008160009055506001016120c3565b5090565b5b808211156120ff57600081816120f69190612103565b506001016120e0565b5090565b50805461210f906134e0565b6000825580601f106121215750612140565b601f01602090049060005260206000209081019061213f91906120c2565b5b50565b6000612156612151846131e0565b6131bb565b90508083825260208201905082856020860282011115612179576121786136dc565b5b60005b858110156121a9578161218f8882612265565b84526020840193506020830192505060018101905061217c565b5050509392505050565b60006121c66121c18461320c565b6131bb565b905080838252602082019050828560208602820111156121e9576121e86136dc565b5b60005b8581101561221957816121ff8882612404565b8452602084019350602083019250506001810190506121ec565b5050509392505050565b600061223661223184613238565b6131bb565b905082815260208101848484011115612252576122516136e6565b5b61225d84828561349e565b509392505050565b60008135905061227481613bc6565b92915050565b600082601f83011261228f5761228e6136cd565b5b813561229f848260208601612143565b91505092915050565b60008083601f8401126122be576122bd6136cd565b5b8235905067ffffffffffffffff8111156122db576122da6136c8565b5b6020830191508360208202830111156122f7576122f66136dc565b5b9250929050565b600082601f830112612313576123126136cd565b5b81356123238482602086016121b3565b91505092915050565b60008135905061233b81613bdd565b92915050565b60008135905061235081613bf4565b92915050565b60008151905061236581613bf4565b92915050565b60008083601f840112612381576123806136cd565b5b8235905067ffffffffffffffff81111561239e5761239d6136c8565b5b6020830191508360018202830111156123ba576123b96136dc565b5b9250929050565b600082601f8301126123d6576123d56136cd565b5b81356123e6848260208601612223565b91505092915050565b6000813590506123fe81613c0b565b92915050565b60008135905061241381613c1b565b92915050565b60006020828403121561242f5761242e6136f0565b5b600061243d84828501612265565b91505092915050565b6000806040838503121561245d5761245c6136f0565b5b600061246b85828601612265565b925050602061247c85828601612265565b9150509250929050565b600080600080600060a086880312156124a2576124a16136f0565b5b60006124b088828901612265565b95505060206124c188828901612265565b945050604086013567ffffffffffffffff8111156124e2576124e16136eb565b5b6124ee888289016122fe565b935050606086013567ffffffffffffffff81111561250f5761250e6136eb565b5b61251b888289016122fe565b925050608086013567ffffffffffffffff81111561253c5761253b6136eb565b5b612548888289016123c1565b9150509295509295909350565b600080600080600060a08688031215612571576125706136f0565b5b600061257f88828901612265565b955050602061259088828901612265565b94505060406125a188828901612404565b93505060606125b288828901612404565b925050608086013567ffffffffffffffff8111156125d3576125d26136eb565b5b6125df888289016123c1565b9150509295509295909350565b60008060408385031215612603576126026136f0565b5b600061261185828601612265565b92505060206126228582860161232c565b9150509250929050565b60008060008060608587031215612646576126456136f0565b5b600061265487828801612265565b94505060206126658782880161232c565b935050604085013567ffffffffffffffff811115612686576126856136eb565b5b6126928782880161236b565b925092505092959194509250565b60008060008060008060008060008060006101008c8e0312156126c6576126c56136f0565b5b60006126d48e828f01612265565b9b505060206126e58e828f016123ef565b9a505060406126f68e828f01612404565b99505060608c013567ffffffffffffffff811115612717576127166136eb565b5b6127238e828f0161236b565b985098505060808c013567ffffffffffffffff811115612746576127456136eb565b5b6127528e828f0161236b565b965096505060a08c013567ffffffffffffffff811115612775576127746136eb565b5b6127818e828f016122a8565b945094505060c06127948e828f01612265565b92505060e06127a58e828f01612404565b9150509295989b509295989b9093969950565b600080604083850312156127cf576127ce6136f0565b5b60006127dd85828601612265565b92505060206127ee85828601612404565b9150509250929050565b6000806040838503121561280f5761280e6136f0565b5b600083013567ffffffffffffffff81111561282d5761282c6136eb565b5b6128398582860161227a565b925050602083013567ffffffffffffffff81111561285a576128596136eb565b5b612866858286016122fe565b9150509250929050565b600060208284031215612886576128856136f0565b5b600061289484828501612341565b91505092915050565b6000602082840312156128b3576128b26136f0565b5b60006128c184828501612356565b91505092915050565b6000602082840312156128e0576128df6136f0565b5b60006128ee84828501612404565b91505092915050565b6000806040838503121561290e5761290d6136f0565b5b600061291c85828601612404565b925050602061292d85828601612404565b9150509250929050565b60006129438383612a9c565b905092915050565b60006129578383612d1b565b60208301905092915050565b61296c81613405565b82525050565b600061297d82613289565b61298781856132cf565b93508360208202850161299985613269565b8060005b858110156129d557848403895281516129b68582612937565b94506129c1836132b5565b925060208a0199505060018101905061299d565b50829750879550505050505092915050565b60006129f282613294565b6129fc81856132e0565b9350612a0783613279565b8060005b83811015612a38578151612a1f888261294b565b9750612a2a836132c2565b925050600181019050612a0b565b5085935050505092915050565b612a4e81613417565b82525050565b6000612a5f8261329f565b612a6981856132f1565b9350612a798185602086016134ad565b612a82816136f5565b840191505092915050565b612a968161348c565b82525050565b6000612aa7826132aa565b612ab18185613302565b9350612ac18185602086016134ad565b612aca816136f5565b840191505092915050565b6000612ae0826132aa565b612aea8185613313565b9350612afa8185602086016134ad565b612b03816136f5565b840191505092915050565b6000612b1b603483613313565b9150612b2682613713565b604082019050919050565b6000612b3e602883613313565b9150612b4982613762565b604082019050919050565b6000612b61601683613313565b9150612b6c826137b1565b602082019050919050565b6000612b84601a83613313565b9150612b8f826137da565b602082019050919050565b6000612ba7602b83613313565b9150612bb282613803565b604082019050919050565b6000612bca602983613313565b9150612bd582613852565b604082019050919050565b6000612bed602583613313565b9150612bf8826138a1565b604082019050919050565b6000612c10603283613313565b9150612c1b826138f0565b604082019050919050565b6000612c33602a83613313565b9150612c3e8261393f565b604082019050919050565b6000612c56601e83613313565b9150612c618261398e565b602082019050919050565b6000612c79602983613313565b9150612c84826139b7565b604082019050919050565b6000612c9c602983613313565b9150612ca782613a06565b604082019050919050565b6000612cbf602883613313565b9150612cca82613a55565b604082019050919050565b6000612ce2602183613313565b9150612ced82613aa4565b604082019050919050565b6000612d05601f83613313565b9150612d1082613af3565b602082019050919050565b612d2481613482565b82525050565b612d3381613482565b82525050565b6000602082019050612d4e6000830184612963565b92915050565b600060a082019050612d696000830188612963565b612d766020830187612963565b8181036040830152612d8881866129e7565b90508181036060830152612d9c81856129e7565b90508181036080830152612db08184612a54565b90509695505050505050565b600060a082019050612dd16000830188612963565b612dde6020830187612963565b612deb6040830186612d2a565b612df86060830185612d2a565b8181036080830152612e0a8184612a54565b90509695505050505050565b6000604082019050612e2b6000830185612963565b612e386020830184612d2a565b9392505050565b60006020820190508181036000830152612e598184612972565b905092915050565b60006020820190508181036000830152612e7b81846129e7565b905092915050565b60006040820190508181036000830152612e9d81856129e7565b90508181036020830152612eb181846129e7565b90509392505050565b6000602082019050612ecf6000830184612a45565b92915050565b60006020820190508181036000830152612eef8184612a54565b905092915050565b6000602082019050612f0c6000830184612a8d565b92915050565b60006020820190508181036000830152612f2c8184612ad5565b905092915050565b60006020820190508181036000830152612f4d81612b0e565b9050919050565b60006020820190508181036000830152612f6d81612b31565b9050919050565b60006020820190508181036000830152612f8d81612b54565b9050919050565b60006020820190508181036000830152612fad81612b77565b9050919050565b60006020820190508181036000830152612fcd81612b9a565b9050919050565b60006020820190508181036000830152612fed81612bbd565b9050919050565b6000602082019050818103600083015261300d81612be0565b9050919050565b6000602082019050818103600083015261302d81612c03565b9050919050565b6000602082019050818103600083015261304d81612c26565b9050919050565b6000602082019050818103600083015261306d81612c49565b9050919050565b6000602082019050818103600083015261308d81612c6c565b9050919050565b600060208201905081810360008301526130ad81612c8f565b9050919050565b600060208201905081810360008301526130cd81612cb2565b9050919050565b600060208201905081810360008301526130ed81612cd5565b9050919050565b6000602082019050818103600083015261310d81612cf8565b9050919050565b60006020820190506131296000830184612d2a565b92915050565b60006040820190506131446000830185612d2a565b6131516020830184612d2a565b9392505050565b60008083356001602003843603038112613175576131746136d7565b5b80840192508235915067ffffffffffffffff821115613197576131966136d2565b5b6020830192506001820236038313156131b3576131b26136e1565b5b509250929050565b60006131c56131d6565b90506131d18282613512565b919050565b6000604051905090565b600067ffffffffffffffff8211156131fb576131fa613677565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561322757613226613677565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561325357613252613677565b5b61325c826136f5565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061332f82613482565b915061333a83613482565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561336f5761336e61358c565b5b828201905092915050565b600061338582613482565b915061339083613482565b9250826133a05761339f6135bb565b5b828204905092915050565b60006133b682613482565b91506133c183613482565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156133fa576133f961358c565b5b828202905092915050565b600061341082613462565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061345d82613bb2565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006134978261344f565b9050919050565b82818337600083830152505050565b60005b838110156134cb5780820151818401526020810190506134b0565b838111156134da576000848401525b50505050565b600060028204905060018216806134f857607f821691505b6020821081141561350c5761350b613619565b5b50919050565b61351b826136f5565b810181811067ffffffffffffffff8211171561353a57613539613677565b5b80604052505050565b600061354e82613482565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135815761358061358c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156136c55760046000803e6136c2600051613706565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f75736520617070726f7665466f7220696e737465616400000000000000000000600082015250565b7f45524332393831526f79616c746965733a20546f6f2068696768000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820616d6f756e7420666f722074686520466565730000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600060443d1015613b2c57613baf565b613b346131d6565b60043d036004823e80513d602482011167ffffffffffffffff82111715613b5c575050613baf565b808201805167ffffffffffffffff811115613b7a5750505050613baf565b80602083010160043d038501811115613b97575050505050613baf565b613ba682602001850186613512565b82955050505050505b90565b60038110613bc357613bc26135ea565b5b50565b613bcf81613405565b8114613bda57600080fd5b50565b613be681613417565b8114613bf157600080fd5b50565b613bfd81613423565b8114613c0857600080fd5b50565b60038110613c1857600080fd5b50565b613c2481613482565b8114613c2f57600080fd5b5056fea264697066735822122038fd2c71449f17fb9e18dee232085376930036061f25a541070f9ddd8296878564736f6c63430008070033

Deployed Bytecode Sourcemap

41052:6710:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25020:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45773:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41933:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43454:1116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45404:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26959:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44833:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25417:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41700:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42925:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42733:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41305:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42256:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26241:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26481:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25020:231;25106:7;25153:1;25134:21;;:7;:21;;;;25126:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25221:9;:13;25231:2;25221:13;;;;;;;;;;;:22;25235:7;25221:22;;;;;;;;;;;;;;;;25214:29;;25020:231;;;;:::o;45773:225::-;45925:4;45954:36;45978:11;45954:23;:36::i;:::-;45947:43;;45773:225;;;:::o;41933:132::-;41997:13;42037:10;:15;42048:3;42037:15;;;;;;;;;;;:19;;42023:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41933:132;;;:::o;43454:1116::-;43672:4;2589:1;3187:7;;:19;;3179:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2589:1;3320:7;:18;;;;43710:1:::1;43697:9;:14;;43689:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;43761:1;43757:2;;:5;;;;;;;:::i;:::-;;;;;;;;43773:25;43779:2;43783;;43787:6;43773:25;;;;;;;;;;;::::0;:5:::1;:25::i;:::-;43827:6;43811:9;:13;43821:2;;43811:13;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;43862:1;43848:4;;:11;;:15;43844:73;;;43901:4;;43880:10;:14;43891:2;;43880:14;;;;;;;;;;;:18;;:25;;;;;;;:::i;:::-;;43844:73;44055:1;44041:4;;:11;;:15;44037:269;;;44080:10;:14;44091:2;;44080:14;;;;;;;;;;;:18;;;44073:25;;;;:::i;:::-;44113:20;44136:10;:14;44147:2;;44136:14;;;;;;;;;;;:18;;44113:41;;44174:9;44169:126;44193:4;;:11;;44189:1;:15;44169:126;;;44226:3;44235:4;;44240:1;44235:7;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;44226:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44274:3;;;;;;;44169:126;;;;44058:248;44037:269;44335:1;44320:12;:16;44316:101;;;44353:52;44370:2;;44374:16;44392:12;44353:16;:52::i;:::-;44316:101;44438:3;;44427:4;:8;44432:2;44427:8;;;;;;;;;;;;;;;:14;;;;;;;:::i;:::-;;44452:5;;;;;;;;;;;:14;;:25;44467:9;44452:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44528:2;;44493:39;44515:10;44493:39;;;;;;:::i;:::-;;;;;;;;44560:2;;44553:9;;2545:1:::0;3499:7;:22;;;;43454:1116;;;;;;;;;;;;;:::o;45404:317::-;45500:17;45519:22;45554:27;45584:10;:20;45595:8;45584:20;;;;;;;;;;;:28;;45554:58;;45635:7;:17;;;;;;;;;;;;45623:29;;45708:5;45690:7;:14;;;;;;;;;;;;45681:23;;:6;:23;;;;:::i;:::-;45680:33;;;;:::i;:::-;45663:50;;45543:178;45404:317;;;;;:::o;26959:442::-;27200:12;:10;:12::i;:::-;27192:20;;:4;:20;;;:60;;;;27216:36;27233:4;27239:12;:10;:12::i;:::-;27216:16;:36::i;:::-;27192:60;27170:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27341:52;27364:4;27370:2;27374:3;27379:7;27388:4;27341:22;:52::i;:::-;26959:442;;;;;:::o;44833:126::-;44892:15;44927:10;:20;44938:8;44927:20;;;;;;;;;;;:24;;44920:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44833:126;;;:::o;25417:524::-;25573:16;25634:3;:10;25615:8;:15;:29;25607:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25703:30;25750:8;:15;25736:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25703:63;;25784:9;25779:122;25803:8;:15;25799:1;:19;25779:122;;;25859:30;25869:8;25878:1;25869:11;;;;;;;;:::i;:::-;;;;;;;;25882:3;25886:1;25882:6;;;;;;;;:::i;:::-;;;;;;;;25859:9;:30::i;:::-;25840:13;25854:1;25840:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25820:3;;;;:::i;:::-;;;25779:122;;;;25920:13;25913:20;;;25417:524;;;;:::o;41700:37::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42925:143::-;43028:32;;;;;;;;;;:::i;:::-;;;;;;;;42733:111;42795:7;42822:9;:14;42832:3;42822:14;;;;;;;;;;;;;;;;;;;;;42815:21;;42733:111;;;:::o;41305:17::-;;;;:::o;42256:281::-;42352:52;42371:12;:10;:12::i;:::-;42385:8;42395;42352:18;:52::i;:::-;42419:8;42415:115;;;42461:3;;42444:4;:14;42449:8;42444:14;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;42415:115;;;42504:4;:14;42509:8;42504:14;;;;;;;;;;;;;;;;42497:21;;;;:::i;:::-;42415:115;42256:281;;;;:::o;26241:168::-;26340:4;26364:18;:27;26383:7;26364:27;;;;;;;;;;;;;;;:37;26392:8;26364:37;;;;;;;;;;;;;;;;;;;;;;;;;26357:44;;26241:168;;;;:::o;26481:401::-;26697:12;:10;:12::i;:::-;26689:20;;:4;:20;;;:60;;;;26713:36;26730:4;26736:12;:10;:12::i;:::-;26713:16;:36::i;:::-;26689:60;26667:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26829:45;26847:4;26853:2;26857;26861:6;26869:4;26829:17;:45::i;:::-;26481:401;;;;;:::o;24043:310::-;24145:4;24197:26;24182:41;;;:11;:41;;;;:110;;;;24255:37;24240:52;;;:11;:52;;;;24182:110;:163;;;;24309:36;24333:11;24309:23;:36::i;:::-;24182:163;24162:183;;24043:310;;;:::o;31661:729::-;31828:1;31814:16;;:2;:16;;;;31806:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31881:16;31900:12;:10;:12::i;:::-;31881:31;;31923:20;31946:21;31964:2;31946:17;:21::i;:::-;31923:44;;31978:24;32005:25;32023:6;32005:17;:25::i;:::-;31978:52;;32043:66;32064:8;32082:1;32086:2;32090:3;32095:7;32104:4;32043:20;:66::i;:::-;32143:6;32122:9;:13;32132:2;32122:13;;;;;;;;;;;:17;32136:2;32122:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32202:2;32165:52;;32198:1;32165:52;;32180:8;32165:52;;;32206:2;32210:6;32165:52;;;;;;;:::i;:::-;;;;;;;;32230:65;32250:8;32268:1;32272:2;32276:3;32281:7;32290:4;32230:19;:65::i;:::-;32308:74;32339:8;32357:1;32361:2;32365;32369:6;32377:4;32308:30;:74::i;:::-;31795:595;;;31661:729;;;;:::o;47485:270::-;47633:5;47624;:14;;47616:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;47710:37;;;;;;;;47722:9;47710:37;;;;;;47740:5;47710:37;;;;;47680:10;:19;47691:7;47680:19;;;;;;;;;;;:27;;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47485:270;;;:::o;4215:98::-;4268:7;4295:10;4288:17;;4215:98;:::o;29197:1146::-;29424:7;:14;29410:3;:10;:28;29402:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29516:1;29502:16;;:2;:16;;;;29494:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29573:16;29592:12;:10;:12::i;:::-;29573:31;;29617:60;29638:8;29648:4;29654:2;29658:3;29663:7;29672:4;29617:20;:60::i;:::-;29695:9;29690:421;29714:3;:10;29710:1;:14;29690:421;;;29746:10;29759:3;29763:1;29759:6;;;;;;;;:::i;:::-;;;;;;;;29746:19;;29780:14;29797:7;29805:1;29797:10;;;;;;;;:::i;:::-;;;;;;;;29780:27;;29824:19;29846:9;:13;29856:2;29846:13;;;;;;;;;;;:19;29860:4;29846:19;;;;;;;;;;;;;;;;29824:41;;29903:6;29888:11;:21;;29880:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30036:6;30022:11;:20;30000:9;:13;30010:2;30000:13;;;;;;;;;;;:19;30014:4;30000:19;;;;;;;;;;;;;;;:42;;;;30093:6;30072:9;:13;30082:2;30072:13;;;;;;;;;;;:17;30086:2;30072:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29731:380;;;29726:3;;;;:::i;:::-;;;29690:421;;;;30158:2;30128:47;;30152:4;30128:47;;30142:8;30128:47;;;30162:3;30167:7;30128:47;;;;;;;:::i;:::-;;;;;;;;30188:59;30208:8;30218:4;30224:2;30228:3;30233:7;30242:4;30188:19;:59::i;:::-;30260:75;30296:8;30306:4;30312:2;30316:3;30321:7;30330:4;30260:35;:75::i;:::-;29391:952;29197:1146;;;;;:::o;35931:331::-;36086:8;36077:17;;:5;:17;;;;36069:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36189:8;36151:18;:25;36170:5;36151:25;;;;;;;;;;;;;;;:35;36177:8;36151:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36235:8;36213:41;;36228:5;36213:41;;;36245:8;36213:41;;;;;;:::i;:::-;;;;;;;;35931:331;;;:::o;27865:974::-;28067:1;28053:16;;:2;:16;;;;28045:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28124:16;28143:12;:10;:12::i;:::-;28124:31;;28166:20;28189:21;28207:2;28189:17;:21::i;:::-;28166:44;;28221:24;28248:25;28266:6;28248:17;:25::i;:::-;28221:52;;28286:60;28307:8;28317:4;28323:2;28327:3;28332:7;28341:4;28286:20;:60::i;:::-;28359:19;28381:9;:13;28391:2;28381:13;;;;;;;;;;;:19;28395:4;28381:19;;;;;;;;;;;;;;;;28359:41;;28434:6;28419:11;:21;;28411:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28559:6;28545:11;:20;28523:9;:13;28533:2;28523:13;;;;;;;;;;;:19;28537:4;28523:19;;;;;;;;;;;;;;;:42;;;;28608:6;28587:9;:13;28597:2;28587:13;;;;;;;;;;;:17;28601:2;28587:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28663:2;28632:46;;28657:4;28632:46;;28647:8;28632:46;;;28667:2;28671:6;28632:46;;;;;;;:::i;:::-;;;;;;;;28691:59;28711:8;28721:4;28727:2;28731:3;28736:7;28745:4;28691:19;:59::i;:::-;28763:68;28794:8;28804:4;28810:2;28814;28818:6;28826:4;28763:30;:68::i;:::-;28034:805;;;;27865:974;;;;;:::o;15212:283::-;15342:4;15399:35;15384:50;;;:11;:50;;;;:103;;;;15451:36;15475:11;15451:23;:36::i;:::-;15384:103;15364:123;;15212:283;;;:::o;40195:198::-;40261:16;40290:22;40329:1;40315:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40290:41;;40353:7;40342:5;40348:1;40342:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40380:5;40373:12;;;40195:198;;;:::o;46954:276::-;47212:4;:10;47217:4;47212:10;;;;;;;;;;;;;;;;47205:17;;;;:::i;:::-;46954:276;;;;;;:::o;38394:220::-;;;;;;;:::o;38622:744::-;38837:15;:2;:13;;;:15::i;:::-;38833:526;;;38890:2;38873:38;;;38912:8;38922:4;38928:2;38932:6;38940:4;38873:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38869:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39221:6;39214:14;;;;;;;;;;;:::i;:::-;;;;;;;;38869:479;;;39270:62;;;;;;;;;;:::i;:::-;;;;;;;;38869:479;39007:43;;;38995:55;;;:8;:55;;;;38991:154;;39075:50;;;;;;;;;;:::i;:::-;;;;;;;;38991:154;38946:214;38833:526;38622:744;;;;;;:::o;39374:813::-;39614:15;:2;:13;;;:15::i;:::-;39610:570;;;39667:2;39650:43;;;39694:8;39704:4;39710:3;39715:7;39724:4;39650:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39646:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40042:6;40035:14;;;;;;;;;;;:::i;:::-;;;;;;;;39646:523;;;40091:62;;;;;;;;;;:::i;:::-;;;;;;;;39646:523;39823:48;;;39811:60;;;:8;:60;;;;39807:159;;39896:50;;;;;;;;;;:::i;:::-;;;;;;;;39807:159;39730:251;39610:570;39374:813;;;;;;:::o;14714:157::-;14799:4;14838:25;14823:40;;;:11;:40;;;;14816:47;;14714:157;;;:::o;5662:326::-;5722:4;5979:1;5957:7;:19;;;:23;5950:30;;5662:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2467:580::-;2552:8;2562:6;2612:3;2605:4;2597:6;2593:17;2589:27;2579:122;;2620:79;;:::i;:::-;2579:122;2733:6;2720:20;2710:30;;2763:18;2755:6;2752:30;2749:117;;;2785:79;;:::i;:::-;2749:117;2899:4;2891:6;2887:17;2875:29;;2953:3;2945:4;2937:6;2933:17;2923:8;2919:32;2916:41;2913:128;;;2960:79;;:::i;:::-;2913:128;2467:580;;;;;:::o;3070:370::-;3141:5;3190:3;3183:4;3175:6;3171:17;3167:27;3157:122;;3198:79;;:::i;:::-;3157:122;3315:6;3302:20;3340:94;3430:3;3422:6;3415:4;3407:6;3403:17;3340:94;:::i;:::-;3331:103;;3147:293;3070:370;;;;:::o;3446:133::-;3489:5;3527:6;3514:20;3505:29;;3543:30;3567:5;3543:30;:::i;:::-;3446:133;;;;:::o;3585:137::-;3630:5;3668:6;3655:20;3646:29;;3684:32;3710:5;3684:32;:::i;:::-;3585:137;;;;:::o;3728:141::-;3784:5;3815:6;3809:13;3800:22;;3831:32;3857:5;3831:32;:::i;:::-;3728:141;;;;:::o;3888:552::-;3945:8;3955:6;4005:3;3998:4;3990:6;3986:17;3982:27;3972:122;;4013:79;;:::i;:::-;3972:122;4126:6;4113:20;4103:30;;4156:18;4148:6;4145:30;4142:117;;;4178:79;;:::i;:::-;4142:117;4292:4;4284:6;4280:17;4268:29;;4346:3;4338:4;4330:6;4326:17;4316:8;4312:32;4309:41;4306:128;;;4353:79;;:::i;:::-;4306:128;3888:552;;;;;:::o;4459:338::-;4514:5;4563:3;4556:4;4548:6;4544:17;4540:27;4530:122;;4571:79;;:::i;:::-;4530:122;4688:6;4675:20;4713:78;4787:3;4779:6;4772:4;4764:6;4760:17;4713:78;:::i;:::-;4704:87;;4520:277;4459:338;;;;:::o;4803:163::-;4861:5;4899:6;4886:20;4877:29;;4915:45;4954:5;4915:45;:::i;:::-;4803:163;;;;:::o;4972:139::-;5018:5;5056:6;5043:20;5034:29;;5072:33;5099:5;5072:33;:::i;:::-;4972:139;;;;:::o;5117:329::-;5176:6;5225:2;5213:9;5204:7;5200:23;5196:32;5193:119;;;5231:79;;:::i;:::-;5193:119;5351:1;5376:53;5421:7;5412:6;5401:9;5397:22;5376:53;:::i;:::-;5366:63;;5322:117;5117:329;;;;:::o;5452:474::-;5520:6;5528;5577:2;5565:9;5556:7;5552:23;5548:32;5545:119;;;5583:79;;:::i;:::-;5545:119;5703:1;5728:53;5773:7;5764:6;5753:9;5749:22;5728:53;:::i;:::-;5718:63;;5674:117;5830:2;5856:53;5901:7;5892:6;5881:9;5877:22;5856:53;:::i;:::-;5846:63;;5801:118;5452:474;;;;;:::o;5932:1509::-;6086:6;6094;6102;6110;6118;6167:3;6155:9;6146:7;6142:23;6138:33;6135:120;;;6174:79;;:::i;:::-;6135:120;6294:1;6319:53;6364:7;6355:6;6344:9;6340:22;6319:53;:::i;:::-;6309:63;;6265:117;6421:2;6447:53;6492:7;6483:6;6472:9;6468:22;6447:53;:::i;:::-;6437:63;;6392:118;6577:2;6566:9;6562:18;6549:32;6608:18;6600:6;6597:30;6594:117;;;6630:79;;:::i;:::-;6594:117;6735:78;6805:7;6796:6;6785:9;6781:22;6735:78;:::i;:::-;6725:88;;6520:303;6890:2;6879:9;6875:18;6862:32;6921:18;6913:6;6910:30;6907:117;;;6943:79;;:::i;:::-;6907:117;7048:78;7118:7;7109:6;7098:9;7094:22;7048:78;:::i;:::-;7038:88;;6833:303;7203:3;7192:9;7188:19;7175:33;7235:18;7227:6;7224:30;7221:117;;;7257:79;;:::i;:::-;7221:117;7362:62;7416:7;7407:6;7396:9;7392:22;7362:62;:::i;:::-;7352:72;;7146:288;5932:1509;;;;;;;;:::o;7447:1089::-;7551:6;7559;7567;7575;7583;7632:3;7620:9;7611:7;7607:23;7603:33;7600:120;;;7639:79;;:::i;:::-;7600:120;7759:1;7784:53;7829:7;7820:6;7809:9;7805:22;7784:53;:::i;:::-;7774:63;;7730:117;7886:2;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7857:118;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;8142:2;8168:53;8213:7;8204:6;8193:9;8189:22;8168:53;:::i;:::-;8158:63;;8113:118;8298:3;8287:9;8283:19;8270:33;8330:18;8322:6;8319:30;8316:117;;;8352:79;;:::i;:::-;8316:117;8457:62;8511:7;8502:6;8491:9;8487:22;8457:62;:::i;:::-;8447:72;;8241:288;7447:1089;;;;;;;;:::o;8542:468::-;8607:6;8615;8664:2;8652:9;8643:7;8639:23;8635:32;8632:119;;;8670:79;;:::i;:::-;8632:119;8790:1;8815:53;8860:7;8851:6;8840:9;8836:22;8815:53;:::i;:::-;8805:63;;8761:117;8917:2;8943:50;8985:7;8976:6;8965:9;8961:22;8943:50;:::i;:::-;8933:60;;8888:115;8542:468;;;;;:::o;9016:811::-;9101:6;9109;9117;9125;9174:2;9162:9;9153:7;9149:23;9145:32;9142:119;;;9180:79;;:::i;:::-;9142:119;9300:1;9325:53;9370:7;9361:6;9350:9;9346:22;9325:53;:::i;:::-;9315:63;;9271:117;9427:2;9453:50;9495:7;9486:6;9475:9;9471:22;9453:50;:::i;:::-;9443:60;;9398:115;9580:2;9569:9;9565:18;9552:32;9611:18;9603:6;9600:30;9597:117;;;9633:79;;:::i;:::-;9597:117;9746:64;9802:7;9793:6;9782:9;9778:22;9746:64;:::i;:::-;9728:82;;;;9523:297;9016:811;;;;;;;:::o;9833:2025::-;10028:6;10036;10044;10052;10060;10068;10076;10084;10092;10100;10108:7;10158:3;10146:9;10137:7;10133:23;10129:33;10126:120;;;10165:79;;:::i;:::-;10126:120;10285:1;10310:53;10355:7;10346:6;10335:9;10331:22;10310:53;:::i;:::-;10300:63;;10256:117;10412:2;10438:65;10495:7;10486:6;10475:9;10471:22;10438:65;:::i;:::-;10428:75;;10383:130;10552:2;10578:53;10623:7;10614:6;10603:9;10599:22;10578:53;:::i;:::-;10568:63;;10523:118;10708:2;10697:9;10693:18;10680:32;10739:18;10731:6;10728:30;10725:117;;;10761:79;;:::i;:::-;10725:117;10874:64;10930:7;10921:6;10910:9;10906:22;10874:64;:::i;:::-;10856:82;;;;10651:297;11015:3;11004:9;11000:19;10987:33;11047:18;11039:6;11036:30;11033:117;;;11069:79;;:::i;:::-;11033:117;11182:64;11238:7;11229:6;11218:9;11214:22;11182:64;:::i;:::-;11164:82;;;;10958:298;11323:3;11312:9;11308:19;11295:33;11355:18;11347:6;11344:30;11341:117;;;11377:79;;:::i;:::-;11341:117;11490:92;11574:7;11565:6;11554:9;11550:22;11490:92;:::i;:::-;11472:110;;;;11266:326;11631:3;11658:53;11703:7;11694:6;11683:9;11679:22;11658:53;:::i;:::-;11648:63;;11602:119;11760:3;11788:53;11833:7;11824:6;11813:9;11809:22;11788:53;:::i;:::-;11777:64;;11731:120;9833:2025;;;;;;;;;;;;;;:::o;11864:474::-;11932:6;11940;11989:2;11977:9;11968:7;11964:23;11960:32;11957:119;;;11995:79;;:::i;:::-;11957:119;12115:1;12140:53;12185:7;12176:6;12165:9;12161:22;12140:53;:::i;:::-;12130:63;;12086:117;12242:2;12268:53;12313:7;12304:6;12293:9;12289:22;12268:53;:::i;:::-;12258:63;;12213:118;11864:474;;;;;:::o;12344:894::-;12462:6;12470;12519:2;12507:9;12498:7;12494:23;12490:32;12487:119;;;12525:79;;:::i;:::-;12487:119;12673:1;12662:9;12658:17;12645:31;12703:18;12695:6;12692:30;12689:117;;;12725:79;;:::i;:::-;12689:117;12830:78;12900:7;12891:6;12880:9;12876:22;12830:78;:::i;:::-;12820:88;;12616:302;12985:2;12974:9;12970:18;12957:32;13016:18;13008:6;13005:30;13002:117;;;13038:79;;:::i;:::-;13002:117;13143:78;13213:7;13204:6;13193:9;13189:22;13143:78;:::i;:::-;13133:88;;12928:303;12344:894;;;;;:::o;13244:327::-;13302:6;13351:2;13339:9;13330:7;13326:23;13322:32;13319:119;;;13357:79;;:::i;:::-;13319:119;13477:1;13502:52;13546:7;13537:6;13526:9;13522:22;13502:52;:::i;:::-;13492:62;;13448:116;13244:327;;;;:::o;13577:349::-;13646:6;13695:2;13683:9;13674:7;13670:23;13666:32;13663:119;;;13701:79;;:::i;:::-;13663:119;13821:1;13846:63;13901:7;13892:6;13881:9;13877:22;13846:63;:::i;:::-;13836:73;;13792:127;13577:349;;;;:::o;13932:329::-;13991:6;14040:2;14028:9;14019:7;14015:23;14011:32;14008:119;;;14046:79;;:::i;:::-;14008:119;14166:1;14191:53;14236:7;14227:6;14216:9;14212:22;14191:53;:::i;:::-;14181:63;;14137:117;13932:329;;;;:::o;14267:474::-;14335:6;14343;14392:2;14380:9;14371:7;14367:23;14363:32;14360:119;;;14398:79;;:::i;:::-;14360:119;14518:1;14543:53;14588:7;14579:6;14568:9;14564:22;14543:53;:::i;:::-;14533:63;;14489:117;14645:2;14671:53;14716:7;14707:6;14696:9;14692:22;14671:53;:::i;:::-;14661:63;;14616:118;14267:474;;;;;:::o;14747:196::-;14836:10;14871:66;14933:3;14925:6;14871:66;:::i;:::-;14857:80;;14747:196;;;;:::o;14949:179::-;15018:10;15039:46;15081:3;15073:6;15039:46;:::i;:::-;15117:4;15112:3;15108:14;15094:28;;14949:179;;;;:::o;15134:118::-;15221:24;15239:5;15221:24;:::i;:::-;15216:3;15209:37;15134:118;;:::o;15286:991::-;15425:3;15454:64;15512:5;15454:64;:::i;:::-;15534:96;15623:6;15618:3;15534:96;:::i;:::-;15527:103;;15656:3;15701:4;15693:6;15689:17;15684:3;15680:27;15731:66;15791:5;15731:66;:::i;:::-;15820:7;15851:1;15836:396;15861:6;15858:1;15855:13;15836:396;;;15932:9;15926:4;15922:20;15917:3;15910:33;15983:6;15977:13;16011:84;16090:4;16075:13;16011:84;:::i;:::-;16003:92;;16118:70;16181:6;16118:70;:::i;:::-;16108:80;;16217:4;16212:3;16208:14;16201:21;;15896:336;15883:1;15880;15876:9;15871:14;;15836:396;;;15840:14;16248:4;16241:11;;16268:3;16261:10;;15430:847;;;;;15286:991;;;;:::o;16313:732::-;16432:3;16461:54;16509:5;16461:54;:::i;:::-;16531:86;16610:6;16605:3;16531:86;:::i;:::-;16524:93;;16641:56;16691:5;16641:56;:::i;:::-;16720:7;16751:1;16736:284;16761:6;16758:1;16755:13;16736:284;;;16837:6;16831:13;16864:63;16923:3;16908:13;16864:63;:::i;:::-;16857:70;;16950:60;17003:6;16950:60;:::i;:::-;16940:70;;16796:224;16783:1;16780;16776:9;16771:14;;16736:284;;;16740:14;17036:3;17029:10;;16437:608;;;16313:732;;;;:::o;17051:109::-;17132:21;17147:5;17132:21;:::i;:::-;17127:3;17120:34;17051:109;;:::o;17166:360::-;17252:3;17280:38;17312:5;17280:38;:::i;:::-;17334:70;17397:6;17392:3;17334:70;:::i;:::-;17327:77;;17413:52;17458:6;17453:3;17446:4;17439:5;17435:16;17413:52;:::i;:::-;17490:29;17512:6;17490:29;:::i;:::-;17485:3;17481:39;17474:46;;17256:270;17166:360;;;;:::o;17532:151::-;17629:47;17670:5;17629:47;:::i;:::-;17624:3;17617:60;17532:151;;:::o;17689:344::-;17767:3;17795:39;17828:5;17795:39;:::i;:::-;17850:61;17904:6;17899:3;17850:61;:::i;:::-;17843:68;;17920:52;17965:6;17960:3;17953:4;17946:5;17942:16;17920:52;:::i;:::-;17997:29;18019:6;17997:29;:::i;:::-;17992:3;17988:39;17981:46;;17771:262;17689:344;;;;:::o;18039:364::-;18127:3;18155:39;18188:5;18155:39;:::i;:::-;18210:71;18274:6;18269:3;18210:71;:::i;:::-;18203:78;;18290:52;18335:6;18330:3;18323:4;18316:5;18312:16;18290:52;:::i;:::-;18367:29;18389:6;18367:29;:::i;:::-;18362:3;18358:39;18351:46;;18131:272;18039:364;;;;:::o;18409:366::-;18551:3;18572:67;18636:2;18631:3;18572:67;:::i;:::-;18565:74;;18648:93;18737:3;18648:93;:::i;:::-;18766:2;18761:3;18757:12;18750:19;;18409:366;;;:::o;18781:::-;18923:3;18944:67;19008:2;19003:3;18944:67;:::i;:::-;18937:74;;19020:93;19109:3;19020:93;:::i;:::-;19138:2;19133:3;19129:12;19122:19;;18781:366;;;:::o;19153:::-;19295:3;19316:67;19380:2;19375:3;19316:67;:::i;:::-;19309:74;;19392:93;19481:3;19392:93;:::i;:::-;19510:2;19505:3;19501:12;19494:19;;19153:366;;;:::o;19525:::-;19667:3;19688:67;19752:2;19747:3;19688:67;:::i;:::-;19681:74;;19764:93;19853:3;19764:93;:::i;:::-;19882:2;19877:3;19873:12;19866:19;;19525:366;;;:::o;19897:::-;20039:3;20060:67;20124:2;20119:3;20060:67;:::i;:::-;20053:74;;20136:93;20225:3;20136:93;:::i;:::-;20254:2;20249:3;20245:12;20238:19;;19897:366;;;:::o;20269:::-;20411:3;20432:67;20496:2;20491:3;20432:67;:::i;:::-;20425:74;;20508:93;20597:3;20508:93;:::i;:::-;20626:2;20621:3;20617:12;20610:19;;20269:366;;;:::o;20641:::-;20783:3;20804:67;20868:2;20863:3;20804:67;:::i;:::-;20797:74;;20880:93;20969:3;20880:93;:::i;:::-;20998:2;20993:3;20989:12;20982:19;;20641:366;;;:::o;21013:::-;21155:3;21176:67;21240:2;21235:3;21176:67;:::i;:::-;21169:74;;21252:93;21341:3;21252:93;:::i;:::-;21370:2;21365:3;21361:12;21354:19;;21013:366;;;:::o;21385:::-;21527:3;21548:67;21612:2;21607:3;21548:67;:::i;:::-;21541:74;;21624:93;21713:3;21624:93;:::i;:::-;21742:2;21737:3;21733:12;21726:19;;21385:366;;;:::o;21757:::-;21899:3;21920:67;21984:2;21979:3;21920:67;:::i;:::-;21913:74;;21996:93;22085:3;21996:93;:::i;:::-;22114:2;22109:3;22105:12;22098:19;;21757:366;;;:::o;22129:::-;22271:3;22292:67;22356:2;22351:3;22292:67;:::i;:::-;22285:74;;22368:93;22457:3;22368:93;:::i;:::-;22486:2;22481:3;22477:12;22470:19;;22129:366;;;:::o;22501:::-;22643:3;22664:67;22728:2;22723:3;22664:67;:::i;:::-;22657:74;;22740:93;22829:3;22740:93;:::i;:::-;22858:2;22853:3;22849:12;22842:19;;22501:366;;;:::o;22873:::-;23015:3;23036:67;23100:2;23095:3;23036:67;:::i;:::-;23029:74;;23112:93;23201:3;23112:93;:::i;:::-;23230:2;23225:3;23221:12;23214:19;;22873:366;;;:::o;23245:::-;23387:3;23408:67;23472:2;23467:3;23408:67;:::i;:::-;23401:74;;23484:93;23573:3;23484:93;:::i;:::-;23602:2;23597:3;23593:12;23586:19;;23245:366;;;:::o;23617:::-;23759:3;23780:67;23844:2;23839:3;23780:67;:::i;:::-;23773:74;;23856:93;23945:3;23856:93;:::i;:::-;23974:2;23969:3;23965:12;23958:19;;23617:366;;;:::o;23989:108::-;24066:24;24084:5;24066:24;:::i;:::-;24061:3;24054:37;23989:108;;:::o;24103:118::-;24190:24;24208:5;24190:24;:::i;:::-;24185:3;24178:37;24103:118;;:::o;24227:222::-;24320:4;24358:2;24347:9;24343:18;24335:26;;24371:71;24439:1;24428:9;24424:17;24415:6;24371:71;:::i;:::-;24227:222;;;;:::o;24455:1053::-;24778:4;24816:3;24805:9;24801:19;24793:27;;24830:71;24898:1;24887:9;24883:17;24874:6;24830:71;:::i;:::-;24911:72;24979:2;24968:9;24964:18;24955:6;24911:72;:::i;:::-;25030:9;25024:4;25020:20;25015:2;25004:9;25000:18;24993:48;25058:108;25161:4;25152:6;25058:108;:::i;:::-;25050:116;;25213:9;25207:4;25203:20;25198:2;25187:9;25183:18;25176:48;25241:108;25344:4;25335:6;25241:108;:::i;:::-;25233:116;;25397:9;25391:4;25387:20;25381:3;25370:9;25366:19;25359:49;25425:76;25496:4;25487:6;25425:76;:::i;:::-;25417:84;;24455:1053;;;;;;;;:::o;25514:751::-;25737:4;25775:3;25764:9;25760:19;25752:27;;25789:71;25857:1;25846:9;25842:17;25833:6;25789:71;:::i;:::-;25870:72;25938:2;25927:9;25923:18;25914:6;25870:72;:::i;:::-;25952;26020:2;26009:9;26005:18;25996:6;25952:72;:::i;:::-;26034;26102:2;26091:9;26087:18;26078:6;26034:72;:::i;:::-;26154:9;26148:4;26144:20;26138:3;26127:9;26123:19;26116:49;26182:76;26253:4;26244:6;26182:76;:::i;:::-;26174:84;;25514:751;;;;;;;;:::o;26271:332::-;26392:4;26430:2;26419:9;26415:18;26407:26;;26443:71;26511:1;26500:9;26496:17;26487:6;26443:71;:::i;:::-;26524:72;26592:2;26581:9;26577:18;26568:6;26524:72;:::i;:::-;26271:332;;;;;:::o;26609:413::-;26772:4;26810:2;26799:9;26795:18;26787:26;;26859:9;26853:4;26849:20;26845:1;26834:9;26830:17;26823:47;26887:128;27010:4;27001:6;26887:128;:::i;:::-;26879:136;;26609:413;;;;:::o;27028:373::-;27171:4;27209:2;27198:9;27194:18;27186:26;;27258:9;27252:4;27248:20;27244:1;27233:9;27229:17;27222:47;27286:108;27389:4;27380:6;27286:108;:::i;:::-;27278:116;;27028:373;;;;:::o;27407:634::-;27628:4;27666:2;27655:9;27651:18;27643:26;;27715:9;27709:4;27705:20;27701:1;27690:9;27686:17;27679:47;27743:108;27846:4;27837:6;27743:108;:::i;:::-;27735:116;;27898:9;27892:4;27888:20;27883:2;27872:9;27868:18;27861:48;27926:108;28029:4;28020:6;27926:108;:::i;:::-;27918:116;;27407:634;;;;;:::o;28047:210::-;28134:4;28172:2;28161:9;28157:18;28149:26;;28185:65;28247:1;28236:9;28232:17;28223:6;28185:65;:::i;:::-;28047:210;;;;:::o;28263:309::-;28374:4;28412:2;28401:9;28397:18;28389:26;;28461:9;28455:4;28451:20;28447:1;28436:9;28432:17;28425:47;28489:76;28560:4;28551:6;28489:76;:::i;:::-;28481:84;;28263:309;;;;:::o;28578:242::-;28681:4;28719:2;28708:9;28704:18;28696:26;;28732:81;28810:1;28799:9;28795:17;28786:6;28732:81;:::i;:::-;28578:242;;;;:::o;28826:313::-;28939:4;28977:2;28966:9;28962:18;28954:26;;29026:9;29020:4;29016:20;29012:1;29001:9;28997:17;28990:47;29054:78;29127:4;29118:6;29054:78;:::i;:::-;29046:86;;28826:313;;;;:::o;29145:419::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;30845:419;;;:::o;31270:::-;31436:4;31474:2;31463:9;31459:18;31451:26;;31523:9;31517:4;31513:20;31509:1;31498:9;31494:17;31487:47;31551:131;31677:4;31551:131;:::i;:::-;31543:139;;31270:419;;;:::o;31695:::-;31861:4;31899:2;31888:9;31884:18;31876:26;;31948:9;31942:4;31938:20;31934:1;31923:9;31919:17;31912:47;31976:131;32102:4;31976:131;:::i;:::-;31968:139;;31695:419;;;:::o;32120:::-;32286:4;32324:2;32313:9;32309:18;32301:26;;32373:9;32367:4;32363:20;32359:1;32348:9;32344:17;32337:47;32401:131;32527:4;32401:131;:::i;:::-;32393:139;;32120:419;;;:::o;32545:::-;32711:4;32749:2;32738:9;32734:18;32726:26;;32798:9;32792:4;32788:20;32784:1;32773:9;32769:17;32762:47;32826:131;32952:4;32826:131;:::i;:::-;32818:139;;32545:419;;;:::o;32970:::-;33136:4;33174:2;33163:9;33159:18;33151:26;;33223:9;33217:4;33213:20;33209:1;33198:9;33194:17;33187:47;33251:131;33377:4;33251:131;:::i;:::-;33243:139;;32970:419;;;:::o;33395:::-;33561:4;33599:2;33588:9;33584:18;33576:26;;33648:9;33642:4;33638:20;33634:1;33623:9;33619:17;33612:47;33676:131;33802:4;33676:131;:::i;:::-;33668:139;;33395:419;;;:::o;33820:::-;33986:4;34024:2;34013:9;34009:18;34001:26;;34073:9;34067:4;34063:20;34059:1;34048:9;34044:17;34037:47;34101:131;34227:4;34101:131;:::i;:::-;34093:139;;33820:419;;;:::o;34245:::-;34411:4;34449:2;34438:9;34434:18;34426:26;;34498:9;34492:4;34488:20;34484:1;34473:9;34469:17;34462:47;34526:131;34652:4;34526:131;:::i;:::-;34518:139;;34245:419;;;:::o;34670:::-;34836:4;34874:2;34863:9;34859:18;34851:26;;34923:9;34917:4;34913:20;34909:1;34898:9;34894:17;34887:47;34951:131;35077:4;34951:131;:::i;:::-;34943:139;;34670:419;;;:::o;35095:::-;35261:4;35299:2;35288:9;35284:18;35276:26;;35348:9;35342:4;35338:20;35334:1;35323:9;35319:17;35312:47;35376:131;35502:4;35376:131;:::i;:::-;35368:139;;35095:419;;;:::o;35520:222::-;35613:4;35651:2;35640:9;35636:18;35628:26;;35664:71;35732:1;35721:9;35717:17;35708:6;35664:71;:::i;:::-;35520:222;;;;:::o;35748:332::-;35869:4;35907:2;35896:9;35892:18;35884:26;;35920:71;35988:1;35977:9;35973:17;35964:6;35920:71;:::i;:::-;36001:72;36069:2;36058:9;36054:18;36045:6;36001:72;:::i;:::-;35748:332;;;;;:::o;36086:725::-;36164:4;36170:6;36226:11;36213:25;36326:1;36320:4;36316:12;36305:8;36289:14;36285:29;36281:48;36261:18;36257:73;36247:168;;36334:79;;:::i;:::-;36247:168;36446:18;36436:8;36432:33;36424:41;;36498:4;36485:18;36475:28;;36526:18;36518:6;36515:30;36512:117;;;36548:79;;:::i;:::-;36512:117;36656:2;36650:4;36646:13;36638:21;;36713:4;36705:6;36701:17;36685:14;36681:38;36675:4;36671:49;36668:136;;;36723:79;;:::i;:::-;36668:136;36177:634;36086:725;;;;;:::o;36817:129::-;36851:6;36878:20;;:::i;:::-;36868:30;;36907:33;36935:4;36927:6;36907:33;:::i;:::-;36817:129;;;:::o;36952:75::-;36985:6;37018:2;37012:9;37002:19;;36952:75;:::o;37033:311::-;37110:4;37200:18;37192:6;37189:30;37186:56;;;37222:18;;:::i;:::-;37186:56;37272:4;37264:6;37260:17;37252:25;;37332:4;37326;37322:15;37314:23;;37033:311;;;:::o;37350:::-;37427:4;37517:18;37509:6;37506:30;37503:56;;;37539:18;;:::i;:::-;37503:56;37589:4;37581:6;37577:17;37569:25;;37649:4;37643;37639:15;37631:23;;37350:311;;;:::o;37667:307::-;37728:4;37818:18;37810:6;37807:30;37804:56;;;37840:18;;:::i;:::-;37804:56;37878:29;37900:6;37878:29;:::i;:::-;37870:37;;37962:4;37956;37952:15;37944:23;;37667:307;;;:::o;37980:142::-;38057:4;38080:3;38072:11;;38110:4;38105:3;38101:14;38093:22;;37980:142;;;:::o;38128:132::-;38195:4;38218:3;38210:11;;38248:4;38243:3;38239:14;38231:22;;38128:132;;;:::o;38266:124::-;38343:6;38377:5;38371:12;38361:22;;38266:124;;;:::o;38396:114::-;38463:6;38497:5;38491:12;38481:22;;38396:114;;;:::o;38516:98::-;38567:6;38601:5;38595:12;38585:22;;38516:98;;;:::o;38620:99::-;38672:6;38706:5;38700:12;38690:22;;38620:99;;;:::o;38725:123::-;38805:4;38837;38832:3;38828:14;38820:22;;38725:123;;;:::o;38854:113::-;38924:4;38956;38951:3;38947:14;38939:22;;38854:113;;;:::o;38973:194::-;39082:11;39116:6;39111:3;39104:19;39156:4;39151:3;39147:14;39132:29;;38973:194;;;;:::o;39173:184::-;39272:11;39306:6;39301:3;39294:19;39346:4;39341:3;39337:14;39322:29;;39173:184;;;;:::o;39363:168::-;39446:11;39480:6;39475:3;39468:19;39520:4;39515:3;39511:14;39496:29;;39363:168;;;;:::o;39537:159::-;39611:11;39645:6;39640:3;39633:19;39685:4;39680:3;39676:14;39661:29;;39537:159;;;;:::o;39702:169::-;39786:11;39820:6;39815:3;39808:19;39860:4;39855:3;39851:14;39836:29;;39702:169;;;;:::o;39877:305::-;39917:3;39936:20;39954:1;39936:20;:::i;:::-;39931:25;;39970:20;39988:1;39970:20;:::i;:::-;39965:25;;40124:1;40056:66;40052:74;40049:1;40046:81;40043:107;;;40130:18;;:::i;:::-;40043:107;40174:1;40171;40167:9;40160:16;;39877:305;;;;:::o;40188:185::-;40228:1;40245:20;40263:1;40245:20;:::i;:::-;40240:25;;40279:20;40297:1;40279:20;:::i;:::-;40274:25;;40318:1;40308:35;;40323:18;;:::i;:::-;40308:35;40365:1;40362;40358:9;40353:14;;40188:185;;;;:::o;40379:348::-;40419:7;40442:20;40460:1;40442:20;:::i;:::-;40437:25;;40476:20;40494:1;40476:20;:::i;:::-;40471:25;;40664:1;40596:66;40592:74;40589:1;40586:81;40581:1;40574:9;40567:17;40563:105;40560:131;;;40671:18;;:::i;:::-;40560:131;40719:1;40716;40712:9;40701:20;;40379:348;;;;:::o;40733:96::-;40770:7;40799:24;40817:5;40799:24;:::i;:::-;40788:35;;40733:96;;;:::o;40835:90::-;40869:7;40912:5;40905:13;40898:21;40887:32;;40835:90;;;:::o;40931:149::-;40967:7;41007:66;41000:5;40996:78;40985:89;;40931:149;;;:::o;41086:135::-;41135:7;41164:5;41153:16;;41170:45;41209:5;41170:45;:::i;:::-;41086:135;;;:::o;41227:126::-;41264:7;41304:42;41297:5;41293:54;41282:65;;41227:126;;;:::o;41359:77::-;41396:7;41425:5;41414:16;;41359:77;;;:::o;41442:135::-;41502:9;41535:36;41565:5;41535:36;:::i;:::-;41522:49;;41442:135;;;:::o;41583:154::-;41667:6;41662:3;41657;41644:30;41729:1;41720:6;41715:3;41711:16;41704:27;41583:154;;;:::o;41743:307::-;41811:1;41821:113;41835:6;41832:1;41829:13;41821:113;;;41920:1;41915:3;41911:11;41905:18;41901:1;41896:3;41892:11;41885:39;41857:2;41854:1;41850:10;41845:15;;41821:113;;;41952:6;41949:1;41946:13;41943:101;;;42032:1;42023:6;42018:3;42014:16;42007:27;41943:101;41792:258;41743:307;;;:::o;42056:320::-;42100:6;42137:1;42131:4;42127:12;42117:22;;42184:1;42178:4;42174:12;42205:18;42195:81;;42261:4;42253:6;42249:17;42239:27;;42195:81;42323:2;42315:6;42312:14;42292:18;42289:38;42286:84;;;42342:18;;:::i;:::-;42286:84;42107:269;42056:320;;;:::o;42382:281::-;42465:27;42487:4;42465:27;:::i;:::-;42457:6;42453:40;42595:6;42583:10;42580:22;42559:18;42547:10;42544:34;42541:62;42538:88;;;42606:18;;:::i;:::-;42538:88;42646:10;42642:2;42635:22;42425:238;42382:281;;:::o;42669:233::-;42708:3;42731:24;42749:5;42731:24;:::i;:::-;42722:33;;42777:66;42770:5;42767:77;42764:103;;;42847:18;;:::i;:::-;42764:103;42894:1;42887:5;42883:13;42876:20;;42669:233;;;:::o;42908:180::-;42956:77;42953:1;42946:88;43053:4;43050:1;43043:15;43077:4;43074:1;43067:15;43094:180;43142:77;43139:1;43132:88;43239:4;43236:1;43229:15;43263:4;43260:1;43253:15;43280:180;43328:77;43325:1;43318:88;43425:4;43422:1;43415:15;43449:4;43446:1;43439:15;43466:180;43514:77;43511:1;43504:88;43611:4;43608:1;43601:15;43635:4;43632:1;43625:15;43652:180;43700:77;43697:1;43690:88;43797:4;43794:1;43787:15;43821:4;43818:1;43811:15;43838:180;43886:77;43883:1;43876:88;43983:4;43980:1;43973:15;44007:4;44004:1;43997:15;44024:183;44059:3;44097:1;44079:16;44076:23;44073:128;;;44135:1;44132;44129;44114:23;44157:34;44188:1;44182:8;44157:34;:::i;:::-;44150:41;;44073:128;44024:183;:::o;44213:117::-;44322:1;44319;44312:12;44336:117;44445:1;44442;44435:12;44459:117;44568:1;44565;44558:12;44582:117;44691:1;44688;44681:12;44705:117;44814:1;44811;44804:12;44828:117;44937:1;44934;44927:12;44951:117;45060:1;45057;45050:12;45074:117;45183:1;45180;45173:12;45197:117;45306:1;45303;45296:12;45320:102;45361:6;45412:2;45408:7;45403:2;45396:5;45392:14;45388:28;45378:38;;45320:102;;;:::o;45428:106::-;45472:8;45521:5;45516:3;45512:15;45491:36;;45428:106;;;:::o;45540:239::-;45680:34;45676:1;45668:6;45664:14;45657:58;45749:22;45744:2;45736:6;45732:15;45725:47;45540:239;:::o;45785:227::-;45925:34;45921:1;45913:6;45909:14;45902:58;45994:10;45989:2;45981:6;45977:15;45970:35;45785:227;:::o;46018:172::-;46158:24;46154:1;46146:6;46142:14;46135:48;46018:172;:::o;46196:176::-;46336:28;46332:1;46324:6;46320:14;46313:52;46196:176;:::o;46378:230::-;46518:34;46514:1;46506:6;46502:14;46495:58;46587:13;46582:2;46574:6;46570:15;46563:38;46378:230;:::o;46614:228::-;46754:34;46750:1;46742:6;46738:14;46731:58;46823:11;46818:2;46810:6;46806:15;46799:36;46614:228;:::o;46848:224::-;46988:34;46984:1;46976:6;46972:14;46965:58;47057:7;47052:2;47044:6;47040:15;47033:32;46848:224;:::o;47078:237::-;47218:34;47214:1;47206:6;47202:14;47195:58;47287:20;47282:2;47274:6;47270:15;47263:45;47078:237;:::o;47321:229::-;47461:34;47457:1;47449:6;47445:14;47438:58;47530:12;47525:2;47517:6;47513:15;47506:37;47321:229;:::o;47556:180::-;47696:32;47692:1;47684:6;47680:14;47673:56;47556:180;:::o;47742:228::-;47882:34;47878:1;47870:6;47866:14;47859:58;47951:11;47946:2;47938:6;47934:15;47927:36;47742:228;:::o;47976:::-;48116:34;48112:1;48104:6;48100:14;48093:58;48185:11;48180:2;48172:6;48168:15;48161:36;47976:228;:::o;48210:227::-;48350:34;48346:1;48338:6;48334:14;48327:58;48419:10;48414:2;48406:6;48402:15;48395:35;48210:227;:::o;48443:220::-;48583:34;48579:1;48571:6;48567:14;48560:58;48652:3;48647:2;48639:6;48635:15;48628:28;48443:220;:::o;48669:181::-;48809:33;48805:1;48797:6;48793:14;48786:57;48669:181;:::o;48856:711::-;48895:3;48933:4;48915:16;48912:26;48909:39;;;48941:5;;48909:39;48970:20;;:::i;:::-;49045:1;49027:16;49023:24;49020:1;49014:4;48999:49;49078:4;49072:11;49177:16;49170:4;49162:6;49158:17;49155:39;49122:18;49114:6;49111:30;49095:113;49092:146;;;49223:5;;;;49092:146;49269:6;49263:4;49259:17;49305:3;49299:10;49332:18;49324:6;49321:30;49318:43;;;49354:5;;;;;;49318:43;49402:6;49395:4;49390:3;49386:14;49382:27;49461:1;49443:16;49439:24;49433:4;49429:35;49424:3;49421:44;49418:57;;;49468:5;;;;;;;49418:57;49485;49533:6;49527:4;49523:17;49515:6;49511:30;49505:4;49485:57;:::i;:::-;49558:3;49551:10;;48899:668;;;;;48856:711;;:::o;49573:117::-;49658:1;49651:5;49648:12;49638:46;;49664:18;;:::i;:::-;49638:46;49573:117;:::o;49696:122::-;49769:24;49787:5;49769:24;:::i;:::-;49762:5;49759:35;49749:63;;49808:1;49805;49798:12;49749:63;49696:122;:::o;49824:116::-;49894:21;49909:5;49894:21;:::i;:::-;49887:5;49884:32;49874:60;;49930:1;49927;49920:12;49874:60;49824:116;:::o;49946:120::-;50018:23;50035:5;50018:23;:::i;:::-;50011:5;50008:34;49998:62;;50056:1;50053;50046:12;49998:62;49946:120;:::o;50072:111::-;50157:1;50150:5;50147:12;50137:40;;50173:1;50170;50163:12;50137:40;50072:111;:::o;50189:122::-;50262:24;50280:5;50262:24;:::i;:::-;50255:5;50252:35;50242:63;;50301:1;50298;50291:12;50242:63;50189:122;:::o

Swarm Source

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