ETH Price: $3,941.71 (+1.77%)

Token

 

Overview

Max Total Supply

11,831

Holders

2,151

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x2cc7a3ffd21a453aebd354504bf3ff6ee56f4450
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:
Potion

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-09
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

// File: @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.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return 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
                /// @solidity memory-safe-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: @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 (last updated v4.7.0) (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 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.7.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: address zero is not a valid owner");
        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 token 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: caller is not token 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}.
     *
     * 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 _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`
     *
     * Emits a {TransferSingle} event.
     *
     * 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}.
     *
     * Emits a {TransferBatch} event.
     *
     * 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 an {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 `ids` and `amounts` 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: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: contracts/Prop.sol


pragma solidity ^0.8.7;



contract Potion is ERC1155Supply {
    using Strings for uint256;
    
    address public owner;
    string public baseURI;

    constructor() ERC1155("") {
        owner = _msgSender();
    }

    modifier onlyOwner() {
        require(owner == _msgSender(), "Not Owner");
        _;
    }

    function mint(
        address account,
        uint256 tokenId,
        uint256 amount
    ) public onlyOwner {
        _mint(account, tokenId, amount, "");
    }

    function airdrop(uint256 tokenId, address[] memory accounts, uint256[] memory amounts) public onlyOwner {
        address account = _msgSender();
        for (uint256 i = 0; i < accounts.length; i++) {
            _mint(accounts[i], tokenId, amounts[i], "");
        }
    }

    function setURI(string memory newuri) public onlyOwner {
        baseURI = newuri;
    }

    function uri(uint256 tokenId) public view override returns (string memory) {
        require(exists(tokenId), "Not exist tokenId");
        return string(abi.encodePacked(baseURI, tokenId.toString(), ".json"));
    }
}

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":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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","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":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","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":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200008a60201b60201c565b5062000044620000a660201b60201c565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001c3565b8060029080519060200190620000a2929190620000ae565b5050565b600033905090565b828054620000bc906200015e565b90600052602060002090601f016020900481019282620000e057600085556200012c565b82601f10620000fb57805160ff19168380011785556200012c565b828001600101855582156200012c579182015b828111156200012b5782518255916020019190600101906200010e565b5b5090506200013b91906200013f565b5090565b5b808211156200015a57600081600090555060010162000140565b5090565b600060028204905060018216806200017757607f821691505b602082108114156200018e576200018d62000194565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61357c80620001d36000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c80634f558e7911610097578063bd85b03911610066578063bd85b03914610295578063d5516e7f146102c5578063e985e9c5146102e1578063f242432a14610311576100f4565b80634f558e791461020d5780636c0360eb1461023d5780638da5cb5b1461025b578063a22cb46514610279576100f4565b80630e89341c116100d35780630e89341c14610175578063156e29f6146101a55780632eb2c2d6146101c15780634e1273f4146101dd576100f4565b8062fdd58e146100f957806301ffc9a71461012957806302fe530514610159575b600080fd5b610113600480360381019061010e91906121c8565b61032d565b6040516101209190612b2e565b60405180910390f35b610143600480360381019061013e91906122d3565b6103f6565b6040516101509190612951565b60405180910390f35b610173600480360381019061016e919061232d565b6104d8565b005b61018f600480360381019061018a9190612376565b610589565b60405161019c919061296c565b60405180910390f35b6101bf60048036038101906101ba9190612208565b610605565b005b6101db60048036038101906101d69190612022565b6106bc565b005b6101f760048036038101906101f2919061225b565b61075d565b60405161020491906128f8565b60405180910390f35b61022760048036038101906102229190612376565b610876565b6040516102349190612951565b60405180910390f35b61024561088a565b604051610252919061296c565b60405180910390f35b610263610918565b604051610270919061281b565b60405180910390f35b610293600480360381019061028e9190612188565b61093e565b005b6102af60048036038101906102aa9190612376565b610954565b6040516102bc9190612b2e565b60405180910390f35b6102df60048036038101906102da91906123a3565b610971565b005b6102fb60048036038101906102f69190611fe2565b610a89565b6040516103089190612951565b60405180910390f35b61032b600480360381019061032691906120f1565b610b1d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561039e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039590612a0e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104c157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104d157506104d082610bbe565b5b9050919050565b6104e0610c28565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056690612a2e565b60405180910390fd5b8060059080519060200190610585929190611cba565b5050565b606061059482610876565b6105d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ca906129ee565b60405180910390fd5b60056105de83610c30565b6040516020016105ef9291906127ec565b6040516020818303038152906040529050919050565b61060d610c28565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069390612a2e565b60405180910390fd5b6106b783838360405180602001604052806000815250610d91565b505050565b6106c4610c28565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061070a575061070985610704610c28565b610a89565b5b610749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610740906129ae565b60405180910390fd5b6107568585858585610f42565b5050505050565b606081518351146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90612ace565b60405180910390fd5b6000835167ffffffffffffffff8111156107c0576107bf612fec565b5b6040519080825280602002602001820160405280156107ee5781602001602082028036833780820191505090505b50905060005b845181101561086b5761083b85828151811061081357610812612fbd565b5b602002602001015185838151811061082e5761082d612fbd565b5b602002602001015161032d565b82828151811061084e5761084d612fbd565b5b6020026020010181815250508061086490612eb6565b90506107f4565b508091505092915050565b60008061088283610954565b119050919050565b6005805461089790612e53565b80601f01602080910402602001604051908101604052809291908181526020018280546108c390612e53565b80156109105780601f106108e557610100808354040283529160200191610910565b820191906000526020600020905b8154815290600101906020018083116108f357829003601f168201915b505050505081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610950610949610c28565b8383611264565b5050565b600060036000838152602001908152602001600020549050919050565b610979610c28565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90612a2e565b60405180910390fd5b6000610a12610c28565b905060005b8351811015610a8257610a6f848281518110610a3657610a35612fbd565b5b602002602001015186858481518110610a5257610a51612fbd565b5b602002602001015160405180602001604052806000815250610d91565b8080610a7a90612eb6565b915050610a17565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b25610c28565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b6b5750610b6a85610b65610c28565b610a89565b5b610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906129ae565b60405180910390fd5b610bb785858585856113d1565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60606000821415610c78576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610d8c565b600082905060005b60008214610caa578080610c9390612eb6565b915050600a82610ca39190612d38565b9150610c80565b60008167ffffffffffffffff811115610cc657610cc5612fec565b5b6040519080825280601f01601f191660200182016040528015610cf85781602001600182028036833780820191505090505b5090505b60008514610d8557600182610d119190612d69565b9150600a85610d209190612eff565b6030610d2c9190612ce2565b60f81b818381518110610d4257610d41612fbd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610d7e9190612d38565b9450610cfc565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890612b0e565b60405180910390fd5b6000610e0b610c28565b90506000610e188561166d565b90506000610e258561166d565b9050610e36836000898585896116e7565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e959190612ce2565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610f13929190612b49565b60405180910390a4610f2a836000898585896118b9565b610f39836000898989896118c1565b50505050505050565b8151835114610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612aee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90612a4e565b60405180910390fd5b6000611000610c28565b90506110108187878787876116e7565b60005b84518110156111c157600085828151811061103157611030612fbd565b5b6020026020010151905060008583815181106110505761104f612fbd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890612a6e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a69190612ce2565b92505081905550505050806111ba90612eb6565b9050611013565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161123892919061291a565b60405180910390a461124e8187878787876118b9565b61125c818787878787611aa8565b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90612aae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113c49190612951565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890612a4e565b60405180910390fd5b600061144b610c28565b905060006114588561166d565b905060006114658561166d565b90506114758389898585896116e7565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390612a6e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115c19190612ce2565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161163e929190612b49565b60405180910390a4611654848a8a86868a6118b9565b611662848a8a8a8a8a6118c1565b505050505050505050565b60606000600167ffffffffffffffff81111561168c5761168b612fec565b5b6040519080825280602002602001820160405280156116ba5781602001602082028036833780820191505090505b50905082816000815181106116d2576116d1612fbd565b5b60200260200101818152505080915050919050565b6116f5868686868686611c8f565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156117a75760005b83518110156117a55782818151811061174957611748612fbd565b5b60200260200101516003600086848151811061176857611767612fbd565b5b60200260200101518152602001908152602001600020600082825461178d9190612ce2565b925050819055508061179e90612eb6565b905061172d565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b15760005b83518110156118af5760008482815181106117fd576117fc612fbd565b5b60200260200101519050600084838151811061181c5761181b612fbd565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015611881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187890612a8e565b60405180910390fd5b8181036003600085815260200190815260200160002081905550505050806118a890612eb6565b90506117df565b505b505050505050565b505050505050565b6118e08473ffffffffffffffffffffffffffffffffffffffff16611c97565b15611aa0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161192695949392919061289e565b602060405180830381600087803b15801561194057600080fd5b505af192505050801561197157506040513d601f19601f8201168201806040525081019061196e9190612300565b60015b611a175761197d61301b565b806308c379a014156119da5750611992613454565b8061199d57506119dc565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d1919061296c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061298e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906129ce565b60405180910390fd5b505b505050505050565b611ac78473ffffffffffffffffffffffffffffffffffffffff16611c97565b15611c87578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b0d959493929190612836565b602060405180830381600087803b158015611b2757600080fd5b505af1925050508015611b5857506040513d601f19601f82011682018060405250810190611b559190612300565b60015b611bfe57611b6461301b565b806308c379a01415611bc15750611b79613454565b80611b845750611bc3565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb8919061296c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf59061298e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c906129ce565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611cc690612e53565b90600052602060002090601f016020900481019282611ce85760008555611d2f565b82601f10611d0157805160ff1916838001178555611d2f565b82800160010185558215611d2f579182015b82811115611d2e578251825591602001919060010190611d13565b5b509050611d3c9190611d40565b5090565b5b80821115611d59576000816000905550600101611d41565b5090565b6000611d70611d6b84612b97565b612b72565b90508083825260208201905082856020860282011115611d9357611d92613042565b5b60005b85811015611dc35781611da98882611ec1565b845260208401935060208301925050600181019050611d96565b5050509392505050565b6000611de0611ddb84612bc3565b612b72565b90508083825260208201905082856020860282011115611e0357611e02613042565b5b60005b85811015611e335781611e198882611fcd565b845260208401935060208301925050600181019050611e06565b5050509392505050565b6000611e50611e4b84612bef565b612b72565b905082815260208101848484011115611e6c57611e6b613047565b5b611e77848285612e11565b509392505050565b6000611e92611e8d84612c20565b612b72565b905082815260208101848484011115611eae57611ead613047565b5b611eb9848285612e11565b509392505050565b600081359050611ed0816134ea565b92915050565b600082601f830112611eeb57611eea61303d565b5b8135611efb848260208601611d5d565b91505092915050565b600082601f830112611f1957611f1861303d565b5b8135611f29848260208601611dcd565b91505092915050565b600081359050611f4181613501565b92915050565b600081359050611f5681613518565b92915050565b600081519050611f6b81613518565b92915050565b600082601f830112611f8657611f8561303d565b5b8135611f96848260208601611e3d565b91505092915050565b600082601f830112611fb457611fb361303d565b5b8135611fc4848260208601611e7f565b91505092915050565b600081359050611fdc8161352f565b92915050565b60008060408385031215611ff957611ff8613051565b5b600061200785828601611ec1565b925050602061201885828601611ec1565b9150509250929050565b600080600080600060a0868803121561203e5761203d613051565b5b600061204c88828901611ec1565b955050602061205d88828901611ec1565b945050604086013567ffffffffffffffff81111561207e5761207d61304c565b5b61208a88828901611f04565b935050606086013567ffffffffffffffff8111156120ab576120aa61304c565b5b6120b788828901611f04565b925050608086013567ffffffffffffffff8111156120d8576120d761304c565b5b6120e488828901611f71565b9150509295509295909350565b600080600080600060a0868803121561210d5761210c613051565b5b600061211b88828901611ec1565b955050602061212c88828901611ec1565b945050604061213d88828901611fcd565b935050606061214e88828901611fcd565b925050608086013567ffffffffffffffff81111561216f5761216e61304c565b5b61217b88828901611f71565b9150509295509295909350565b6000806040838503121561219f5761219e613051565b5b60006121ad85828601611ec1565b92505060206121be85828601611f32565b9150509250929050565b600080604083850312156121df576121de613051565b5b60006121ed85828601611ec1565b92505060206121fe85828601611fcd565b9150509250929050565b60008060006060848603121561222157612220613051565b5b600061222f86828701611ec1565b935050602061224086828701611fcd565b925050604061225186828701611fcd565b9150509250925092565b6000806040838503121561227257612271613051565b5b600083013567ffffffffffffffff8111156122905761228f61304c565b5b61229c85828601611ed6565b925050602083013567ffffffffffffffff8111156122bd576122bc61304c565b5b6122c985828601611f04565b9150509250929050565b6000602082840312156122e9576122e8613051565b5b60006122f784828501611f47565b91505092915050565b60006020828403121561231657612315613051565b5b600061232484828501611f5c565b91505092915050565b60006020828403121561234357612342613051565b5b600082013567ffffffffffffffff8111156123615761236061304c565b5b61236d84828501611f9f565b91505092915050565b60006020828403121561238c5761238b613051565b5b600061239a84828501611fcd565b91505092915050565b6000806000606084860312156123bc576123bb613051565b5b60006123ca86828701611fcd565b935050602084013567ffffffffffffffff8111156123eb576123ea61304c565b5b6123f786828701611ed6565b925050604084013567ffffffffffffffff8111156124185761241761304c565b5b61242486828701611f04565b9150509250925092565b600061243a83836127ce565b60208301905092915050565b61244f81612d9d565b82525050565b600061246082612c76565b61246a8185612ca4565b935061247583612c51565b8060005b838110156124a657815161248d888261242e565b975061249883612c97565b925050600181019050612479565b5085935050505092915050565b6124bc81612daf565b82525050565b60006124cd82612c81565b6124d78185612cb5565b93506124e7818560208601612e20565b6124f081613056565b840191505092915050565b600061250682612c8c565b6125108185612cc6565b9350612520818560208601612e20565b61252981613056565b840191505092915050565b600061253f82612c8c565b6125498185612cd7565b9350612559818560208601612e20565b80840191505092915050565b6000815461257281612e53565b61257c8186612cd7565b9450600182166000811461259757600181146125a8576125db565b60ff198316865281860193506125db565b6125b185612c61565b60005b838110156125d3578154818901526001820191506020810190506125b4565b838801955050505b50505092915050565b60006125f1603483612cc6565b91506125fc82613074565b604082019050919050565b6000612614602f83612cc6565b915061261f826130c3565b604082019050919050565b6000612637602883612cc6565b915061264282613112565b604082019050919050565b600061265a601183612cc6565b915061266582613161565b602082019050919050565b600061267d602a83612cc6565b91506126888261318a565b604082019050919050565b60006126a0600983612cc6565b91506126ab826131d9565b602082019050919050565b60006126c3602583612cc6565b91506126ce82613202565b604082019050919050565b60006126e6602a83612cc6565b91506126f182613251565b604082019050919050565b6000612709600583612cd7565b9150612714826132a0565b600582019050919050565b600061272c602883612cc6565b9150612737826132c9565b604082019050919050565b600061274f602983612cc6565b915061275a82613318565b604082019050919050565b6000612772602983612cc6565b915061277d82613367565b604082019050919050565b6000612795602883612cc6565b91506127a0826133b6565b604082019050919050565b60006127b8602183612cc6565b91506127c382613405565b604082019050919050565b6127d781612e07565b82525050565b6127e681612e07565b82525050565b60006127f88285612565565b91506128048284612534565b915061280f826126fc565b91508190509392505050565b60006020820190506128306000830184612446565b92915050565b600060a08201905061284b6000830188612446565b6128586020830187612446565b818103604083015261286a8186612455565b9050818103606083015261287e8185612455565b9050818103608083015261289281846124c2565b90509695505050505050565b600060a0820190506128b36000830188612446565b6128c06020830187612446565b6128cd60408301866127dd565b6128da60608301856127dd565b81810360808301526128ec81846124c2565b90509695505050505050565b600060208201905081810360008301526129128184612455565b905092915050565b600060408201905081810360008301526129348185612455565b905081810360208301526129488184612455565b90509392505050565b600060208201905061296660008301846124b3565b92915050565b6000602082019050818103600083015261298681846124fb565b905092915050565b600060208201905081810360008301526129a7816125e4565b9050919050565b600060208201905081810360008301526129c781612607565b9050919050565b600060208201905081810360008301526129e78161262a565b9050919050565b60006020820190508181036000830152612a078161264d565b9050919050565b60006020820190508181036000830152612a2781612670565b9050919050565b60006020820190508181036000830152612a4781612693565b9050919050565b60006020820190508181036000830152612a67816126b6565b9050919050565b60006020820190508181036000830152612a87816126d9565b9050919050565b60006020820190508181036000830152612aa78161271f565b9050919050565b60006020820190508181036000830152612ac781612742565b9050919050565b60006020820190508181036000830152612ae781612765565b9050919050565b60006020820190508181036000830152612b0781612788565b9050919050565b60006020820190508181036000830152612b27816127ab565b9050919050565b6000602082019050612b4360008301846127dd565b92915050565b6000604082019050612b5e60008301856127dd565b612b6b60208301846127dd565b9392505050565b6000612b7c612b8d565b9050612b888282612e85565b919050565b6000604051905090565b600067ffffffffffffffff821115612bb257612bb1612fec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612bde57612bdd612fec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c0a57612c09612fec565b5b612c1382613056565b9050602081019050919050565b600067ffffffffffffffff821115612c3b57612c3a612fec565b5b612c4482613056565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612ced82612e07565b9150612cf883612e07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d2d57612d2c612f30565b5b828201905092915050565b6000612d4382612e07565b9150612d4e83612e07565b925082612d5e57612d5d612f5f565b5b828204905092915050565b6000612d7482612e07565b9150612d7f83612e07565b925082821015612d9257612d91612f30565b5b828203905092915050565b6000612da882612de7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e3e578082015181840152602081019050612e23565b83811115612e4d576000848401525b50505050565b60006002820490506001821680612e6b57607f821691505b60208210811415612e7f57612e7e612f8e565b5b50919050565b612e8e82613056565b810181811067ffffffffffffffff82111715612ead57612eac612fec565b5b80604052505050565b6000612ec182612e07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ef457612ef3612f30565b5b600182019050919050565b6000612f0a82612e07565b9150612f1583612e07565b925082612f2557612f24612f5f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561303a5760046000803e613037600051613067565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420657869737420746f6b656e4964000000000000000000000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f4e6f74204f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613464576134e7565b61346c612b8d565b60043d036004823e80513d602482011167ffffffffffffffff821117156134945750506134e7565b808201805167ffffffffffffffff8111156134b257505050506134e7565b80602083010160043d0385018111156134cf5750505050506134e7565b6134de82602001850186612e85565b82955050505050505b90565b6134f381612d9d565b81146134fe57600080fd5b50565b61350a81612daf565b811461351557600080fd5b50565b61352181612dbb565b811461352c57600080fd5b50565b61353881612e07565b811461354357600080fd5b5056fea2646970667358221220dfd77e895fbfe183af7a4bf17b180481ae9bc7c2482806eb39a04cab67f2c25f64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f45760003560e01c80634f558e7911610097578063bd85b03911610066578063bd85b03914610295578063d5516e7f146102c5578063e985e9c5146102e1578063f242432a14610311576100f4565b80634f558e791461020d5780636c0360eb1461023d5780638da5cb5b1461025b578063a22cb46514610279576100f4565b80630e89341c116100d35780630e89341c14610175578063156e29f6146101a55780632eb2c2d6146101c15780634e1273f4146101dd576100f4565b8062fdd58e146100f957806301ffc9a71461012957806302fe530514610159575b600080fd5b610113600480360381019061010e91906121c8565b61032d565b6040516101209190612b2e565b60405180910390f35b610143600480360381019061013e91906122d3565b6103f6565b6040516101509190612951565b60405180910390f35b610173600480360381019061016e919061232d565b6104d8565b005b61018f600480360381019061018a9190612376565b610589565b60405161019c919061296c565b60405180910390f35b6101bf60048036038101906101ba9190612208565b610605565b005b6101db60048036038101906101d69190612022565b6106bc565b005b6101f760048036038101906101f2919061225b565b61075d565b60405161020491906128f8565b60405180910390f35b61022760048036038101906102229190612376565b610876565b6040516102349190612951565b60405180910390f35b61024561088a565b604051610252919061296c565b60405180910390f35b610263610918565b604051610270919061281b565b60405180910390f35b610293600480360381019061028e9190612188565b61093e565b005b6102af60048036038101906102aa9190612376565b610954565b6040516102bc9190612b2e565b60405180910390f35b6102df60048036038101906102da91906123a3565b610971565b005b6102fb60048036038101906102f69190611fe2565b610a89565b6040516103089190612951565b60405180910390f35b61032b600480360381019061032691906120f1565b610b1d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561039e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039590612a0e565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104c157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104d157506104d082610bbe565b5b9050919050565b6104e0610c28565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461056f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056690612a2e565b60405180910390fd5b8060059080519060200190610585929190611cba565b5050565b606061059482610876565b6105d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ca906129ee565b60405180910390fd5b60056105de83610c30565b6040516020016105ef9291906127ec565b6040516020818303038152906040529050919050565b61060d610c28565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069390612a2e565b60405180910390fd5b6106b783838360405180602001604052806000815250610d91565b505050565b6106c4610c28565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061070a575061070985610704610c28565b610a89565b5b610749576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610740906129ae565b60405180910390fd5b6107568585858585610f42565b5050505050565b606081518351146107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90612ace565b60405180910390fd5b6000835167ffffffffffffffff8111156107c0576107bf612fec565b5b6040519080825280602002602001820160405280156107ee5781602001602082028036833780820191505090505b50905060005b845181101561086b5761083b85828151811061081357610812612fbd565b5b602002602001015185838151811061082e5761082d612fbd565b5b602002602001015161032d565b82828151811061084e5761084d612fbd565b5b6020026020010181815250508061086490612eb6565b90506107f4565b508091505092915050565b60008061088283610954565b119050919050565b6005805461089790612e53565b80601f01602080910402602001604051908101604052809291908181526020018280546108c390612e53565b80156109105780601f106108e557610100808354040283529160200191610910565b820191906000526020600020905b8154815290600101906020018083116108f357829003601f168201915b505050505081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610950610949610c28565b8383611264565b5050565b600060036000838152602001908152602001600020549050919050565b610979610c28565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90612a2e565b60405180910390fd5b6000610a12610c28565b905060005b8351811015610a8257610a6f848281518110610a3657610a35612fbd565b5b602002602001015186858481518110610a5257610a51612fbd565b5b602002602001015160405180602001604052806000815250610d91565b8080610a7a90612eb6565b915050610a17565b5050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b25610c28565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b6b5750610b6a85610b65610c28565b610a89565b5b610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba1906129ae565b60405180910390fd5b610bb785858585856113d1565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60606000821415610c78576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610d8c565b600082905060005b60008214610caa578080610c9390612eb6565b915050600a82610ca39190612d38565b9150610c80565b60008167ffffffffffffffff811115610cc657610cc5612fec565b5b6040519080825280601f01601f191660200182016040528015610cf85781602001600182028036833780820191505090505b5090505b60008514610d8557600182610d119190612d69565b9150600a85610d209190612eff565b6030610d2c9190612ce2565b60f81b818381518110610d4257610d41612fbd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610d7e9190612d38565b9450610cfc565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890612b0e565b60405180910390fd5b6000610e0b610c28565b90506000610e188561166d565b90506000610e258561166d565b9050610e36836000898585896116e7565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e959190612ce2565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610f13929190612b49565b60405180910390a4610f2a836000898585896118b9565b610f39836000898989896118c1565b50505050505050565b8151835114610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90612aee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90612a4e565b60405180910390fd5b6000611000610c28565b90506110108187878787876116e7565b60005b84518110156111c157600085828151811061103157611030612fbd565b5b6020026020010151905060008583815181106110505761104f612fbd565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e890612a6e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111a69190612ce2565b92505081905550505050806111ba90612eb6565b9050611013565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161123892919061291a565b60405180910390a461124e8187878787876118b9565b61125c818787878787611aa8565b505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90612aae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113c49190612951565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143890612a4e565b60405180910390fd5b600061144b610c28565b905060006114588561166d565b905060006114658561166d565b90506114758389898585896116e7565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390612a6e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115c19190612ce2565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161163e929190612b49565b60405180910390a4611654848a8a86868a6118b9565b611662848a8a8a8a8a6118c1565b505050505050505050565b60606000600167ffffffffffffffff81111561168c5761168b612fec565b5b6040519080825280602002602001820160405280156116ba5781602001602082028036833780820191505090505b50905082816000815181106116d2576116d1612fbd565b5b60200260200101818152505080915050919050565b6116f5868686868686611c8f565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156117a75760005b83518110156117a55782818151811061174957611748612fbd565b5b60200260200101516003600086848151811061176857611767612fbd565b5b60200260200101518152602001908152602001600020600082825461178d9190612ce2565b925050819055508061179e90612eb6565b905061172d565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b15760005b83518110156118af5760008482815181106117fd576117fc612fbd565b5b60200260200101519050600084838151811061181c5761181b612fbd565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015611881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187890612a8e565b60405180910390fd5b8181036003600085815260200190815260200160002081905550505050806118a890612eb6565b90506117df565b505b505050505050565b505050505050565b6118e08473ffffffffffffffffffffffffffffffffffffffff16611c97565b15611aa0578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161192695949392919061289e565b602060405180830381600087803b15801561194057600080fd5b505af192505050801561197157506040513d601f19601f8201168201806040525081019061196e9190612300565b60015b611a175761197d61301b565b806308c379a014156119da5750611992613454565b8061199d57506119dc565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d1919061296c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061298e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906129ce565b60405180910390fd5b505b505050505050565b611ac78473ffffffffffffffffffffffffffffffffffffffff16611c97565b15611c87578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b0d959493929190612836565b602060405180830381600087803b158015611b2757600080fd5b505af1925050508015611b5857506040513d601f19601f82011682018060405250810190611b559190612300565b60015b611bfe57611b6461301b565b806308c379a01415611bc15750611b79613454565b80611b845750611bc3565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb8919061296c565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf59061298e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7c906129ce565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611cc690612e53565b90600052602060002090601f016020900481019282611ce85760008555611d2f565b82601f10611d0157805160ff1916838001178555611d2f565b82800160010185558215611d2f579182015b82811115611d2e578251825591602001919060010190611d13565b5b509050611d3c9190611d40565b5090565b5b80821115611d59576000816000905550600101611d41565b5090565b6000611d70611d6b84612b97565b612b72565b90508083825260208201905082856020860282011115611d9357611d92613042565b5b60005b85811015611dc35781611da98882611ec1565b845260208401935060208301925050600181019050611d96565b5050509392505050565b6000611de0611ddb84612bc3565b612b72565b90508083825260208201905082856020860282011115611e0357611e02613042565b5b60005b85811015611e335781611e198882611fcd565b845260208401935060208301925050600181019050611e06565b5050509392505050565b6000611e50611e4b84612bef565b612b72565b905082815260208101848484011115611e6c57611e6b613047565b5b611e77848285612e11565b509392505050565b6000611e92611e8d84612c20565b612b72565b905082815260208101848484011115611eae57611ead613047565b5b611eb9848285612e11565b509392505050565b600081359050611ed0816134ea565b92915050565b600082601f830112611eeb57611eea61303d565b5b8135611efb848260208601611d5d565b91505092915050565b600082601f830112611f1957611f1861303d565b5b8135611f29848260208601611dcd565b91505092915050565b600081359050611f4181613501565b92915050565b600081359050611f5681613518565b92915050565b600081519050611f6b81613518565b92915050565b600082601f830112611f8657611f8561303d565b5b8135611f96848260208601611e3d565b91505092915050565b600082601f830112611fb457611fb361303d565b5b8135611fc4848260208601611e7f565b91505092915050565b600081359050611fdc8161352f565b92915050565b60008060408385031215611ff957611ff8613051565b5b600061200785828601611ec1565b925050602061201885828601611ec1565b9150509250929050565b600080600080600060a0868803121561203e5761203d613051565b5b600061204c88828901611ec1565b955050602061205d88828901611ec1565b945050604086013567ffffffffffffffff81111561207e5761207d61304c565b5b61208a88828901611f04565b935050606086013567ffffffffffffffff8111156120ab576120aa61304c565b5b6120b788828901611f04565b925050608086013567ffffffffffffffff8111156120d8576120d761304c565b5b6120e488828901611f71565b9150509295509295909350565b600080600080600060a0868803121561210d5761210c613051565b5b600061211b88828901611ec1565b955050602061212c88828901611ec1565b945050604061213d88828901611fcd565b935050606061214e88828901611fcd565b925050608086013567ffffffffffffffff81111561216f5761216e61304c565b5b61217b88828901611f71565b9150509295509295909350565b6000806040838503121561219f5761219e613051565b5b60006121ad85828601611ec1565b92505060206121be85828601611f32565b9150509250929050565b600080604083850312156121df576121de613051565b5b60006121ed85828601611ec1565b92505060206121fe85828601611fcd565b9150509250929050565b60008060006060848603121561222157612220613051565b5b600061222f86828701611ec1565b935050602061224086828701611fcd565b925050604061225186828701611fcd565b9150509250925092565b6000806040838503121561227257612271613051565b5b600083013567ffffffffffffffff8111156122905761228f61304c565b5b61229c85828601611ed6565b925050602083013567ffffffffffffffff8111156122bd576122bc61304c565b5b6122c985828601611f04565b9150509250929050565b6000602082840312156122e9576122e8613051565b5b60006122f784828501611f47565b91505092915050565b60006020828403121561231657612315613051565b5b600061232484828501611f5c565b91505092915050565b60006020828403121561234357612342613051565b5b600082013567ffffffffffffffff8111156123615761236061304c565b5b61236d84828501611f9f565b91505092915050565b60006020828403121561238c5761238b613051565b5b600061239a84828501611fcd565b91505092915050565b6000806000606084860312156123bc576123bb613051565b5b60006123ca86828701611fcd565b935050602084013567ffffffffffffffff8111156123eb576123ea61304c565b5b6123f786828701611ed6565b925050604084013567ffffffffffffffff8111156124185761241761304c565b5b61242486828701611f04565b9150509250925092565b600061243a83836127ce565b60208301905092915050565b61244f81612d9d565b82525050565b600061246082612c76565b61246a8185612ca4565b935061247583612c51565b8060005b838110156124a657815161248d888261242e565b975061249883612c97565b925050600181019050612479565b5085935050505092915050565b6124bc81612daf565b82525050565b60006124cd82612c81565b6124d78185612cb5565b93506124e7818560208601612e20565b6124f081613056565b840191505092915050565b600061250682612c8c565b6125108185612cc6565b9350612520818560208601612e20565b61252981613056565b840191505092915050565b600061253f82612c8c565b6125498185612cd7565b9350612559818560208601612e20565b80840191505092915050565b6000815461257281612e53565b61257c8186612cd7565b9450600182166000811461259757600181146125a8576125db565b60ff198316865281860193506125db565b6125b185612c61565b60005b838110156125d3578154818901526001820191506020810190506125b4565b838801955050505b50505092915050565b60006125f1603483612cc6565b91506125fc82613074565b604082019050919050565b6000612614602f83612cc6565b915061261f826130c3565b604082019050919050565b6000612637602883612cc6565b915061264282613112565b604082019050919050565b600061265a601183612cc6565b915061266582613161565b602082019050919050565b600061267d602a83612cc6565b91506126888261318a565b604082019050919050565b60006126a0600983612cc6565b91506126ab826131d9565b602082019050919050565b60006126c3602583612cc6565b91506126ce82613202565b604082019050919050565b60006126e6602a83612cc6565b91506126f182613251565b604082019050919050565b6000612709600583612cd7565b9150612714826132a0565b600582019050919050565b600061272c602883612cc6565b9150612737826132c9565b604082019050919050565b600061274f602983612cc6565b915061275a82613318565b604082019050919050565b6000612772602983612cc6565b915061277d82613367565b604082019050919050565b6000612795602883612cc6565b91506127a0826133b6565b604082019050919050565b60006127b8602183612cc6565b91506127c382613405565b604082019050919050565b6127d781612e07565b82525050565b6127e681612e07565b82525050565b60006127f88285612565565b91506128048284612534565b915061280f826126fc565b91508190509392505050565b60006020820190506128306000830184612446565b92915050565b600060a08201905061284b6000830188612446565b6128586020830187612446565b818103604083015261286a8186612455565b9050818103606083015261287e8185612455565b9050818103608083015261289281846124c2565b90509695505050505050565b600060a0820190506128b36000830188612446565b6128c06020830187612446565b6128cd60408301866127dd565b6128da60608301856127dd565b81810360808301526128ec81846124c2565b90509695505050505050565b600060208201905081810360008301526129128184612455565b905092915050565b600060408201905081810360008301526129348185612455565b905081810360208301526129488184612455565b90509392505050565b600060208201905061296660008301846124b3565b92915050565b6000602082019050818103600083015261298681846124fb565b905092915050565b600060208201905081810360008301526129a7816125e4565b9050919050565b600060208201905081810360008301526129c781612607565b9050919050565b600060208201905081810360008301526129e78161262a565b9050919050565b60006020820190508181036000830152612a078161264d565b9050919050565b60006020820190508181036000830152612a2781612670565b9050919050565b60006020820190508181036000830152612a4781612693565b9050919050565b60006020820190508181036000830152612a67816126b6565b9050919050565b60006020820190508181036000830152612a87816126d9565b9050919050565b60006020820190508181036000830152612aa78161271f565b9050919050565b60006020820190508181036000830152612ac781612742565b9050919050565b60006020820190508181036000830152612ae781612765565b9050919050565b60006020820190508181036000830152612b0781612788565b9050919050565b60006020820190508181036000830152612b27816127ab565b9050919050565b6000602082019050612b4360008301846127dd565b92915050565b6000604082019050612b5e60008301856127dd565b612b6b60208301846127dd565b9392505050565b6000612b7c612b8d565b9050612b888282612e85565b919050565b6000604051905090565b600067ffffffffffffffff821115612bb257612bb1612fec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612bde57612bdd612fec565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c0a57612c09612fec565b5b612c1382613056565b9050602081019050919050565b600067ffffffffffffffff821115612c3b57612c3a612fec565b5b612c4482613056565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612ced82612e07565b9150612cf883612e07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d2d57612d2c612f30565b5b828201905092915050565b6000612d4382612e07565b9150612d4e83612e07565b925082612d5e57612d5d612f5f565b5b828204905092915050565b6000612d7482612e07565b9150612d7f83612e07565b925082821015612d9257612d91612f30565b5b828203905092915050565b6000612da882612de7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e3e578082015181840152602081019050612e23565b83811115612e4d576000848401525b50505050565b60006002820490506001821680612e6b57607f821691505b60208210811415612e7f57612e7e612f8e565b5b50919050565b612e8e82613056565b810181811067ffffffffffffffff82111715612ead57612eac612fec565b5b80604052505050565b6000612ec182612e07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ef457612ef3612f30565b5b600182019050919050565b6000612f0a82612e07565b9150612f1583612e07565b925082612f2557612f24612f5f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561303a5760046000803e613037600051613067565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420657869737420746f6b656e4964000000000000000000000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f4e6f74204f776e65720000000000000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613464576134e7565b61346c612b8d565b60043d036004823e80513d602482011167ffffffffffffffff821117156134945750506134e7565b808201805167ffffffffffffffff8111156134b257505050506134e7565b80602083010160043d0385018111156134cf5750505050506134e7565b6134de82602001850186612e85565b82955050505050505b90565b6134f381612d9d565b81146134fe57600080fd5b50565b61350a81612daf565b811461351557600080fd5b50565b61352181612dbb565b811461352c57600080fd5b50565b61353881612e07565b811461354357600080fd5b5056fea2646970667358221220dfd77e895fbfe183af7a4bf17b180481ae9bc7c2482806eb39a04cab67f2c25f64736f6c63430008070033

Deployed Bytecode Sourcemap

41098:1095:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23421:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22444:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41873:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41971:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41409:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25365:439;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23817:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39899:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41203:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41176:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24414:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39688:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41586:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24641:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24881:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23421:230;23507:7;23554:1;23535:21;;:7;:21;;;;23527:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23621:9;:13;23631:2;23621:13;;;;;;;;;;;:22;23635:7;23621:22;;;;;;;;;;;;;;;;23614:29;;23421:230;;;;:::o;22444:310::-;22546:4;22598:26;22583:41;;;:11;:41;;;;:110;;;;22656:37;22641:52;;;:11;:52;;;;22583:110;:163;;;;22710:36;22734:11;22710:23;:36::i;:::-;22583:163;22563:183;;22444:310;;;:::o;41873:90::-;41355:12;:10;:12::i;:::-;41346:21;;:5;;;;;;;;;;;:21;;;41338:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41949:6:::1;41939:7;:16;;;;;;;;;;;;:::i;:::-;;41873:90:::0;:::o;41971:219::-;42031:13;42065:15;42072:7;42065:6;:15::i;:::-;42057:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;42144:7;42153:18;:7;:16;:18::i;:::-;42127:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42113:69;;41971:219;;;:::o;41409:169::-;41355:12;:10;:12::i;:::-;41346:21;;:5;;;;;;;;;;;:21;;;41338:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41535:35:::1;41541:7;41550;41559:6;41535:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;41409:169:::0;;;:::o;25365:439::-;25606:12;:10;:12::i;:::-;25598:20;;:4;:20;;;:60;;;;25622:36;25639:4;25645:12;:10;:12::i;:::-;25622:16;:36::i;:::-;25598:60;25576:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25744:52;25767:4;25773:2;25777:3;25782:7;25791:4;25744:22;:52::i;:::-;25365:439;;;;;:::o;23817:524::-;23973:16;24034:3;:10;24015:8;:15;:29;24007:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24103:30;24150:8;:15;24136:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24103:63;;24184:9;24179:122;24203:8;:15;24199:1;:19;24179:122;;;24259:30;24269:8;24278:1;24269:11;;;;;;;;:::i;:::-;;;;;;;;24282:3;24286:1;24282:6;;;;;;;;:::i;:::-;;;;;;;;24259:9;:30::i;:::-;24240:13;24254:1;24240:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24220:3;;;;:::i;:::-;;;24179:122;;;;24320:13;24313:20;;;23817:524;;;;:::o;39899:122::-;39956:4;40012:1;39980:29;40006:2;39980:25;:29::i;:::-;:33;39973:40;;39899:122;;;:::o;41203:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41176:20::-;;;;;;;;;;;;;:::o;24414:155::-;24509:52;24528:12;:10;:12::i;:::-;24542:8;24552;24509:18;:52::i;:::-;24414:155;;:::o;39688:113::-;39750:7;39777:12;:16;39790:2;39777:16;;;;;;;;;;;;39770:23;;39688:113;;;:::o;41586:279::-;41355:12;:10;:12::i;:::-;41346:21;;:5;;;;;;;;;;;:21;;;41338:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;41701:15:::1;41719:12;:10;:12::i;:::-;41701:30;;41747:9;41742:116;41766:8;:15;41762:1;:19;41742:116;;;41803:43;41809:8;41818:1;41809:11;;;;;;;;:::i;:::-;;;;;;;;41822:7;41831;41839:1;41831:10;;;;;;;;:::i;:::-;;;;;;;;41803:43;;;;;;;;;;;::::0;:5:::1;:43::i;:::-;41783:3;;;;;:::i;:::-;;;;41742:116;;;;41690:175;41586:279:::0;;;:::o;24641:168::-;24740:4;24764:18;:27;24783:7;24764:27;;;;;;;;;;;;;;;:37;24792:8;24764:37;;;;;;;;;;;;;;;;;;;;;;;;;24757:44;;24641:168;;;;:::o;24881:407::-;25097:12;:10;:12::i;:::-;25089:20;;:4;:20;;;:60;;;;25113:36;25130:4;25136:12;:10;:12::i;:::-;25113:16;:36::i;:::-;25089:60;25067:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;25235:45;25253:4;25259:2;25263;25267:6;25275:4;25235:17;:45::i;:::-;24881:407;;;;;:::o;13725:157::-;13810:4;13849:25;13834:40;;;:11;:40;;;;13827:47;;13725:157;;;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;30064:729::-;30231:1;30217:16;;:2;:16;;;;30209:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30284:16;30303:12;:10;:12::i;:::-;30284:31;;30326:20;30349:21;30367:2;30349:17;:21::i;:::-;30326:44;;30381:24;30408:25;30426:6;30408:17;:25::i;:::-;30381:52;;30446:66;30467:8;30485:1;30489:2;30493:3;30498:7;30507:4;30446:20;:66::i;:::-;30546:6;30525:9;:13;30535:2;30525:13;;;;;;;;;;;:17;30539:2;30525:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30605:2;30568:52;;30601:1;30568:52;;30583:8;30568:52;;;30609:2;30613:6;30568:52;;;;;;;:::i;:::-;;;;;;;;30633:65;30653:8;30671:1;30675:2;30679:3;30684:7;30693:4;30633:19;:65::i;:::-;30711:74;30742:8;30760:1;30764:2;30768;30772:6;30780:4;30711:30;:74::i;:::-;30198:595;;;30064:729;;;;:::o;27600:1146::-;27827:7;:14;27813:3;:10;:28;27805:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27919:1;27905:16;;:2;:16;;;;27897:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27976:16;27995:12;:10;:12::i;:::-;27976:31;;28020:60;28041:8;28051:4;28057:2;28061:3;28066:7;28075:4;28020:20;:60::i;:::-;28098:9;28093:421;28117:3;:10;28113:1;:14;28093:421;;;28149:10;28162:3;28166:1;28162:6;;;;;;;;:::i;:::-;;;;;;;;28149:19;;28183:14;28200:7;28208:1;28200:10;;;;;;;;:::i;:::-;;;;;;;;28183:27;;28227:19;28249:9;:13;28259:2;28249:13;;;;;;;;;;;:19;28263:4;28249:19;;;;;;;;;;;;;;;;28227:41;;28306:6;28291:11;:21;;28283:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28439:6;28425:11;:20;28403:9;:13;28413:2;28403:13;;;;;;;;;;;:19;28417:4;28403:19;;;;;;;;;;;;;;;:42;;;;28496:6;28475:9;:13;28485:2;28475:13;;;;;;;;;;;:17;28489:2;28475:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28134:380;;;28129:3;;;;:::i;:::-;;;28093:421;;;;28561:2;28531:47;;28555:4;28531:47;;28545:8;28531:47;;;28565:3;28570:7;28531:47;;;;;;;:::i;:::-;;;;;;;;28591:59;28611:8;28621:4;28627:2;28631:3;28636:7;28645:4;28591:19;:59::i;:::-;28663:75;28699:8;28709:4;28715:2;28719:3;28724:7;28733:4;28663:35;:75::i;:::-;27794:952;27600:1146;;;;;:::o;34477:331::-;34632:8;34623:17;;:5;:17;;;;34615:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34735:8;34697:18;:25;34716:5;34697:25;;;;;;;;;;;;;;;:35;34723:8;34697:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34781:8;34759:41;;34774:5;34759:41;;;34791:8;34759:41;;;;;;:::i;:::-;;;;;;;;34477:331;;;:::o;26268:974::-;26470:1;26456:16;;:2;:16;;;;26448:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26527:16;26546:12;:10;:12::i;:::-;26527:31;;26569:20;26592:21;26610:2;26592:17;:21::i;:::-;26569:44;;26624:24;26651:25;26669:6;26651:17;:25::i;:::-;26624:52;;26689:60;26710:8;26720:4;26726:2;26730:3;26735:7;26744:4;26689:20;:60::i;:::-;26762:19;26784:9;:13;26794:2;26784:13;;;;;;;;;;;:19;26798:4;26784:19;;;;;;;;;;;;;;;;26762:41;;26837:6;26822:11;:21;;26814:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26962:6;26948:11;:20;26926:9;:13;26936:2;26926:13;;;;;;;;;;;:19;26940:4;26926:19;;;;;;;;;;;;;;;:42;;;;27011:6;26990:9;:13;27000:2;26990:13;;;;;;;;;;;:17;27004:2;26990:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27066:2;27035:46;;27060:4;27035:46;;27050:8;27035:46;;;27070:2;27074:6;27035:46;;;;;;;:::i;:::-;;;;;;;;27094:59;27114:8;27124:4;27130:2;27134:3;27139:7;27148:4;27094:19;:59::i;:::-;27166:68;27197:8;27207:4;27213:2;27217;27221:6;27229:4;27166:30;:68::i;:::-;26437:805;;;;26268:974;;;;;:::o;38743:198::-;38809:16;38838:22;38877:1;38863:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38838:41;;38901:7;38890:5;38896:1;38890:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38928:5;38921:12;;;38743:198;;;:::o;40096:931::-;40335:66;40362:8;40372:4;40378:2;40382:3;40387:7;40396:4;40335:26;:66::i;:::-;40434:1;40418:18;;:4;:18;;;40414:160;;;40458:9;40453:110;40477:3;:10;40473:1;:14;40453:110;;;40537:7;40545:1;40537:10;;;;;;;;:::i;:::-;;;;;;;;40513:12;:20;40526:3;40530:1;40526:6;;;;;;;;:::i;:::-;;;;;;;;40513:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;40489:3;;;;:::i;:::-;;;40453:110;;;;40414:160;40604:1;40590:16;;:2;:16;;;40586:434;;;40628:9;40623:386;40647:3;:10;40643:1;:14;40623:386;;;40683:10;40696:3;40700:1;40696:6;;;;;;;;:::i;:::-;;;;;;;;40683:19;;40721:14;40738:7;40746:1;40738:10;;;;;;;;:::i;:::-;;;;;;;;40721:27;;40767:14;40784:12;:16;40797:2;40784:16;;;;;;;;;;;;40767:33;;40837:6;40827;:16;;40819:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40968:6;40959;:15;40940:12;:16;40953:2;40940:16;;;;;;;;;;;:34;;;;40664:345;;;40659:3;;;;:::i;:::-;;;40623:386;;;;40586:434;40096:931;;;;;;:::o;36942:220::-;;;;;;;:::o;37170:744::-;37385:15;:2;:13;;;:15::i;:::-;37381:526;;;37438:2;37421:38;;;37460:8;37470:4;37476:2;37480:6;37488:4;37421:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37417:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37769:6;37762:14;;;;;;;;;;;:::i;:::-;;;;;;;;37417:479;;;37818:62;;;;;;;;;;:::i;:::-;;;;;;;;37417:479;37555:43;;;37543:55;;;:8;:55;;;;37539:154;;37623:50;;;;;;;;;;:::i;:::-;;;;;;;;37539:154;37494:214;37381:526;37170:744;;;;;;:::o;37922:813::-;38162:15;:2;:13;;;:15::i;:::-;38158:570;;;38215:2;38198:43;;;38242:8;38252:4;38258:3;38263:7;38272:4;38198:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38194:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38590:6;38583:14;;;;;;;;;;;:::i;:::-;;;;;;;;38194:523;;;38639:62;;;;;;;;;;:::i;:::-;;;;;;;;38194:523;38371:48;;;38359:60;;;:8;:60;;;;38355:159;;38444:50;;;;;;;;;;:::i;:::-;;;;;;;;38355:159;38278:251;38158:570;37922:813;;;;;;:::o;35766:221::-;;;;;;;:::o;4623:326::-;4683:4;4940:1;4918:7;:19;;;:23;4911:30;;4623:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:474::-;4621:6;4629;4678:2;4666:9;4657:7;4653:23;4649:32;4646:119;;;4684:79;;:::i;:::-;4646:119;4804:1;4829:53;4874:7;4865:6;4854:9;4850:22;4829:53;:::i;:::-;4819:63;;4775:117;4931:2;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4902:118;4553:474;;;;;:::o;5033:1509::-;5187:6;5195;5203;5211;5219;5268:3;5256:9;5247:7;5243:23;5239:33;5236:120;;;5275:79;;:::i;:::-;5236:120;5395:1;5420:53;5465:7;5456:6;5445:9;5441:22;5420:53;:::i;:::-;5410:63;;5366:117;5522:2;5548:53;5593:7;5584:6;5573:9;5569:22;5548:53;:::i;:::-;5538:63;;5493:118;5678:2;5667:9;5663:18;5650:32;5709:18;5701:6;5698:30;5695:117;;;5731:79;;:::i;:::-;5695:117;5836:78;5906:7;5897:6;5886:9;5882:22;5836:78;:::i;:::-;5826:88;;5621:303;5991:2;5980:9;5976:18;5963:32;6022:18;6014:6;6011:30;6008:117;;;6044:79;;:::i;:::-;6008:117;6149:78;6219:7;6210:6;6199:9;6195:22;6149:78;:::i;:::-;6139:88;;5934:303;6304:3;6293:9;6289:19;6276:33;6336:18;6328:6;6325:30;6322:117;;;6358:79;;:::i;:::-;6322:117;6463:62;6517:7;6508:6;6497:9;6493:22;6463:62;:::i;:::-;6453:72;;6247:288;5033:1509;;;;;;;;:::o;6548:1089::-;6652:6;6660;6668;6676;6684;6733:3;6721:9;6712:7;6708:23;6704:33;6701:120;;;6740:79;;:::i;:::-;6701:120;6860:1;6885:53;6930:7;6921:6;6910:9;6906:22;6885:53;:::i;:::-;6875:63;;6831:117;6987:2;7013:53;7058:7;7049:6;7038:9;7034:22;7013:53;:::i;:::-;7003:63;;6958:118;7115:2;7141:53;7186:7;7177:6;7166:9;7162:22;7141:53;:::i;:::-;7131:63;;7086:118;7243:2;7269:53;7314:7;7305:6;7294:9;7290:22;7269:53;:::i;:::-;7259:63;;7214:118;7399:3;7388:9;7384:19;7371:33;7431:18;7423:6;7420:30;7417:117;;;7453:79;;:::i;:::-;7417:117;7558:62;7612:7;7603:6;7592:9;7588:22;7558:62;:::i;:::-;7548:72;;7342:288;6548:1089;;;;;;;;:::o;7643:468::-;7708:6;7716;7765:2;7753:9;7744:7;7740:23;7736:32;7733:119;;;7771:79;;:::i;:::-;7733:119;7891:1;7916:53;7961:7;7952:6;7941:9;7937:22;7916:53;:::i;:::-;7906:63;;7862:117;8018:2;8044:50;8086:7;8077:6;8066:9;8062:22;8044:50;:::i;:::-;8034:60;;7989:115;7643:468;;;;;:::o;8117:474::-;8185:6;8193;8242:2;8230:9;8221:7;8217:23;8213:32;8210:119;;;8248:79;;:::i;:::-;8210:119;8368:1;8393:53;8438:7;8429:6;8418:9;8414:22;8393:53;:::i;:::-;8383:63;;8339:117;8495:2;8521:53;8566:7;8557:6;8546:9;8542:22;8521:53;:::i;:::-;8511:63;;8466:118;8117:474;;;;;:::o;8597:619::-;8674:6;8682;8690;8739:2;8727:9;8718:7;8714:23;8710:32;8707:119;;;8745:79;;:::i;:::-;8707:119;8865:1;8890:53;8935:7;8926:6;8915:9;8911:22;8890:53;:::i;:::-;8880:63;;8836:117;8992:2;9018:53;9063:7;9054:6;9043:9;9039:22;9018:53;:::i;:::-;9008:63;;8963:118;9120:2;9146:53;9191:7;9182:6;9171:9;9167:22;9146:53;:::i;:::-;9136:63;;9091:118;8597:619;;;;;:::o;9222:894::-;9340:6;9348;9397:2;9385:9;9376:7;9372:23;9368:32;9365:119;;;9403:79;;:::i;:::-;9365:119;9551:1;9540:9;9536:17;9523:31;9581:18;9573:6;9570:30;9567:117;;;9603:79;;:::i;:::-;9567:117;9708:78;9778:7;9769:6;9758:9;9754:22;9708:78;:::i;:::-;9698:88;;9494:302;9863:2;9852:9;9848:18;9835:32;9894:18;9886:6;9883:30;9880:117;;;9916:79;;:::i;:::-;9880:117;10021:78;10091:7;10082:6;10071:9;10067:22;10021:78;:::i;:::-;10011:88;;9806:303;9222:894;;;;;:::o;10122:327::-;10180:6;10229:2;10217:9;10208:7;10204:23;10200:32;10197:119;;;10235:79;;:::i;:::-;10197:119;10355:1;10380:52;10424:7;10415:6;10404:9;10400:22;10380:52;:::i;:::-;10370:62;;10326:116;10122:327;;;;:::o;10455:349::-;10524:6;10573:2;10561:9;10552:7;10548:23;10544:32;10541:119;;;10579:79;;:::i;:::-;10541:119;10699:1;10724:63;10779:7;10770:6;10759:9;10755:22;10724:63;:::i;:::-;10714:73;;10670:127;10455:349;;;;:::o;10810:509::-;10879:6;10928:2;10916:9;10907:7;10903:23;10899:32;10896:119;;;10934:79;;:::i;:::-;10896:119;11082:1;11071:9;11067:17;11054:31;11112:18;11104:6;11101:30;11098:117;;;11134:79;;:::i;:::-;11098:117;11239:63;11294:7;11285:6;11274:9;11270:22;11239:63;:::i;:::-;11229:73;;11025:287;10810:509;;;;:::o;11325:329::-;11384:6;11433:2;11421:9;11412:7;11408:23;11404:32;11401:119;;;11439:79;;:::i;:::-;11401:119;11559:1;11584:53;11629:7;11620:6;11609:9;11605:22;11584:53;:::i;:::-;11574:63;;11530:117;11325:329;;;;:::o;11660:1039::-;11787:6;11795;11803;11852:2;11840:9;11831:7;11827:23;11823:32;11820:119;;;11858:79;;:::i;:::-;11820:119;11978:1;12003:53;12048:7;12039:6;12028:9;12024:22;12003:53;:::i;:::-;11993:63;;11949:117;12133:2;12122:9;12118:18;12105:32;12164:18;12156:6;12153:30;12150:117;;;12186:79;;:::i;:::-;12150:117;12291:78;12361:7;12352:6;12341:9;12337:22;12291:78;:::i;:::-;12281:88;;12076:303;12446:2;12435:9;12431:18;12418:32;12477:18;12469:6;12466:30;12463:117;;;12499:79;;:::i;:::-;12463:117;12604:78;12674:7;12665:6;12654:9;12650:22;12604:78;:::i;:::-;12594:88;;12389:303;11660:1039;;;;;:::o;12705:179::-;12774:10;12795:46;12837:3;12829:6;12795:46;:::i;:::-;12873:4;12868:3;12864:14;12850:28;;12705:179;;;;:::o;12890:118::-;12977:24;12995:5;12977:24;:::i;:::-;12972:3;12965:37;12890:118;;:::o;13044:732::-;13163:3;13192:54;13240:5;13192:54;:::i;:::-;13262:86;13341:6;13336:3;13262:86;:::i;:::-;13255:93;;13372:56;13422:5;13372:56;:::i;:::-;13451:7;13482:1;13467:284;13492:6;13489:1;13486:13;13467:284;;;13568:6;13562:13;13595:63;13654:3;13639:13;13595:63;:::i;:::-;13588:70;;13681:60;13734:6;13681:60;:::i;:::-;13671:70;;13527:224;13514:1;13511;13507:9;13502:14;;13467:284;;;13471:14;13767:3;13760:10;;13168:608;;;13044:732;;;;:::o;13782:109::-;13863:21;13878:5;13863:21;:::i;:::-;13858:3;13851:34;13782:109;;:::o;13897:360::-;13983:3;14011:38;14043:5;14011:38;:::i;:::-;14065:70;14128:6;14123:3;14065:70;:::i;:::-;14058:77;;14144:52;14189:6;14184:3;14177:4;14170:5;14166:16;14144:52;:::i;:::-;14221:29;14243:6;14221:29;:::i;:::-;14216:3;14212:39;14205:46;;13987:270;13897:360;;;;:::o;14263:364::-;14351:3;14379:39;14412:5;14379:39;:::i;:::-;14434:71;14498:6;14493:3;14434:71;:::i;:::-;14427:78;;14514:52;14559:6;14554:3;14547:4;14540:5;14536:16;14514:52;:::i;:::-;14591:29;14613:6;14591:29;:::i;:::-;14586:3;14582:39;14575:46;;14355:272;14263:364;;;;:::o;14633:377::-;14739:3;14767:39;14800:5;14767:39;:::i;:::-;14822:89;14904:6;14899:3;14822:89;:::i;:::-;14815:96;;14920:52;14965:6;14960:3;14953:4;14946:5;14942:16;14920:52;:::i;:::-;14997:6;14992:3;14988:16;14981:23;;14743:267;14633:377;;;;:::o;15040:845::-;15143:3;15180:5;15174:12;15209:36;15235:9;15209:36;:::i;:::-;15261:89;15343:6;15338:3;15261:89;:::i;:::-;15254:96;;15381:1;15370:9;15366:17;15397:1;15392:137;;;;15543:1;15538:341;;;;15359:520;;15392:137;15476:4;15472:9;15461;15457:25;15452:3;15445:38;15512:6;15507:3;15503:16;15496:23;;15392:137;;15538:341;15605:38;15637:5;15605:38;:::i;:::-;15665:1;15679:154;15693:6;15690:1;15687:13;15679:154;;;15767:7;15761:14;15757:1;15752:3;15748:11;15741:35;15817:1;15808:7;15804:15;15793:26;;15715:4;15712:1;15708:12;15703:17;;15679:154;;;15862:6;15857:3;15853:16;15846:23;;15545:334;;15359:520;;15147:738;;15040:845;;;;:::o;15891:366::-;16033:3;16054:67;16118:2;16113:3;16054:67;:::i;:::-;16047:74;;16130:93;16219:3;16130:93;:::i;:::-;16248:2;16243:3;16239:12;16232:19;;15891:366;;;:::o;16263:::-;16405:3;16426:67;16490:2;16485:3;16426:67;:::i;:::-;16419:74;;16502:93;16591:3;16502:93;:::i;:::-;16620:2;16615:3;16611:12;16604:19;;16263:366;;;:::o;16635:::-;16777:3;16798:67;16862:2;16857:3;16798:67;:::i;:::-;16791:74;;16874:93;16963:3;16874:93;:::i;:::-;16992:2;16987:3;16983:12;16976:19;;16635:366;;;:::o;17007:::-;17149:3;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17246:93;17335:3;17246:93;:::i;:::-;17364:2;17359:3;17355:12;17348:19;;17007:366;;;:::o;17379:::-;17521:3;17542:67;17606:2;17601:3;17542:67;:::i;:::-;17535:74;;17618:93;17707:3;17618:93;:::i;:::-;17736:2;17731:3;17727:12;17720:19;;17379:366;;;:::o;17751:365::-;17893:3;17914:66;17978:1;17973:3;17914:66;:::i;:::-;17907:73;;17989:93;18078:3;17989:93;:::i;:::-;18107:2;18102:3;18098:12;18091:19;;17751:365;;;:::o;18122:366::-;18264:3;18285:67;18349:2;18344:3;18285:67;:::i;:::-;18278:74;;18361:93;18450:3;18361:93;:::i;:::-;18479:2;18474:3;18470:12;18463:19;;18122:366;;;:::o;18494:::-;18636:3;18657:67;18721:2;18716:3;18657:67;:::i;:::-;18650:74;;18733:93;18822:3;18733:93;:::i;:::-;18851:2;18846:3;18842:12;18835:19;;18494:366;;;:::o;18866:400::-;19026:3;19047:84;19129:1;19124:3;19047:84;:::i;:::-;19040:91;;19140:93;19229:3;19140:93;:::i;:::-;19258:1;19253:3;19249:11;19242:18;;18866:400;;;:::o;19272:366::-;19414:3;19435:67;19499:2;19494:3;19435:67;:::i;:::-;19428:74;;19511:93;19600:3;19511:93;:::i;:::-;19629:2;19624:3;19620:12;19613:19;;19272:366;;;:::o;19644:::-;19786:3;19807:67;19871:2;19866:3;19807:67;:::i;:::-;19800:74;;19883:93;19972:3;19883:93;:::i;:::-;20001:2;19996:3;19992:12;19985:19;;19644:366;;;:::o;20016:::-;20158:3;20179:67;20243:2;20238:3;20179:67;:::i;:::-;20172:74;;20255:93;20344:3;20255:93;:::i;:::-;20373:2;20368:3;20364:12;20357:19;;20016:366;;;:::o;20388:::-;20530:3;20551:67;20615:2;20610:3;20551:67;:::i;:::-;20544:74;;20627:93;20716:3;20627:93;:::i;:::-;20745:2;20740:3;20736:12;20729:19;;20388:366;;;:::o;20760:::-;20902:3;20923:67;20987:2;20982:3;20923:67;:::i;:::-;20916:74;;20999:93;21088:3;20999:93;:::i;:::-;21117:2;21112:3;21108:12;21101:19;;20760:366;;;:::o;21132:108::-;21209:24;21227:5;21209:24;:::i;:::-;21204:3;21197:37;21132:108;;:::o;21246:118::-;21333:24;21351:5;21333:24;:::i;:::-;21328:3;21321:37;21246:118;;:::o;21370:695::-;21648:3;21670:92;21758:3;21749:6;21670:92;:::i;:::-;21663:99;;21779:95;21870:3;21861:6;21779:95;:::i;:::-;21772:102;;21891:148;22035:3;21891:148;:::i;:::-;21884:155;;22056:3;22049:10;;21370:695;;;;;:::o;22071:222::-;22164:4;22202:2;22191:9;22187:18;22179:26;;22215:71;22283:1;22272:9;22268:17;22259:6;22215:71;:::i;:::-;22071:222;;;;:::o;22299:1053::-;22622:4;22660:3;22649:9;22645:19;22637:27;;22674:71;22742:1;22731:9;22727:17;22718:6;22674:71;:::i;:::-;22755:72;22823:2;22812:9;22808:18;22799:6;22755:72;:::i;:::-;22874:9;22868:4;22864:20;22859:2;22848:9;22844:18;22837:48;22902:108;23005:4;22996:6;22902:108;:::i;:::-;22894:116;;23057:9;23051:4;23047:20;23042:2;23031:9;23027:18;23020:48;23085:108;23188:4;23179:6;23085:108;:::i;:::-;23077:116;;23241:9;23235:4;23231:20;23225:3;23214:9;23210:19;23203:49;23269:76;23340:4;23331:6;23269:76;:::i;:::-;23261:84;;22299:1053;;;;;;;;:::o;23358:751::-;23581:4;23619:3;23608:9;23604:19;23596:27;;23633:71;23701:1;23690:9;23686:17;23677:6;23633:71;:::i;:::-;23714:72;23782:2;23771:9;23767:18;23758:6;23714:72;:::i;:::-;23796;23864:2;23853:9;23849:18;23840:6;23796:72;:::i;:::-;23878;23946:2;23935:9;23931:18;23922:6;23878:72;:::i;:::-;23998:9;23992:4;23988:20;23982:3;23971:9;23967:19;23960:49;24026:76;24097:4;24088:6;24026:76;:::i;:::-;24018:84;;23358:751;;;;;;;;:::o;24115:373::-;24258:4;24296:2;24285:9;24281:18;24273:26;;24345:9;24339:4;24335:20;24331:1;24320:9;24316:17;24309:47;24373:108;24476:4;24467:6;24373:108;:::i;:::-;24365:116;;24115:373;;;;:::o;24494:634::-;24715:4;24753:2;24742:9;24738:18;24730:26;;24802:9;24796:4;24792:20;24788:1;24777:9;24773:17;24766:47;24830:108;24933:4;24924:6;24830:108;:::i;:::-;24822:116;;24985:9;24979:4;24975:20;24970:2;24959:9;24955:18;24948:48;25013:108;25116:4;25107:6;25013:108;:::i;:::-;25005:116;;24494:634;;;;;:::o;25134:210::-;25221:4;25259:2;25248:9;25244:18;25236:26;;25272:65;25334:1;25323:9;25319:17;25310:6;25272:65;:::i;:::-;25134:210;;;;:::o;25350:313::-;25463:4;25501:2;25490:9;25486:18;25478:26;;25550:9;25544:4;25540:20;25536:1;25525:9;25521:17;25514:47;25578:78;25651:4;25642:6;25578:78;:::i;:::-;25570:86;;25350:313;;;;:::o;25669:419::-;25835:4;25873:2;25862:9;25858:18;25850:26;;25922:9;25916:4;25912:20;25908:1;25897:9;25893:17;25886:47;25950:131;26076:4;25950:131;:::i;:::-;25942:139;;25669:419;;;:::o;26094:::-;26260:4;26298:2;26287:9;26283:18;26275:26;;26347:9;26341:4;26337:20;26333:1;26322:9;26318:17;26311:47;26375:131;26501:4;26375:131;:::i;:::-;26367:139;;26094:419;;;:::o;26519:::-;26685:4;26723:2;26712:9;26708:18;26700:26;;26772:9;26766:4;26762:20;26758:1;26747:9;26743:17;26736:47;26800:131;26926:4;26800:131;:::i;:::-;26792:139;;26519:419;;;:::o;26944:::-;27110:4;27148:2;27137:9;27133:18;27125:26;;27197:9;27191:4;27187:20;27183:1;27172:9;27168:17;27161:47;27225:131;27351:4;27225:131;:::i;:::-;27217:139;;26944:419;;;:::o;27369:::-;27535:4;27573:2;27562:9;27558:18;27550:26;;27622:9;27616:4;27612:20;27608:1;27597:9;27593:17;27586:47;27650:131;27776:4;27650:131;:::i;:::-;27642:139;;27369:419;;;:::o;27794:::-;27960:4;27998:2;27987:9;27983:18;27975:26;;28047:9;28041:4;28037:20;28033:1;28022:9;28018:17;28011:47;28075:131;28201:4;28075:131;:::i;:::-;28067:139;;27794:419;;;:::o;28219:::-;28385:4;28423:2;28412:9;28408:18;28400:26;;28472:9;28466:4;28462:20;28458:1;28447:9;28443:17;28436:47;28500:131;28626:4;28500:131;:::i;:::-;28492:139;;28219:419;;;:::o;28644:::-;28810:4;28848:2;28837:9;28833:18;28825:26;;28897:9;28891:4;28887:20;28883:1;28872:9;28868:17;28861:47;28925:131;29051:4;28925:131;:::i;:::-;28917:139;;28644:419;;;:::o;29069:::-;29235:4;29273:2;29262:9;29258:18;29250:26;;29322:9;29316:4;29312:20;29308:1;29297:9;29293:17;29286:47;29350:131;29476:4;29350:131;:::i;:::-;29342:139;;29069:419;;;:::o;29494:::-;29660:4;29698:2;29687:9;29683:18;29675:26;;29747:9;29741:4;29737:20;29733:1;29722:9;29718:17;29711:47;29775:131;29901:4;29775:131;:::i;:::-;29767:139;;29494:419;;;:::o;29919:::-;30085:4;30123:2;30112:9;30108:18;30100:26;;30172:9;30166:4;30162:20;30158:1;30147:9;30143:17;30136:47;30200:131;30326:4;30200:131;:::i;:::-;30192:139;;29919:419;;;:::o;30344:::-;30510:4;30548:2;30537:9;30533:18;30525:26;;30597:9;30591:4;30587:20;30583:1;30572:9;30568:17;30561:47;30625:131;30751:4;30625:131;:::i;:::-;30617:139;;30344:419;;;:::o;30769:::-;30935:4;30973:2;30962:9;30958:18;30950:26;;31022:9;31016:4;31012:20;31008:1;30997:9;30993:17;30986:47;31050:131;31176:4;31050:131;:::i;:::-;31042:139;;30769:419;;;:::o;31194:222::-;31287:4;31325:2;31314:9;31310:18;31302:26;;31338:71;31406:1;31395:9;31391:17;31382:6;31338:71;:::i;:::-;31194:222;;;;:::o;31422:332::-;31543:4;31581:2;31570:9;31566:18;31558:26;;31594:71;31662:1;31651:9;31647:17;31638:6;31594:71;:::i;:::-;31675:72;31743:2;31732:9;31728:18;31719:6;31675:72;:::i;:::-;31422:332;;;;;:::o;31760:129::-;31794:6;31821:20;;:::i;:::-;31811:30;;31850:33;31878:4;31870:6;31850:33;:::i;:::-;31760:129;;;:::o;31895:75::-;31928:6;31961:2;31955:9;31945:19;;31895:75;:::o;31976:311::-;32053:4;32143:18;32135:6;32132:30;32129:56;;;32165:18;;:::i;:::-;32129:56;32215:4;32207:6;32203:17;32195:25;;32275:4;32269;32265:15;32257:23;;31976:311;;;:::o;32293:::-;32370:4;32460:18;32452:6;32449:30;32446:56;;;32482:18;;:::i;:::-;32446:56;32532:4;32524:6;32520:17;32512:25;;32592:4;32586;32582:15;32574:23;;32293:311;;;:::o;32610:307::-;32671:4;32761:18;32753:6;32750:30;32747:56;;;32783:18;;:::i;:::-;32747:56;32821:29;32843:6;32821:29;:::i;:::-;32813:37;;32905:4;32899;32895:15;32887:23;;32610:307;;;:::o;32923:308::-;32985:4;33075:18;33067:6;33064:30;33061:56;;;33097:18;;:::i;:::-;33061:56;33135:29;33157:6;33135:29;:::i;:::-;33127:37;;33219:4;33213;33209:15;33201:23;;32923:308;;;:::o;33237:132::-;33304:4;33327:3;33319:11;;33357:4;33352:3;33348:14;33340:22;;33237:132;;;:::o;33375:141::-;33424:4;33447:3;33439:11;;33470:3;33467:1;33460:14;33504:4;33501:1;33491:18;33483:26;;33375:141;;;:::o;33522:114::-;33589:6;33623:5;33617:12;33607:22;;33522:114;;;:::o;33642:98::-;33693:6;33727:5;33721:12;33711:22;;33642:98;;;:::o;33746:99::-;33798:6;33832:5;33826:12;33816:22;;33746:99;;;:::o;33851:113::-;33921:4;33953;33948:3;33944:14;33936:22;;33851:113;;;:::o;33970:184::-;34069:11;34103:6;34098:3;34091:19;34143:4;34138:3;34134:14;34119:29;;33970:184;;;;:::o;34160:168::-;34243:11;34277:6;34272:3;34265:19;34317:4;34312:3;34308:14;34293:29;;34160:168;;;;:::o;34334:169::-;34418:11;34452:6;34447:3;34440:19;34492:4;34487:3;34483:14;34468:29;;34334:169;;;;:::o;34509:148::-;34611:11;34648:3;34633:18;;34509:148;;;;:::o;34663:305::-;34703:3;34722:20;34740:1;34722:20;:::i;:::-;34717:25;;34756:20;34774:1;34756:20;:::i;:::-;34751:25;;34910:1;34842:66;34838:74;34835:1;34832:81;34829:107;;;34916:18;;:::i;:::-;34829:107;34960:1;34957;34953:9;34946:16;;34663:305;;;;:::o;34974:185::-;35014:1;35031:20;35049:1;35031:20;:::i;:::-;35026:25;;35065:20;35083:1;35065:20;:::i;:::-;35060:25;;35104:1;35094:35;;35109:18;;:::i;:::-;35094:35;35151:1;35148;35144:9;35139:14;;34974:185;;;;:::o;35165:191::-;35205:4;35225:20;35243:1;35225:20;:::i;:::-;35220:25;;35259:20;35277:1;35259:20;:::i;:::-;35254:25;;35298:1;35295;35292:8;35289:34;;;35303:18;;:::i;:::-;35289:34;35348:1;35345;35341:9;35333:17;;35165:191;;;;:::o;35362:96::-;35399:7;35428:24;35446:5;35428:24;:::i;:::-;35417:35;;35362:96;;;:::o;35464:90::-;35498:7;35541:5;35534:13;35527:21;35516:32;;35464:90;;;:::o;35560:149::-;35596:7;35636:66;35629:5;35625:78;35614:89;;35560:149;;;:::o;35715:126::-;35752:7;35792:42;35785:5;35781:54;35770:65;;35715:126;;;:::o;35847:77::-;35884:7;35913:5;35902:16;;35847:77;;;:::o;35930:154::-;36014:6;36009:3;36004;35991:30;36076:1;36067:6;36062:3;36058:16;36051:27;35930:154;;;:::o;36090:307::-;36158:1;36168:113;36182:6;36179:1;36176:13;36168:113;;;36267:1;36262:3;36258:11;36252:18;36248:1;36243:3;36239:11;36232:39;36204:2;36201:1;36197:10;36192:15;;36168:113;;;36299:6;36296:1;36293:13;36290:101;;;36379:1;36370:6;36365:3;36361:16;36354:27;36290:101;36139:258;36090:307;;;:::o;36403:320::-;36447:6;36484:1;36478:4;36474:12;36464:22;;36531:1;36525:4;36521:12;36552:18;36542:81;;36608:4;36600:6;36596:17;36586:27;;36542:81;36670:2;36662:6;36659:14;36639:18;36636:38;36633:84;;;36689:18;;:::i;:::-;36633:84;36454:269;36403:320;;;:::o;36729:281::-;36812:27;36834:4;36812:27;:::i;:::-;36804:6;36800:40;36942:6;36930:10;36927:22;36906:18;36894:10;36891:34;36888:62;36885:88;;;36953:18;;:::i;:::-;36885:88;36993:10;36989:2;36982:22;36772:238;36729:281;;:::o;37016:233::-;37055:3;37078:24;37096:5;37078:24;:::i;:::-;37069:33;;37124:66;37117:5;37114:77;37111:103;;;37194:18;;:::i;:::-;37111:103;37241:1;37234:5;37230:13;37223:20;;37016:233;;;:::o;37255:176::-;37287:1;37304:20;37322:1;37304:20;:::i;:::-;37299:25;;37338:20;37356:1;37338:20;:::i;:::-;37333:25;;37377:1;37367:35;;37382:18;;:::i;:::-;37367:35;37423:1;37420;37416:9;37411:14;;37255:176;;;;:::o;37437:180::-;37485:77;37482:1;37475:88;37582:4;37579:1;37572:15;37606:4;37603:1;37596:15;37623:180;37671:77;37668:1;37661:88;37768:4;37765:1;37758:15;37792:4;37789:1;37782:15;37809:180;37857:77;37854:1;37847:88;37954:4;37951:1;37944:15;37978:4;37975:1;37968:15;37995:180;38043:77;38040:1;38033:88;38140:4;38137:1;38130:15;38164:4;38161:1;38154:15;38181:180;38229:77;38226:1;38219:88;38326:4;38323:1;38316:15;38350:4;38347:1;38340:15;38367:183;38402:3;38440:1;38422:16;38419:23;38416:128;;;38478:1;38475;38472;38457:23;38500:34;38531:1;38525:8;38500:34;:::i;:::-;38493:41;;38416:128;38367:183;:::o;38556:117::-;38665:1;38662;38655:12;38679:117;38788:1;38785;38778:12;38802:117;38911:1;38908;38901:12;38925:117;39034:1;39031;39024:12;39048:117;39157:1;39154;39147:12;39171:102;39212:6;39263:2;39259:7;39254:2;39247:5;39243:14;39239:28;39229:38;;39171:102;;;:::o;39279:106::-;39323:8;39372:5;39367:3;39363:15;39342:36;;39279:106;;;:::o;39391:239::-;39531:34;39527:1;39519:6;39515:14;39508:58;39600:22;39595:2;39587:6;39583:15;39576:47;39391:239;:::o;39636:234::-;39776:34;39772:1;39764:6;39760:14;39753:58;39845:17;39840:2;39832:6;39828:15;39821:42;39636:234;:::o;39876:227::-;40016:34;40012:1;40004:6;40000:14;39993:58;40085:10;40080:2;40072:6;40068:15;40061:35;39876:227;:::o;40109:167::-;40249:19;40245:1;40237:6;40233:14;40226:43;40109:167;:::o;40282:229::-;40422:34;40418:1;40410:6;40406:14;40399:58;40491:12;40486:2;40478:6;40474:15;40467:37;40282:229;:::o;40517:159::-;40657:11;40653:1;40645:6;40641:14;40634:35;40517:159;:::o;40682:224::-;40822:34;40818:1;40810:6;40806:14;40799:58;40891:7;40886:2;40878:6;40874:15;40867:32;40682:224;:::o;40912:229::-;41052:34;41048:1;41040:6;41036:14;41029:58;41121:12;41116:2;41108:6;41104:15;41097:37;40912:229;:::o;41147:155::-;41287:7;41283:1;41275:6;41271:14;41264:31;41147:155;:::o;41308:227::-;41448:34;41444:1;41436:6;41432:14;41425:58;41517:10;41512:2;41504:6;41500:15;41493:35;41308:227;:::o;41541:228::-;41681:34;41677:1;41669:6;41665:14;41658:58;41750:11;41745:2;41737:6;41733:15;41726:36;41541:228;:::o;41775:::-;41915:34;41911:1;41903:6;41899:14;41892:58;41984:11;41979:2;41971:6;41967:15;41960:36;41775:228;:::o;42009:227::-;42149:34;42145:1;42137:6;42133:14;42126:58;42218:10;42213:2;42205:6;42201:15;42194:35;42009:227;:::o;42242:220::-;42382:34;42378:1;42370:6;42366:14;42359:58;42451:3;42446:2;42438:6;42434:15;42427:28;42242:220;:::o;42468:711::-;42507:3;42545:4;42527:16;42524:26;42521:39;;;42553:5;;42521:39;42582:20;;:::i;:::-;42657:1;42639:16;42635:24;42632:1;42626:4;42611:49;42690:4;42684:11;42789:16;42782:4;42774:6;42770:17;42767:39;42734:18;42726:6;42723:30;42707:113;42704:146;;;42835:5;;;;42704:146;42881:6;42875:4;42871:17;42917:3;42911:10;42944:18;42936:6;42933:30;42930:43;;;42966:5;;;;;;42930:43;43014:6;43007:4;43002:3;42998:14;42994:27;43073:1;43055:16;43051:24;43045:4;43041:35;43036:3;43033:44;43030:57;;;43080:5;;;;;;;43030:57;43097;43145:6;43139:4;43135:17;43127:6;43123:30;43117:4;43097:57;:::i;:::-;43170:3;43163:10;;42511:668;;;;;42468:711;;:::o;43185:122::-;43258:24;43276:5;43258:24;:::i;:::-;43251:5;43248:35;43238:63;;43297:1;43294;43287:12;43238:63;43185:122;:::o;43313:116::-;43383:21;43398:5;43383:21;:::i;:::-;43376:5;43373:32;43363:60;;43419:1;43416;43409:12;43363:60;43313:116;:::o;43435:120::-;43507:23;43524:5;43507:23;:::i;:::-;43500:5;43497:34;43487:62;;43545:1;43542;43535:12;43487:62;43435:120;:::o;43561:122::-;43634:24;43652:5;43634:24;:::i;:::-;43627:5;43624:35;43614:63;;43673:1;43670;43663:12;43614:63;43561:122;:::o

Swarm Source

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