ETH Price: $3,453.95 (+1.63%)

Token

 

Overview

Max Total Supply

109

Holders

81

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
butlins.eth
0x15caac6fd6517a6e1deb8a888b53299418b07454
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:
StrawberryCollections

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-14
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.0 (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.0 (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 v4.4.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.
        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. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

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


// OpenZeppelin Contracts v4.4.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 be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.0 (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/token/ERC1155/ERC1155.sol


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: artifacts/SSC.sol



pragma solidity ^0.8.7;




contract StrawberryCollections is ERC1155, Ownable
{
    string base_url_metadata = "";
    uint256[] listIds;   


    constructor() ERC1155('')
    {
        
    }

    function SetBaseURLMetadata(string memory base_url) public onlyOwner()
    {
        base_url_metadata = base_url;
    }

    function CreateToken(address account,uint256[] memory ids,uint256[] memory amounts,bytes memory data) public onlyOwner()
    {
        _mintBatch(account, ids, amounts, data);
        listIds = ids;
    }
    
    function BurnToken(address account,uint256[] memory ids,uint256[] memory amounts) public onlyOwner()
    {
        _burnBatch(account, ids, amounts);
    }
        
    function GetIds() public view returns(uint256[] memory)
    {
        return listIds;
    }

    function uri (uint256 id) override public view returns(string memory)
    {
        return string(abi.encodePacked(base_url_metadata, Strings.toString(id), ".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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"BurnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"CreateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"GetIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"base_url","type":"string"}],"name":"SetBaseURLMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405260405180602001604052806000815250600490805190602001906200002b9291906200016c565b503480156200003957600080fd5b50604051806020016040528060008152506200005b816200008260201b60201c565b506200007c620000706200009e60201b60201c565b620000a660201b60201c565b62000281565b80600290805190602001906200009a9291906200016c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200017a906200021c565b90600052602060002090601f0160209004810192826200019e5760008555620001ea565b82601f10620001b957805160ff1916838001178555620001ea565b82800160010185558215620001ea579182015b82811115620001e9578251825591602001919060010190620001cc565b5b509050620001f99190620001fd565b5090565b5b8082111562000218576000816000905550600101620001fe565b5090565b600060028204905060018216806200023557607f821691505b602082108114156200024c576200024b62000252565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61395c80620002916000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c8063715018a611610097578063b424d09b11610066578063b424d09b1461026f578063e985e9c51461028b578063f242432a146102bb578063f2fde38b146102d7576100f4565b8063715018a61461020f5780638da5cb5b14610219578063a22cb46514610237578063a644931914610253576100f4565b80631540d671116100d35780631540d671146101895780632eb2c2d6146101a75780634e1273f4146101c35780635885b046146101f3576100f4565b8062fdd58e146100f957806301ffc9a7146101295780630e89341c14610159575b600080fd5b610113600480360381019061010e919061253c565b6102f3565b6040516101209190612e4a565b60405180910390f35b610143600480360381019061013e91906125f4565b6103bc565b6040516101509190612c2d565b60405180910390f35b610173600480360381019061016e9190612697565b61049e565b6040516101809190612c48565b60405180910390f35b6101916104d2565b60405161019e9190612bd4565b60405180910390f35b6101c160048036038101906101bc9190612250565b61052a565b005b6101dd60048036038101906101d8919061257c565b6105cb565b6040516101ea9190612bd4565b60405180910390f35b61020d60048036038101906102089190612441565b6106e4565b005b610217610789565b005b610221610811565b60405161022e9190612af7565b60405180910390f35b610251600480360381019061024c91906124fc565b61083b565b005b61026d600480360381019061026891906123b6565b610851565b005b6102896004803603810190610284919061264e565b6108dd565b005b6102a560048036038101906102a09190612210565b610973565b6040516102b29190612c2d565b60405180910390f35b6102d560048036038101906102d0919061231f565b610a07565b005b6102f160048036038101906102ec91906121e3565b610aa8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035b90612caa565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610497575061049682610ba0565b5b9050919050565b606060046104ab83610c0a565b6040516020016104bc929190612ac8565b6040516020818303038152906040529050919050565b6060600580548060200260200160405190810160405280929190818152602001828054801561052057602002820191906000526020600020905b81548152602001906001019080831161050c575b5050505050905090565b610532610d6b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610578575061057785610572610d6b565b610973565b5b6105b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ae90612d4a565b60405180910390fd5b6105c48585858585610d73565b5050505050565b60608151835114610611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060890612dea565b60405180910390fd5b6000835167ffffffffffffffff81111561062e5761062d613308565b5b60405190808252806020026020018201604052801561065c5781602001602082028036833780820191505090505b50905060005b84518110156106d9576106a9858281518110610681576106806132d9565b5b602002602001015185838151811061069c5761069b6132d9565b5b60200260200101516102f3565b8282815181106106bc576106bb6132d9565b5b602002602001018181525050806106d2906131d2565b9050610662565b508091505092915050565b6106ec610d6b565b73ffffffffffffffffffffffffffffffffffffffff1661070a610811565b73ffffffffffffffffffffffffffffffffffffffff1614610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612daa565b60405180910390fd5b61076c84848484611087565b8260059080519060200190610782929190611e6e565b5050505050565b610791610d6b565b73ffffffffffffffffffffffffffffffffffffffff166107af610811565b73ffffffffffffffffffffffffffffffffffffffff1614610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90612daa565b60405180910390fd5b61080f60006112a5565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61084d610846610d6b565b838361136b565b5050565b610859610d6b565b73ffffffffffffffffffffffffffffffffffffffff16610877610811565b73ffffffffffffffffffffffffffffffffffffffff16146108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490612daa565b60405180910390fd5b6108d88383836114d8565b505050565b6108e5610d6b565b73ffffffffffffffffffffffffffffffffffffffff16610903610811565b73ffffffffffffffffffffffffffffffffffffffff1614610959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095090612daa565b60405180910390fd5b806004908051906020019061096f929190611ebb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a0f610d6b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a555750610a5485610a4f610d6b565b610973565b5b610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90612d0a565b60405180910390fd5b610aa18585858585611789565b5050505050565b610ab0610d6b565b73ffffffffffffffffffffffffffffffffffffffff16610ace610811565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90612daa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90612cca565b60405180910390fd5b610b9d816112a5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610c52576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610d66565b600082905060005b60008214610c84578080610c6d906131d2565b915050600a82610c7d9190613054565b9150610c5a565b60008167ffffffffffffffff811115610ca057610c9f613308565b5b6040519080825280601f01601f191660200182016040528015610cd25781602001600182028036833780820191505090505b5090505b60008514610d5f57600182610ceb9190613085565b9150600a85610cfa919061321b565b6030610d069190612ffe565b60f81b818381518110610d1c57610d1b6132d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610d589190613054565b9450610cd6565b8093505050505b919050565b600033905090565b8151835114610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae90612e0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90612d2a565b60405180910390fd5b6000610e31610d6b565b9050610e41818787878787611a0b565b60005b8451811015610ff2576000858281518110610e6257610e616132d9565b5b602002602001015190506000858381518110610e8157610e806132d9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990612d8a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fd79190612ffe565b9250508190555050505080610feb906131d2565b9050610e44565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611069929190612bf6565b60405180910390a461107f818787878787611a13565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90612e2a565b60405180910390fd5b815183511461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290612e0a565b60405180910390fd5b6000611145610d6b565b905061115681600087878787611a0b565b60005b845181101561120f57838181518110611175576111746132d9565b5b6020026020010151600080878481518110611193576111926132d9565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f59190612ffe565b925050819055508080611207906131d2565b915050611159565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611287929190612bf6565b60405180910390a461129e81600087878787611a13565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190612dca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114cb9190612c2d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90612d6a565b60405180910390fd5b805182511461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390612e0a565b60405180910390fd5b6000611596610d6b565b90506115b681856000868660405180602001604052806000815250611a0b565b60005b83518110156117035760008482815181106115d7576115d66132d9565b5b6020026020010151905060008483815181106115f6576115f56132d9565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e90612cea565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116fb906131d2565b9150506115b9565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161177b929190612bf6565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090612d2a565b60405180910390fd5b6000611803610d6b565b905061182381878761181488611bfa565b61181d88611bfa565b87611a0b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190612d8a565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196f9190612ffe565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516119ec929190612e65565b60405180910390a4611a02828888888888611c74565b50505050505050565b505050505050565b611a328473ffffffffffffffffffffffffffffffffffffffff16611e5b565b15611bf2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611a78959493929190612b12565b602060405180830381600087803b158015611a9257600080fd5b505af1925050508015611ac357506040513d601f19601f82011682018060405250810190611ac09190612621565b60015b611b6957611acf613337565b806308c379a01415611b2c5750611ae4613834565b80611aef5750611b2e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239190612c48565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090612c6a565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790612c8a565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611c1957611c18613308565b5b604051908082528060200260200182016040528015611c475781602001602082028036833780820191505090505b5090508281600081518110611c5f57611c5e6132d9565b5b60200260200101818152505080915050919050565b611c938473ffffffffffffffffffffffffffffffffffffffff16611e5b565b15611e53578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611cd9959493929190612b7a565b602060405180830381600087803b158015611cf357600080fd5b505af1925050508015611d2457506040513d601f19601f82011682018060405250810190611d219190612621565b60015b611dca57611d30613337565b806308c379a01415611d8d5750611d45613834565b80611d505750611d8f565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849190612c48565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190612c6a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890612c8a565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215611eaa579160200282015b82811115611ea9578251825591602001919060010190611e8e565b5b509050611eb79190611f41565b5090565b828054611ec79061316f565b90600052602060002090601f016020900481019282611ee95760008555611f30565b82601f10611f0257805160ff1916838001178555611f30565b82800160010185558215611f30579182015b82811115611f2f578251825591602001919060010190611f14565b5b509050611f3d9190611f41565b5090565b5b80821115611f5a576000816000905550600101611f42565b5090565b6000611f71611f6c84612eb3565b612e8e565b90508083825260208201905082856020860282011115611f9457611f9361335e565b5b60005b85811015611fc45781611faa88826120c2565b845260208401935060208301925050600181019050611f97565b5050509392505050565b6000611fe1611fdc84612edf565b612e8e565b905080838252602082019050828560208602820111156120045761200361335e565b5b60005b85811015612034578161201a88826121ce565b845260208401935060208301925050600181019050612007565b5050509392505050565b600061205161204c84612f0b565b612e8e565b90508281526020810184848401111561206d5761206c613363565b5b61207884828561312d565b509392505050565b600061209361208e84612f3c565b612e8e565b9050828152602081018484840111156120af576120ae613363565b5b6120ba84828561312d565b509392505050565b6000813590506120d1816138ca565b92915050565b600082601f8301126120ec576120eb613359565b5b81356120fc848260208601611f5e565b91505092915050565b600082601f83011261211a57612119613359565b5b813561212a848260208601611fce565b91505092915050565b600081359050612142816138e1565b92915050565b600081359050612157816138f8565b92915050565b60008151905061216c816138f8565b92915050565b600082601f83011261218757612186613359565b5b813561219784826020860161203e565b91505092915050565b600082601f8301126121b5576121b4613359565b5b81356121c5848260208601612080565b91505092915050565b6000813590506121dd8161390f565b92915050565b6000602082840312156121f9576121f861336d565b5b6000612207848285016120c2565b91505092915050565b600080604083850312156122275761222661336d565b5b6000612235858286016120c2565b9250506020612246858286016120c2565b9150509250929050565b600080600080600060a0868803121561226c5761226b61336d565b5b600061227a888289016120c2565b955050602061228b888289016120c2565b945050604086013567ffffffffffffffff8111156122ac576122ab613368565b5b6122b888828901612105565b935050606086013567ffffffffffffffff8111156122d9576122d8613368565b5b6122e588828901612105565b925050608086013567ffffffffffffffff81111561230657612305613368565b5b61231288828901612172565b9150509295509295909350565b600080600080600060a0868803121561233b5761233a61336d565b5b6000612349888289016120c2565b955050602061235a888289016120c2565b945050604061236b888289016121ce565b935050606061237c888289016121ce565b925050608086013567ffffffffffffffff81111561239d5761239c613368565b5b6123a988828901612172565b9150509295509295909350565b6000806000606084860312156123cf576123ce61336d565b5b60006123dd868287016120c2565b935050602084013567ffffffffffffffff8111156123fe576123fd613368565b5b61240a86828701612105565b925050604084013567ffffffffffffffff81111561242b5761242a613368565b5b61243786828701612105565b9150509250925092565b6000806000806080858703121561245b5761245a61336d565b5b6000612469878288016120c2565b945050602085013567ffffffffffffffff81111561248a57612489613368565b5b61249687828801612105565b935050604085013567ffffffffffffffff8111156124b7576124b6613368565b5b6124c387828801612105565b925050606085013567ffffffffffffffff8111156124e4576124e3613368565b5b6124f087828801612172565b91505092959194509250565b600080604083850312156125135761251261336d565b5b6000612521858286016120c2565b925050602061253285828601612133565b9150509250929050565b600080604083850312156125535761255261336d565b5b6000612561858286016120c2565b9250506020612572858286016121ce565b9150509250929050565b600080604083850312156125935761259261336d565b5b600083013567ffffffffffffffff8111156125b1576125b0613368565b5b6125bd858286016120d7565b925050602083013567ffffffffffffffff8111156125de576125dd613368565b5b6125ea85828601612105565b9150509250929050565b60006020828403121561260a5761260961336d565b5b600061261884828501612148565b91505092915050565b6000602082840312156126375761263661336d565b5b60006126458482850161215d565b91505092915050565b6000602082840312156126645761266361336d565b5b600082013567ffffffffffffffff81111561268257612681613368565b5b61268e848285016121a0565b91505092915050565b6000602082840312156126ad576126ac61336d565b5b60006126bb848285016121ce565b91505092915050565b60006126d08383612aaa565b60208301905092915050565b6126e5816130b9565b82525050565b60006126f682612f92565b6127008185612fc0565b935061270b83612f6d565b8060005b8381101561273c57815161272388826126c4565b975061272e83612fb3565b92505060018101905061270f565b5085935050505092915050565b612752816130cb565b82525050565b600061276382612f9d565b61276d8185612fd1565b935061277d81856020860161313c565b61278681613372565b840191505092915050565b600061279c82612fa8565b6127a68185612fe2565b93506127b681856020860161313c565b6127bf81613372565b840191505092915050565b60006127d582612fa8565b6127df8185612ff3565b93506127ef81856020860161313c565b80840191505092915050565b600081546128088161316f565b6128128186612ff3565b9450600182166000811461282d576001811461283e57612871565b60ff19831686528186019350612871565b61284785612f7d565b60005b838110156128695781548189015260018201915060208101905061284a565b838801955050505b50505092915050565b6000612887603483612fe2565b915061289282613390565b604082019050919050565b60006128aa602883612fe2565b91506128b5826133df565b604082019050919050565b60006128cd602b83612fe2565b91506128d88261342e565b604082019050919050565b60006128f0602683612fe2565b91506128fb8261347d565b604082019050919050565b6000612913602483612fe2565b915061291e826134cc565b604082019050919050565b6000612936602983612fe2565b91506129418261351b565b604082019050919050565b6000612959602583612fe2565b91506129648261356a565b604082019050919050565b600061297c603283612fe2565b9150612987826135b9565b604082019050919050565b600061299f602383612fe2565b91506129aa82613608565b604082019050919050565b60006129c2602a83612fe2565b91506129cd82613657565b604082019050919050565b60006129e5600583612ff3565b91506129f0826136a6565b600582019050919050565b6000612a08602083612fe2565b9150612a13826136cf565b602082019050919050565b6000612a2b602983612fe2565b9150612a36826136f8565b604082019050919050565b6000612a4e602983612fe2565b9150612a5982613747565b604082019050919050565b6000612a71602883612fe2565b9150612a7c82613796565b604082019050919050565b6000612a94602183612fe2565b9150612a9f826137e5565b604082019050919050565b612ab381613123565b82525050565b612ac281613123565b82525050565b6000612ad482856127fb565b9150612ae082846127ca565b9150612aeb826129d8565b91508190509392505050565b6000602082019050612b0c60008301846126dc565b92915050565b600060a082019050612b2760008301886126dc565b612b3460208301876126dc565b8181036040830152612b4681866126eb565b90508181036060830152612b5a81856126eb565b90508181036080830152612b6e8184612758565b90509695505050505050565b600060a082019050612b8f60008301886126dc565b612b9c60208301876126dc565b612ba96040830186612ab9565b612bb66060830185612ab9565b8181036080830152612bc88184612758565b90509695505050505050565b60006020820190508181036000830152612bee81846126eb565b905092915050565b60006040820190508181036000830152612c1081856126eb565b90508181036020830152612c2481846126eb565b90509392505050565b6000602082019050612c426000830184612749565b92915050565b60006020820190508181036000830152612c628184612791565b905092915050565b60006020820190508181036000830152612c838161287a565b9050919050565b60006020820190508181036000830152612ca38161289d565b9050919050565b60006020820190508181036000830152612cc3816128c0565b9050919050565b60006020820190508181036000830152612ce3816128e3565b9050919050565b60006020820190508181036000830152612d0381612906565b9050919050565b60006020820190508181036000830152612d2381612929565b9050919050565b60006020820190508181036000830152612d438161294c565b9050919050565b60006020820190508181036000830152612d638161296f565b9050919050565b60006020820190508181036000830152612d8381612992565b9050919050565b60006020820190508181036000830152612da3816129b5565b9050919050565b60006020820190508181036000830152612dc3816129fb565b9050919050565b60006020820190508181036000830152612de381612a1e565b9050919050565b60006020820190508181036000830152612e0381612a41565b9050919050565b60006020820190508181036000830152612e2381612a64565b9050919050565b60006020820190508181036000830152612e4381612a87565b9050919050565b6000602082019050612e5f6000830184612ab9565b92915050565b6000604082019050612e7a6000830185612ab9565b612e876020830184612ab9565b9392505050565b6000612e98612ea9565b9050612ea482826131a1565b919050565b6000604051905090565b600067ffffffffffffffff821115612ece57612ecd613308565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612efa57612ef9613308565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612f2657612f25613308565b5b612f2f82613372565b9050602081019050919050565b600067ffffffffffffffff821115612f5757612f56613308565b5b612f6082613372565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061300982613123565b915061301483613123565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130495761304861324c565b5b828201905092915050565b600061305f82613123565b915061306a83613123565b92508261307a5761307961327b565b5b828204905092915050565b600061309082613123565b915061309b83613123565b9250828210156130ae576130ad61324c565b5b828203905092915050565b60006130c482613103565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561315a57808201518184015260208101905061313f565b83811115613169576000848401525b50505050565b6000600282049050600182168061318757607f821691505b6020821081141561319b5761319a6132aa565b5b50919050565b6131aa82613372565b810181811067ffffffffffffffff821117156131c9576131c8613308565b5b80604052505050565b60006131dd82613123565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132105761320f61324c565b5b600182019050919050565b600061322682613123565b915061323183613123565b9250826132415761324061327b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156133565760046000803e613353600051613383565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613844576138c7565b61384c612ea9565b60043d036004823e80513d602482011167ffffffffffffffff821117156138745750506138c7565b808201805167ffffffffffffffff81111561389257505050506138c7565b80602083010160043d0385018111156138af5750505050506138c7565b6138be826020018501866131a1565b82955050505050505b90565b6138d3816130b9565b81146138de57600080fd5b50565b6138ea816130cb565b81146138f557600080fd5b50565b613901816130d7565b811461390c57600080fd5b50565b61391881613123565b811461392357600080fd5b5056fea264697066735822122078d675c9f71328b23fbb56133d7f6a80a4301965bce8b84008d74074ce096e9b64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f45760003560e01c8063715018a611610097578063b424d09b11610066578063b424d09b1461026f578063e985e9c51461028b578063f242432a146102bb578063f2fde38b146102d7576100f4565b8063715018a61461020f5780638da5cb5b14610219578063a22cb46514610237578063a644931914610253576100f4565b80631540d671116100d35780631540d671146101895780632eb2c2d6146101a75780634e1273f4146101c35780635885b046146101f3576100f4565b8062fdd58e146100f957806301ffc9a7146101295780630e89341c14610159575b600080fd5b610113600480360381019061010e919061253c565b6102f3565b6040516101209190612e4a565b60405180910390f35b610143600480360381019061013e91906125f4565b6103bc565b6040516101509190612c2d565b60405180910390f35b610173600480360381019061016e9190612697565b61049e565b6040516101809190612c48565b60405180910390f35b6101916104d2565b60405161019e9190612bd4565b60405180910390f35b6101c160048036038101906101bc9190612250565b61052a565b005b6101dd60048036038101906101d8919061257c565b6105cb565b6040516101ea9190612bd4565b60405180910390f35b61020d60048036038101906102089190612441565b6106e4565b005b610217610789565b005b610221610811565b60405161022e9190612af7565b60405180910390f35b610251600480360381019061024c91906124fc565b61083b565b005b61026d600480360381019061026891906123b6565b610851565b005b6102896004803603810190610284919061264e565b6108dd565b005b6102a560048036038101906102a09190612210565b610973565b6040516102b29190612c2d565b60405180910390f35b6102d560048036038101906102d0919061231f565b610a07565b005b6102f160048036038101906102ec91906121e3565b610aa8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035b90612caa565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061048757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610497575061049682610ba0565b5b9050919050565b606060046104ab83610c0a565b6040516020016104bc929190612ac8565b6040516020818303038152906040529050919050565b6060600580548060200260200160405190810160405280929190818152602001828054801561052057602002820191906000526020600020905b81548152602001906001019080831161050c575b5050505050905090565b610532610d6b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610578575061057785610572610d6b565b610973565b5b6105b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ae90612d4a565b60405180910390fd5b6105c48585858585610d73565b5050505050565b60608151835114610611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060890612dea565b60405180910390fd5b6000835167ffffffffffffffff81111561062e5761062d613308565b5b60405190808252806020026020018201604052801561065c5781602001602082028036833780820191505090505b50905060005b84518110156106d9576106a9858281518110610681576106806132d9565b5b602002602001015185838151811061069c5761069b6132d9565b5b60200260200101516102f3565b8282815181106106bc576106bb6132d9565b5b602002602001018181525050806106d2906131d2565b9050610662565b508091505092915050565b6106ec610d6b565b73ffffffffffffffffffffffffffffffffffffffff1661070a610811565b73ffffffffffffffffffffffffffffffffffffffff1614610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612daa565b60405180910390fd5b61076c84848484611087565b8260059080519060200190610782929190611e6e565b5050505050565b610791610d6b565b73ffffffffffffffffffffffffffffffffffffffff166107af610811565b73ffffffffffffffffffffffffffffffffffffffff1614610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90612daa565b60405180910390fd5b61080f60006112a5565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61084d610846610d6b565b838361136b565b5050565b610859610d6b565b73ffffffffffffffffffffffffffffffffffffffff16610877610811565b73ffffffffffffffffffffffffffffffffffffffff16146108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490612daa565b60405180910390fd5b6108d88383836114d8565b505050565b6108e5610d6b565b73ffffffffffffffffffffffffffffffffffffffff16610903610811565b73ffffffffffffffffffffffffffffffffffffffff1614610959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095090612daa565b60405180910390fd5b806004908051906020019061096f929190611ebb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a0f610d6b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610a555750610a5485610a4f610d6b565b610973565b5b610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b90612d0a565b60405180910390fd5b610aa18585858585611789565b5050505050565b610ab0610d6b565b73ffffffffffffffffffffffffffffffffffffffff16610ace610811565b73ffffffffffffffffffffffffffffffffffffffff1614610b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1b90612daa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90612cca565b60405180910390fd5b610b9d816112a5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606000821415610c52576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610d66565b600082905060005b60008214610c84578080610c6d906131d2565b915050600a82610c7d9190613054565b9150610c5a565b60008167ffffffffffffffff811115610ca057610c9f613308565b5b6040519080825280601f01601f191660200182016040528015610cd25781602001600182028036833780820191505090505b5090505b60008514610d5f57600182610ceb9190613085565b9150600a85610cfa919061321b565b6030610d069190612ffe565b60f81b818381518110610d1c57610d1b6132d9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85610d589190613054565b9450610cd6565b8093505050505b919050565b600033905090565b8151835114610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae90612e0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90612d2a565b60405180910390fd5b6000610e31610d6b565b9050610e41818787878787611a0b565b60005b8451811015610ff2576000858281518110610e6257610e616132d9565b5b602002602001015190506000858381518110610e8157610e806132d9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1990612d8a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fd79190612ffe565b9250508190555050505080610feb906131d2565b9050610e44565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611069929190612bf6565b60405180910390a461107f818787878787611a13565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90612e2a565b60405180910390fd5b815183511461113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290612e0a565b60405180910390fd5b6000611145610d6b565b905061115681600087878787611a0b565b60005b845181101561120f57838181518110611175576111746132d9565b5b6020026020010151600080878481518110611193576111926132d9565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111f59190612ffe565b925050819055508080611207906131d2565b915050611159565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611287929190612bf6565b60405180910390a461129e81600087878787611a13565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190612dca565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114cb9190612c2d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f90612d6a565b60405180910390fd5b805182511461158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390612e0a565b60405180910390fd5b6000611596610d6b565b90506115b681856000868660405180602001604052806000815250611a0b565b60005b83518110156117035760008482815181106115d7576115d66132d9565b5b6020026020010151905060008483815181106115f6576115f56132d9565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e90612cea565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116fb906131d2565b9150506115b9565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161177b929190612bf6565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090612d2a565b60405180910390fd5b6000611803610d6b565b905061182381878761181488611bfa565b61181d88611bfa565b87611a0b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156118ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b190612d8a565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461196f9190612ffe565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516119ec929190612e65565b60405180910390a4611a02828888888888611c74565b50505050505050565b505050505050565b611a328473ffffffffffffffffffffffffffffffffffffffff16611e5b565b15611bf2578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611a78959493929190612b12565b602060405180830381600087803b158015611a9257600080fd5b505af1925050508015611ac357506040513d601f19601f82011682018060405250810190611ac09190612621565b60015b611b6957611acf613337565b806308c379a01415611b2c5750611ae4613834565b80611aef5750611b2e565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b239190612c48565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090612c6a565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790612c8a565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611c1957611c18613308565b5b604051908082528060200260200182016040528015611c475781602001602082028036833780820191505090505b5090508281600081518110611c5f57611c5e6132d9565b5b60200260200101818152505080915050919050565b611c938473ffffffffffffffffffffffffffffffffffffffff16611e5b565b15611e53578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611cd9959493929190612b7a565b602060405180830381600087803b158015611cf357600080fd5b505af1925050508015611d2457506040513d601f19601f82011682018060405250810190611d219190612621565b60015b611dca57611d30613337565b806308c379a01415611d8d5750611d45613834565b80611d505750611d8f565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849190612c48565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190612c6a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890612c8a565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215611eaa579160200282015b82811115611ea9578251825591602001919060010190611e8e565b5b509050611eb79190611f41565b5090565b828054611ec79061316f565b90600052602060002090601f016020900481019282611ee95760008555611f30565b82601f10611f0257805160ff1916838001178555611f30565b82800160010185558215611f30579182015b82811115611f2f578251825591602001919060010190611f14565b5b509050611f3d9190611f41565b5090565b5b80821115611f5a576000816000905550600101611f42565b5090565b6000611f71611f6c84612eb3565b612e8e565b90508083825260208201905082856020860282011115611f9457611f9361335e565b5b60005b85811015611fc45781611faa88826120c2565b845260208401935060208301925050600181019050611f97565b5050509392505050565b6000611fe1611fdc84612edf565b612e8e565b905080838252602082019050828560208602820111156120045761200361335e565b5b60005b85811015612034578161201a88826121ce565b845260208401935060208301925050600181019050612007565b5050509392505050565b600061205161204c84612f0b565b612e8e565b90508281526020810184848401111561206d5761206c613363565b5b61207884828561312d565b509392505050565b600061209361208e84612f3c565b612e8e565b9050828152602081018484840111156120af576120ae613363565b5b6120ba84828561312d565b509392505050565b6000813590506120d1816138ca565b92915050565b600082601f8301126120ec576120eb613359565b5b81356120fc848260208601611f5e565b91505092915050565b600082601f83011261211a57612119613359565b5b813561212a848260208601611fce565b91505092915050565b600081359050612142816138e1565b92915050565b600081359050612157816138f8565b92915050565b60008151905061216c816138f8565b92915050565b600082601f83011261218757612186613359565b5b813561219784826020860161203e565b91505092915050565b600082601f8301126121b5576121b4613359565b5b81356121c5848260208601612080565b91505092915050565b6000813590506121dd8161390f565b92915050565b6000602082840312156121f9576121f861336d565b5b6000612207848285016120c2565b91505092915050565b600080604083850312156122275761222661336d565b5b6000612235858286016120c2565b9250506020612246858286016120c2565b9150509250929050565b600080600080600060a0868803121561226c5761226b61336d565b5b600061227a888289016120c2565b955050602061228b888289016120c2565b945050604086013567ffffffffffffffff8111156122ac576122ab613368565b5b6122b888828901612105565b935050606086013567ffffffffffffffff8111156122d9576122d8613368565b5b6122e588828901612105565b925050608086013567ffffffffffffffff81111561230657612305613368565b5b61231288828901612172565b9150509295509295909350565b600080600080600060a0868803121561233b5761233a61336d565b5b6000612349888289016120c2565b955050602061235a888289016120c2565b945050604061236b888289016121ce565b935050606061237c888289016121ce565b925050608086013567ffffffffffffffff81111561239d5761239c613368565b5b6123a988828901612172565b9150509295509295909350565b6000806000606084860312156123cf576123ce61336d565b5b60006123dd868287016120c2565b935050602084013567ffffffffffffffff8111156123fe576123fd613368565b5b61240a86828701612105565b925050604084013567ffffffffffffffff81111561242b5761242a613368565b5b61243786828701612105565b9150509250925092565b6000806000806080858703121561245b5761245a61336d565b5b6000612469878288016120c2565b945050602085013567ffffffffffffffff81111561248a57612489613368565b5b61249687828801612105565b935050604085013567ffffffffffffffff8111156124b7576124b6613368565b5b6124c387828801612105565b925050606085013567ffffffffffffffff8111156124e4576124e3613368565b5b6124f087828801612172565b91505092959194509250565b600080604083850312156125135761251261336d565b5b6000612521858286016120c2565b925050602061253285828601612133565b9150509250929050565b600080604083850312156125535761255261336d565b5b6000612561858286016120c2565b9250506020612572858286016121ce565b9150509250929050565b600080604083850312156125935761259261336d565b5b600083013567ffffffffffffffff8111156125b1576125b0613368565b5b6125bd858286016120d7565b925050602083013567ffffffffffffffff8111156125de576125dd613368565b5b6125ea85828601612105565b9150509250929050565b60006020828403121561260a5761260961336d565b5b600061261884828501612148565b91505092915050565b6000602082840312156126375761263661336d565b5b60006126458482850161215d565b91505092915050565b6000602082840312156126645761266361336d565b5b600082013567ffffffffffffffff81111561268257612681613368565b5b61268e848285016121a0565b91505092915050565b6000602082840312156126ad576126ac61336d565b5b60006126bb848285016121ce565b91505092915050565b60006126d08383612aaa565b60208301905092915050565b6126e5816130b9565b82525050565b60006126f682612f92565b6127008185612fc0565b935061270b83612f6d565b8060005b8381101561273c57815161272388826126c4565b975061272e83612fb3565b92505060018101905061270f565b5085935050505092915050565b612752816130cb565b82525050565b600061276382612f9d565b61276d8185612fd1565b935061277d81856020860161313c565b61278681613372565b840191505092915050565b600061279c82612fa8565b6127a68185612fe2565b93506127b681856020860161313c565b6127bf81613372565b840191505092915050565b60006127d582612fa8565b6127df8185612ff3565b93506127ef81856020860161313c565b80840191505092915050565b600081546128088161316f565b6128128186612ff3565b9450600182166000811461282d576001811461283e57612871565b60ff19831686528186019350612871565b61284785612f7d565b60005b838110156128695781548189015260018201915060208101905061284a565b838801955050505b50505092915050565b6000612887603483612fe2565b915061289282613390565b604082019050919050565b60006128aa602883612fe2565b91506128b5826133df565b604082019050919050565b60006128cd602b83612fe2565b91506128d88261342e565b604082019050919050565b60006128f0602683612fe2565b91506128fb8261347d565b604082019050919050565b6000612913602483612fe2565b915061291e826134cc565b604082019050919050565b6000612936602983612fe2565b91506129418261351b565b604082019050919050565b6000612959602583612fe2565b91506129648261356a565b604082019050919050565b600061297c603283612fe2565b9150612987826135b9565b604082019050919050565b600061299f602383612fe2565b91506129aa82613608565b604082019050919050565b60006129c2602a83612fe2565b91506129cd82613657565b604082019050919050565b60006129e5600583612ff3565b91506129f0826136a6565b600582019050919050565b6000612a08602083612fe2565b9150612a13826136cf565b602082019050919050565b6000612a2b602983612fe2565b9150612a36826136f8565b604082019050919050565b6000612a4e602983612fe2565b9150612a5982613747565b604082019050919050565b6000612a71602883612fe2565b9150612a7c82613796565b604082019050919050565b6000612a94602183612fe2565b9150612a9f826137e5565b604082019050919050565b612ab381613123565b82525050565b612ac281613123565b82525050565b6000612ad482856127fb565b9150612ae082846127ca565b9150612aeb826129d8565b91508190509392505050565b6000602082019050612b0c60008301846126dc565b92915050565b600060a082019050612b2760008301886126dc565b612b3460208301876126dc565b8181036040830152612b4681866126eb565b90508181036060830152612b5a81856126eb565b90508181036080830152612b6e8184612758565b90509695505050505050565b600060a082019050612b8f60008301886126dc565b612b9c60208301876126dc565b612ba96040830186612ab9565b612bb66060830185612ab9565b8181036080830152612bc88184612758565b90509695505050505050565b60006020820190508181036000830152612bee81846126eb565b905092915050565b60006040820190508181036000830152612c1081856126eb565b90508181036020830152612c2481846126eb565b90509392505050565b6000602082019050612c426000830184612749565b92915050565b60006020820190508181036000830152612c628184612791565b905092915050565b60006020820190508181036000830152612c838161287a565b9050919050565b60006020820190508181036000830152612ca38161289d565b9050919050565b60006020820190508181036000830152612cc3816128c0565b9050919050565b60006020820190508181036000830152612ce3816128e3565b9050919050565b60006020820190508181036000830152612d0381612906565b9050919050565b60006020820190508181036000830152612d2381612929565b9050919050565b60006020820190508181036000830152612d438161294c565b9050919050565b60006020820190508181036000830152612d638161296f565b9050919050565b60006020820190508181036000830152612d8381612992565b9050919050565b60006020820190508181036000830152612da3816129b5565b9050919050565b60006020820190508181036000830152612dc3816129fb565b9050919050565b60006020820190508181036000830152612de381612a1e565b9050919050565b60006020820190508181036000830152612e0381612a41565b9050919050565b60006020820190508181036000830152612e2381612a64565b9050919050565b60006020820190508181036000830152612e4381612a87565b9050919050565b6000602082019050612e5f6000830184612ab9565b92915050565b6000604082019050612e7a6000830185612ab9565b612e876020830184612ab9565b9392505050565b6000612e98612ea9565b9050612ea482826131a1565b919050565b6000604051905090565b600067ffffffffffffffff821115612ece57612ecd613308565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612efa57612ef9613308565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612f2657612f25613308565b5b612f2f82613372565b9050602081019050919050565b600067ffffffffffffffff821115612f5757612f56613308565b5b612f6082613372565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061300982613123565b915061301483613123565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130495761304861324c565b5b828201905092915050565b600061305f82613123565b915061306a83613123565b92508261307a5761307961327b565b5b828204905092915050565b600061309082613123565b915061309b83613123565b9250828210156130ae576130ad61324c565b5b828203905092915050565b60006130c482613103565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561315a57808201518184015260208101905061313f565b83811115613169576000848401525b50505050565b6000600282049050600182168061318757607f821691505b6020821081141561319b5761319a6132aa565b5b50919050565b6131aa82613372565b810181811067ffffffffffffffff821117156131c9576131c8613308565b5b80604052505050565b60006131dd82613123565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156132105761320f61324c565b5b600182019050919050565b600061322682613123565b915061323183613123565b9250826132415761324061327b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156133565760046000803e613353600051613383565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613844576138c7565b61384c612ea9565b60043d036004823e80513d602482011167ffffffffffffffff821117156138745750506138c7565b808201805167ffffffffffffffff81111561389257505050506138c7565b80602083010160043d0385018111156138af5750505050506138c7565b6138be826020018501866131a1565b82955050505050505b90565b6138d3816130b9565b81146138de57600080fd5b50565b6138ea816130cb565b81146138f557600080fd5b50565b613901816130d7565b811461390c57600080fd5b50565b61391881613123565b811461392357600080fd5b5056fea264697066735822122078d675c9f71328b23fbb56133d7f6a80a4301965bce8b84008d74074ce096e9b64736f6c63430008070033

Deployed Bytecode Sourcemap

38672:991:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22572:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21595:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39482:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39380:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24511:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22969:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38986:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37788:103;;;:::i;:::-;;37137:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23566:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39206:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38855:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23793:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24033:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38046:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22572:231;22658:7;22705:1;22686:21;;:7;:21;;;;22678:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22773:9;:13;22783:2;22773:13;;;;;;;;;;;:22;22787:7;22773:22;;;;;;;;;;;;;;;;22766:29;;22572:231;;;;:::o;21595:310::-;21697:4;21749:26;21734:41;;;:11;:41;;;;:110;;;;21807:37;21792:52;;;:11;:52;;;;21734:110;:163;;;;21861:36;21885:11;21861:23;:36::i;:::-;21734:163;21714:183;;21595:310;;;:::o;39482:175::-;39537:13;39599:17;39618:20;39635:2;39618:16;:20::i;:::-;39582:66;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39568:81;;39482:175;;;:::o;39380:94::-;39418:16;39459:7;39452:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39380:94;:::o;24511:442::-;24752:12;:10;:12::i;:::-;24744:20;;:4;:20;;;:60;;;;24768:36;24785:4;24791:12;:10;:12::i;:::-;24768:16;:36::i;:::-;24744:60;24722:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;24893:52;24916:4;24922:2;24926:3;24931:7;24940:4;24893:22;:52::i;:::-;24511:442;;;;;:::o;22969:524::-;23125:16;23186:3;:10;23167:8;:15;:29;23159:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23255:30;23302:8;:15;23288:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23255:63;;23336:9;23331:122;23355:8;:15;23351:1;:19;23331:122;;;23411:30;23421:8;23430:1;23421:11;;;;;;;;:::i;:::-;;;;;;;;23434:3;23438:1;23434:6;;;;;;;;:::i;:::-;;;;;;;;23411:9;:30::i;:::-;23392:13;23406:1;23392:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23372:3;;;;:::i;:::-;;;23331:122;;;;23472:13;23465:20;;;22969:524;;;;:::o;38986:208::-;37368:12;:10;:12::i;:::-;37357:23;;:7;:5;:7::i;:::-;:23;;;37349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39123:39:::1;39134:7;39143:3;39148:7;39157:4;39123:10;:39::i;:::-;39183:3;39173:7;:13;;;;;;;;;;;;:::i;:::-;;38986:208:::0;;;;:::o;37788:103::-;37368:12;:10;:12::i;:::-;37357:23;;:7;:5;:7::i;:::-;:23;;;37349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37853:30:::1;37880:1;37853:18;:30::i;:::-;37788:103::o:0;37137:87::-;37183:7;37210:6;;;;;;;;;;;37203:13;;37137:87;:::o;23566:155::-;23661:52;23680:12;:10;:12::i;:::-;23694:8;23704;23661:18;:52::i;:::-;23566:155;;:::o;39206:158::-;37368:12;:10;:12::i;:::-;37357:23;;:7;:5;:7::i;:::-;:23;;;37349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39323:33:::1;39334:7;39343:3;39348:7;39323:10;:33::i;:::-;39206:158:::0;;;:::o;38855:123::-;37368:12;:10;:12::i;:::-;37357:23;;:7;:5;:7::i;:::-;:23;;;37349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38962:8:::1;38942:17;:28;;;;;;;;;;;;:::i;:::-;;38855:123:::0;:::o;23793:168::-;23892:4;23916:18;:27;23935:7;23916:27;;;;;;;;;;;;;;;:37;23944:8;23916:37;;;;;;;;;;;;;;;;;;;;;;;;;23909:44;;23793:168;;;;:::o;24033:401::-;24249:12;:10;:12::i;:::-;24241:20;;:4;:20;;;:60;;;;24265:36;24282:4;24288:12;:10;:12::i;:::-;24265:16;:36::i;:::-;24241:60;24219:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24381:45;24399:4;24405:2;24409;24413:6;24421:4;24381:17;:45::i;:::-;24033:401;;;;;:::o;38046:201::-;37368:12;:10;:12::i;:::-;37357:23;;:7;:5;:7::i;:::-;:23;;;37349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38155:1:::1;38135:22;;:8;:22;;;;38127:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38211:28;38230:8;38211:18;:28::i;:::-;38046:201:::0;:::o;12057:157::-;12142:4;12181:25;12166:40;;;:11;:40;;;;12159:47;;12057:157;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;20304:98::-;20357:7;20384:10;20377:17;;20304:98;:::o;26595:1074::-;26822:7;:14;26808:3;:10;:28;26800:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26914:1;26900:16;;:2;:16;;;;26892:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:16;26990:12;:10;:12::i;:::-;26971:31;;27015:60;27036:8;27046:4;27052:2;27056:3;27061:7;27070:4;27015:20;:60::i;:::-;27093:9;27088:421;27112:3;:10;27108:1;:14;27088:421;;;27144:10;27157:3;27161:1;27157:6;;;;;;;;:::i;:::-;;;;;;;;27144:19;;27178:14;27195:7;27203:1;27195:10;;;;;;;;:::i;:::-;;;;;;;;27178:27;;27222:19;27244:9;:13;27254:2;27244:13;;;;;;;;;;;:19;27258:4;27244:19;;;;;;;;;;;;;;;;27222:41;;27301:6;27286:11;:21;;27278:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27434:6;27420:11;:20;27398:9;:13;27408:2;27398:13;;;;;;;;;;;:19;27412:4;27398:19;;;;;;;;;;;;;;;:42;;;;27491:6;27470:9;:13;27480:2;27470:13;;;;;;;;;;;:17;27484:2;27470:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27129:380;;;27124:3;;;;:::i;:::-;;;27088:421;;;;27556:2;27526:47;;27550:4;27526:47;;27540:8;27526:47;;;27560:3;27565:7;27526:47;;;;;;;:::i;:::-;;;;;;;;27586:75;27622:8;27632:4;27638:2;27642:3;27647:7;27656:4;27586:35;:75::i;:::-;26789:880;26595:1074;;;;;:::o;29912:735::-;30104:1;30090:16;;:2;:16;;;;30082:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30177:7;:14;30163:3;:10;:28;30155:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30249:16;30268:12;:10;:12::i;:::-;30249:31;;30293:66;30314:8;30332:1;30336:2;30340:3;30345:7;30354:4;30293:20;:66::i;:::-;30377:9;30372:103;30396:3;:10;30392:1;:14;30372:103;;;30453:7;30461:1;30453:10;;;;;;;;:::i;:::-;;;;;;;;30428:9;:17;30438:3;30442:1;30438:6;;;;;;;;:::i;:::-;;;;;;;;30428:17;;;;;;;;;;;:21;30446:2;30428:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30408:3;;;;;:::i;:::-;;;;30372:103;;;;30528:2;30492:53;;30524:1;30492:53;;30506:8;30492:53;;;30532:3;30537:7;30492:53;;;;;;;:::i;:::-;;;;;;;;30558:81;30594:8;30612:1;30616:2;30620:3;30625:7;30634:4;30558:35;:81::i;:::-;30071:576;29912:735;;;;:::o;38407:191::-;38481:16;38500:6;;;;;;;;;;;38481:25;;38526:8;38517:6;;:17;;;;;;;;;;;;;;;;;;38581:8;38550:40;;38571:8;38550:40;;;;;;;;;;;;38470:128;38407:191;:::o;32781:331::-;32936:8;32927:17;;:5;:17;;;;32919:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33039:8;33001:18;:25;33020:5;33001:25;;;;;;;;;;;;;;;:35;33027:8;33001:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33085:8;33063:41;;33078:5;33063:41;;;33095:8;33063:41;;;;;;:::i;:::-;;;;;;;;32781:331;;;:::o;31748:891::-;31916:1;31900:18;;:4;:18;;;;31892:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31991:7;:14;31977:3;:10;:28;31969:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32063:16;32082:12;:10;:12::i;:::-;32063:31;;32107:66;32128:8;32138:4;32152:1;32156:3;32161:7;32107:66;;;;;;;;;;;;:20;:66::i;:::-;32191:9;32186:373;32210:3;:10;32206:1;:14;32186:373;;;32242:10;32255:3;32259:1;32255:6;;;;;;;;:::i;:::-;;;;;;;;32242:19;;32276:14;32293:7;32301:1;32293:10;;;;;;;;:::i;:::-;;;;;;;;32276:27;;32320:19;32342:9;:13;32352:2;32342:13;;;;;;;;;;;:19;32356:4;32342:19;;;;;;;;;;;;;;;;32320:41;;32399:6;32384:11;:21;;32376:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32526:6;32512:11;:20;32490:9;:13;32500:2;32490:13;;;;;;;;;;;:19;32504:4;32490:19;;;;;;;;;;;;;;;:42;;;;32227:332;;;32222:3;;;;;:::i;:::-;;;;32186:373;;;;32614:1;32576:55;;32600:4;32576:55;;32590:8;32576:55;;;32618:3;32623:7;32576:55;;;;;;;:::i;:::-;;;;;;;;31881:758;31748:891;;;:::o;25417:820::-;25619:1;25605:16;;:2;:16;;;;25597:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25676:16;25695:12;:10;:12::i;:::-;25676:31;;25720:96;25741:8;25751:4;25757:2;25761:21;25779:2;25761:17;:21::i;:::-;25784:25;25802:6;25784:17;:25::i;:::-;25811:4;25720:20;:96::i;:::-;25829:19;25851:9;:13;25861:2;25851:13;;;;;;;;;;;:19;25865:4;25851:19;;;;;;;;;;;;;;;;25829:41;;25904:6;25889:11;:21;;25881:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26029:6;26015:11;:20;25993:9;:13;26003:2;25993:13;;;;;;;;;;;:19;26007:4;25993:19;;;;;;;;;;;;;;;:42;;;;26078:6;26057:9;:13;26067:2;26057:13;;;;;;;;;;;:17;26071:2;26057:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26133:2;26102:46;;26127:4;26102:46;;26117:8;26102:46;;;26137:2;26141:6;26102:46;;;;;;;:::i;:::-;;;;;;;;26161:68;26192:8;26202:4;26208:2;26212;26216:6;26224:4;26161:30;:68::i;:::-;25586:651;;25417:820;;;;;:::o;34068:221::-;;;;;;;:::o;35049:813::-;35289:15;:2;:13;;;:15::i;:::-;35285:570;;;35342:2;35325:43;;;35369:8;35379:4;35385:3;35390:7;35399:4;35325:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35321:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35717:6;35710:14;;;;;;;;;;;:::i;:::-;;;;;;;;35321:523;;;35766:62;;;;;;;;;;:::i;:::-;;;;;;;;35321:523;35498:48;;;35486:60;;;:8;:60;;;;35482:159;;35571:50;;;;;;;;;;:::i;:::-;;;;;;;;35482:159;35405:251;35285:570;35049:813;;;;;;:::o;35870:198::-;35936:16;35965:22;36004:1;35990:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35965:41;;36028:7;36017:5;36023:1;36017:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36055:5;36048:12;;;35870:198;;;:::o;34297:744::-;34512:15;:2;:13;;;:15::i;:::-;34508:526;;;34565:2;34548:38;;;34587:8;34597:4;34603:2;34607:6;34615:4;34548:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34544:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34896:6;34889:14;;;;;;;;;;;:::i;:::-;;;;;;;;34544:479;;;34945:62;;;;;;;;;;:::i;:::-;;;;;;;;34544:479;34682:43;;;34670:55;;;:8;:55;;;;34666:154;;34750:50;;;;;;;;;;:::i;:::-;;;;;;;;34666:154;34621:214;34508:526;34297:744;;;;;;:::o;2944:387::-;3004:4;3212:12;3279:7;3267:20;3259:28;;3322:1;3315:4;:8;3308:15;;;2944:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:1363::-;9168:6;9176;9184;9192;9241:3;9229:9;9220:7;9216:23;9212:33;9209:120;;;9248:79;;:::i;:::-;9209:120;9368:1;9393:53;9438:7;9429:6;9418:9;9414:22;9393:53;:::i;:::-;9383:63;;9339:117;9523:2;9512:9;9508:18;9495:32;9554:18;9546:6;9543:30;9540:117;;;9576:79;;:::i;:::-;9540:117;9681:78;9751:7;9742:6;9731:9;9727:22;9681:78;:::i;:::-;9671:88;;9466:303;9836:2;9825:9;9821:18;9808:32;9867:18;9859:6;9856:30;9853:117;;;9889:79;;:::i;:::-;9853:117;9994:78;10064:7;10055:6;10044:9;10040:22;9994:78;:::i;:::-;9984:88;;9779:303;10149:2;10138:9;10134:18;10121:32;10180:18;10172:6;10169:30;10166:117;;;10202:79;;:::i;:::-;10166:117;10307:62;10361:7;10352:6;10341:9;10337:22;10307:62;:::i;:::-;10297:72;;10092:287;9023:1363;;;;;;;:::o;10392:468::-;10457:6;10465;10514:2;10502:9;10493:7;10489:23;10485:32;10482:119;;;10520:79;;:::i;:::-;10482:119;10640:1;10665:53;10710:7;10701:6;10690:9;10686:22;10665:53;:::i;:::-;10655:63;;10611:117;10767:2;10793:50;10835:7;10826:6;10815:9;10811:22;10793:50;:::i;:::-;10783:60;;10738:115;10392:468;;;;;:::o;10866:474::-;10934:6;10942;10991:2;10979:9;10970:7;10966:23;10962:32;10959:119;;;10997:79;;:::i;:::-;10959:119;11117:1;11142:53;11187:7;11178:6;11167:9;11163:22;11142:53;:::i;:::-;11132:63;;11088:117;11244:2;11270:53;11315:7;11306:6;11295:9;11291:22;11270:53;:::i;:::-;11260:63;;11215:118;10866:474;;;;;:::o;11346:894::-;11464:6;11472;11521:2;11509:9;11500:7;11496:23;11492:32;11489:119;;;11527:79;;:::i;:::-;11489:119;11675:1;11664:9;11660:17;11647:31;11705:18;11697:6;11694:30;11691:117;;;11727:79;;:::i;:::-;11691:117;11832:78;11902:7;11893:6;11882:9;11878:22;11832:78;:::i;:::-;11822:88;;11618:302;11987:2;11976:9;11972:18;11959:32;12018:18;12010:6;12007:30;12004:117;;;12040:79;;:::i;:::-;12004:117;12145:78;12215:7;12206:6;12195:9;12191:22;12145:78;:::i;:::-;12135:88;;11930:303;11346:894;;;;;:::o;12246:327::-;12304:6;12353:2;12341:9;12332:7;12328:23;12324:32;12321:119;;;12359:79;;:::i;:::-;12321:119;12479:1;12504:52;12548:7;12539:6;12528:9;12524:22;12504:52;:::i;:::-;12494:62;;12450:116;12246:327;;;;:::o;12579:349::-;12648:6;12697:2;12685:9;12676:7;12672:23;12668:32;12665:119;;;12703:79;;:::i;:::-;12665:119;12823:1;12848:63;12903:7;12894:6;12883:9;12879:22;12848:63;:::i;:::-;12838:73;;12794:127;12579:349;;;;:::o;12934:509::-;13003:6;13052:2;13040:9;13031:7;13027:23;13023:32;13020:119;;;13058:79;;:::i;:::-;13020:119;13206:1;13195:9;13191:17;13178:31;13236:18;13228:6;13225:30;13222:117;;;13258:79;;:::i;:::-;13222:117;13363:63;13418:7;13409:6;13398:9;13394:22;13363:63;:::i;:::-;13353:73;;13149:287;12934:509;;;;:::o;13449:329::-;13508:6;13557:2;13545:9;13536:7;13532:23;13528:32;13525:119;;;13563:79;;:::i;:::-;13525:119;13683:1;13708:53;13753:7;13744:6;13733:9;13729:22;13708:53;:::i;:::-;13698:63;;13654:117;13449:329;;;;:::o;13784:179::-;13853:10;13874:46;13916:3;13908:6;13874:46;:::i;:::-;13952:4;13947:3;13943:14;13929:28;;13784:179;;;;:::o;13969:118::-;14056:24;14074:5;14056:24;:::i;:::-;14051:3;14044:37;13969:118;;:::o;14123:732::-;14242:3;14271:54;14319:5;14271:54;:::i;:::-;14341:86;14420:6;14415:3;14341:86;:::i;:::-;14334:93;;14451:56;14501:5;14451:56;:::i;:::-;14530:7;14561:1;14546:284;14571:6;14568:1;14565:13;14546:284;;;14647:6;14641:13;14674:63;14733:3;14718:13;14674:63;:::i;:::-;14667:70;;14760:60;14813:6;14760:60;:::i;:::-;14750:70;;14606:224;14593:1;14590;14586:9;14581:14;;14546:284;;;14550:14;14846:3;14839:10;;14247:608;;;14123:732;;;;:::o;14861:109::-;14942:21;14957:5;14942:21;:::i;:::-;14937:3;14930:34;14861:109;;:::o;14976:360::-;15062:3;15090:38;15122:5;15090:38;:::i;:::-;15144:70;15207:6;15202:3;15144:70;:::i;:::-;15137:77;;15223:52;15268:6;15263:3;15256:4;15249:5;15245:16;15223:52;:::i;:::-;15300:29;15322:6;15300:29;:::i;:::-;15295:3;15291:39;15284:46;;15066:270;14976:360;;;;:::o;15342:364::-;15430:3;15458:39;15491:5;15458:39;:::i;:::-;15513:71;15577:6;15572:3;15513:71;:::i;:::-;15506:78;;15593:52;15638:6;15633:3;15626:4;15619:5;15615:16;15593:52;:::i;:::-;15670:29;15692:6;15670:29;:::i;:::-;15665:3;15661:39;15654:46;;15434:272;15342:364;;;;:::o;15712:377::-;15818:3;15846:39;15879:5;15846:39;:::i;:::-;15901:89;15983:6;15978:3;15901:89;:::i;:::-;15894:96;;15999:52;16044:6;16039:3;16032:4;16025:5;16021:16;15999:52;:::i;:::-;16076:6;16071:3;16067:16;16060:23;;15822:267;15712:377;;;;:::o;16119:845::-;16222:3;16259:5;16253:12;16288:36;16314:9;16288:36;:::i;:::-;16340:89;16422:6;16417:3;16340:89;:::i;:::-;16333:96;;16460:1;16449:9;16445:17;16476:1;16471:137;;;;16622:1;16617:341;;;;16438:520;;16471:137;16555:4;16551:9;16540;16536:25;16531:3;16524:38;16591:6;16586:3;16582:16;16575:23;;16471:137;;16617:341;16684:38;16716:5;16684:38;:::i;:::-;16744:1;16758:154;16772:6;16769:1;16766:13;16758:154;;;16846:7;16840:14;16836:1;16831:3;16827:11;16820:35;16896:1;16887:7;16883:15;16872:26;;16794:4;16791:1;16787:12;16782:17;;16758:154;;;16941:6;16936:3;16932:16;16925:23;;16624:334;;16438:520;;16226:738;;16119:845;;;;:::o;16970:366::-;17112:3;17133:67;17197:2;17192:3;17133:67;:::i;:::-;17126:74;;17209:93;17298:3;17209:93;:::i;:::-;17327:2;17322:3;17318:12;17311:19;;16970:366;;;:::o;17342:::-;17484:3;17505:67;17569:2;17564:3;17505:67;:::i;:::-;17498:74;;17581:93;17670:3;17581:93;:::i;:::-;17699:2;17694:3;17690:12;17683:19;;17342:366;;;:::o;17714:::-;17856:3;17877:67;17941:2;17936:3;17877:67;:::i;:::-;17870:74;;17953:93;18042:3;17953:93;:::i;:::-;18071:2;18066:3;18062:12;18055:19;;17714:366;;;:::o;18086:::-;18228:3;18249:67;18313:2;18308:3;18249:67;:::i;:::-;18242:74;;18325:93;18414:3;18325:93;:::i;:::-;18443:2;18438:3;18434:12;18427:19;;18086:366;;;:::o;18458:::-;18600:3;18621:67;18685:2;18680:3;18621:67;:::i;:::-;18614:74;;18697:93;18786:3;18697:93;:::i;:::-;18815:2;18810:3;18806:12;18799:19;;18458:366;;;:::o;18830:::-;18972:3;18993:67;19057:2;19052:3;18993:67;:::i;:::-;18986:74;;19069:93;19158:3;19069:93;:::i;:::-;19187:2;19182:3;19178:12;19171:19;;18830:366;;;:::o;19202:::-;19344:3;19365:67;19429:2;19424:3;19365:67;:::i;:::-;19358:74;;19441:93;19530:3;19441:93;:::i;:::-;19559:2;19554:3;19550:12;19543:19;;19202:366;;;:::o;19574:::-;19716:3;19737:67;19801:2;19796:3;19737:67;:::i;:::-;19730:74;;19813:93;19902:3;19813:93;:::i;:::-;19931:2;19926:3;19922:12;19915:19;;19574:366;;;:::o;19946:::-;20088:3;20109:67;20173:2;20168:3;20109:67;:::i;:::-;20102:74;;20185:93;20274:3;20185:93;:::i;:::-;20303:2;20298:3;20294:12;20287:19;;19946:366;;;:::o;20318:::-;20460:3;20481:67;20545:2;20540:3;20481:67;:::i;:::-;20474:74;;20557:93;20646:3;20557:93;:::i;:::-;20675:2;20670:3;20666:12;20659:19;;20318:366;;;:::o;20690:400::-;20850:3;20871:84;20953:1;20948:3;20871:84;:::i;:::-;20864:91;;20964:93;21053:3;20964:93;:::i;:::-;21082:1;21077:3;21073:11;21066:18;;20690:400;;;:::o;21096:366::-;21238:3;21259:67;21323:2;21318:3;21259:67;:::i;:::-;21252:74;;21335:93;21424:3;21335:93;:::i;:::-;21453:2;21448:3;21444:12;21437:19;;21096:366;;;:::o;21468:::-;21610:3;21631:67;21695:2;21690:3;21631:67;:::i;:::-;21624:74;;21707:93;21796:3;21707:93;:::i;:::-;21825:2;21820:3;21816:12;21809:19;;21468:366;;;:::o;21840:::-;21982:3;22003:67;22067:2;22062:3;22003:67;:::i;:::-;21996:74;;22079:93;22168:3;22079:93;:::i;:::-;22197:2;22192:3;22188:12;22181:19;;21840:366;;;:::o;22212:::-;22354:3;22375:67;22439:2;22434:3;22375:67;:::i;:::-;22368:74;;22451:93;22540:3;22451:93;:::i;:::-;22569:2;22564:3;22560:12;22553:19;;22212:366;;;:::o;22584:::-;22726:3;22747:67;22811:2;22806:3;22747:67;:::i;:::-;22740:74;;22823:93;22912:3;22823:93;:::i;:::-;22941:2;22936:3;22932:12;22925:19;;22584:366;;;:::o;22956:108::-;23033:24;23051:5;23033:24;:::i;:::-;23028:3;23021:37;22956:108;;:::o;23070:118::-;23157:24;23175:5;23157:24;:::i;:::-;23152:3;23145:37;23070:118;;:::o;23194:695::-;23472:3;23494:92;23582:3;23573:6;23494:92;:::i;:::-;23487:99;;23603:95;23694:3;23685:6;23603:95;:::i;:::-;23596:102;;23715:148;23859:3;23715:148;:::i;:::-;23708:155;;23880:3;23873:10;;23194:695;;;;;:::o;23895:222::-;23988:4;24026:2;24015:9;24011:18;24003:26;;24039:71;24107:1;24096:9;24092:17;24083:6;24039:71;:::i;:::-;23895:222;;;;:::o;24123:1053::-;24446:4;24484:3;24473:9;24469:19;24461:27;;24498:71;24566:1;24555:9;24551:17;24542:6;24498:71;:::i;:::-;24579:72;24647:2;24636:9;24632:18;24623:6;24579:72;:::i;:::-;24698:9;24692:4;24688:20;24683:2;24672:9;24668:18;24661:48;24726:108;24829:4;24820:6;24726:108;:::i;:::-;24718:116;;24881:9;24875:4;24871:20;24866:2;24855:9;24851:18;24844:48;24909:108;25012:4;25003:6;24909:108;:::i;:::-;24901:116;;25065:9;25059:4;25055:20;25049:3;25038:9;25034:19;25027:49;25093:76;25164:4;25155:6;25093:76;:::i;:::-;25085:84;;24123:1053;;;;;;;;:::o;25182:751::-;25405:4;25443:3;25432:9;25428:19;25420:27;;25457:71;25525:1;25514:9;25510:17;25501:6;25457:71;:::i;:::-;25538:72;25606:2;25595:9;25591:18;25582:6;25538:72;:::i;:::-;25620;25688:2;25677:9;25673:18;25664:6;25620:72;:::i;:::-;25702;25770:2;25759:9;25755:18;25746:6;25702:72;:::i;:::-;25822:9;25816:4;25812:20;25806:3;25795:9;25791:19;25784:49;25850:76;25921:4;25912:6;25850:76;:::i;:::-;25842:84;;25182:751;;;;;;;;:::o;25939:373::-;26082:4;26120:2;26109:9;26105:18;26097:26;;26169:9;26163:4;26159:20;26155:1;26144:9;26140:17;26133:47;26197:108;26300:4;26291:6;26197:108;:::i;:::-;26189:116;;25939:373;;;;:::o;26318:634::-;26539:4;26577:2;26566:9;26562:18;26554:26;;26626:9;26620:4;26616:20;26612:1;26601:9;26597:17;26590:47;26654:108;26757:4;26748:6;26654:108;:::i;:::-;26646:116;;26809:9;26803:4;26799:20;26794:2;26783:9;26779:18;26772:48;26837:108;26940:4;26931:6;26837:108;:::i;:::-;26829:116;;26318:634;;;;;:::o;26958:210::-;27045:4;27083:2;27072:9;27068:18;27060:26;;27096:65;27158:1;27147:9;27143:17;27134:6;27096:65;:::i;:::-;26958:210;;;;:::o;27174:313::-;27287:4;27325:2;27314:9;27310:18;27302:26;;27374:9;27368:4;27364:20;27360:1;27349:9;27345:17;27338:47;27402:78;27475:4;27466:6;27402:78;:::i;:::-;27394:86;;27174:313;;;;:::o;27493:419::-;27659:4;27697:2;27686:9;27682:18;27674:26;;27746:9;27740:4;27736:20;27732:1;27721:9;27717:17;27710:47;27774:131;27900:4;27774:131;:::i;:::-;27766:139;;27493:419;;;:::o;27918:::-;28084:4;28122:2;28111:9;28107:18;28099:26;;28171:9;28165:4;28161:20;28157:1;28146:9;28142:17;28135:47;28199:131;28325:4;28199:131;:::i;:::-;28191:139;;27918:419;;;:::o;28343:::-;28509:4;28547:2;28536:9;28532:18;28524:26;;28596:9;28590:4;28586:20;28582:1;28571:9;28567:17;28560:47;28624:131;28750:4;28624:131;:::i;:::-;28616:139;;28343:419;;;:::o;28768:::-;28934:4;28972:2;28961:9;28957:18;28949:26;;29021:9;29015:4;29011:20;29007:1;28996:9;28992:17;28985:47;29049:131;29175:4;29049:131;:::i;:::-;29041:139;;28768:419;;;:::o;29193:::-;29359:4;29397:2;29386:9;29382:18;29374:26;;29446:9;29440:4;29436:20;29432:1;29421:9;29417:17;29410:47;29474:131;29600:4;29474:131;:::i;:::-;29466:139;;29193:419;;;:::o;29618:::-;29784:4;29822:2;29811:9;29807:18;29799:26;;29871:9;29865:4;29861:20;29857:1;29846:9;29842:17;29835:47;29899:131;30025:4;29899:131;:::i;:::-;29891:139;;29618:419;;;:::o;30043:::-;30209:4;30247:2;30236:9;30232:18;30224:26;;30296:9;30290:4;30286:20;30282:1;30271:9;30267:17;30260:47;30324:131;30450:4;30324:131;:::i;:::-;30316:139;;30043:419;;;:::o;30468:::-;30634:4;30672:2;30661:9;30657:18;30649:26;;30721:9;30715:4;30711:20;30707:1;30696:9;30692:17;30685:47;30749:131;30875:4;30749:131;:::i;:::-;30741:139;;30468:419;;;:::o;30893:::-;31059:4;31097:2;31086:9;31082:18;31074:26;;31146:9;31140:4;31136:20;31132:1;31121:9;31117:17;31110:47;31174:131;31300:4;31174:131;:::i;:::-;31166:139;;30893:419;;;:::o;31318:::-;31484:4;31522:2;31511:9;31507:18;31499:26;;31571:9;31565:4;31561:20;31557:1;31546:9;31542:17;31535:47;31599:131;31725:4;31599:131;:::i;:::-;31591:139;;31318:419;;;:::o;31743:::-;31909:4;31947:2;31936:9;31932:18;31924:26;;31996:9;31990:4;31986:20;31982:1;31971:9;31967:17;31960:47;32024:131;32150:4;32024:131;:::i;:::-;32016:139;;31743:419;;;:::o;32168:::-;32334:4;32372:2;32361:9;32357:18;32349:26;;32421:9;32415:4;32411:20;32407:1;32396:9;32392:17;32385:47;32449:131;32575:4;32449:131;:::i;:::-;32441:139;;32168:419;;;:::o;32593:::-;32759:4;32797:2;32786:9;32782:18;32774:26;;32846:9;32840:4;32836:20;32832:1;32821:9;32817:17;32810:47;32874:131;33000:4;32874:131;:::i;:::-;32866:139;;32593:419;;;:::o;33018:::-;33184:4;33222:2;33211:9;33207:18;33199:26;;33271:9;33265:4;33261:20;33257:1;33246:9;33242:17;33235:47;33299:131;33425:4;33299:131;:::i;:::-;33291:139;;33018:419;;;:::o;33443:::-;33609:4;33647:2;33636:9;33632:18;33624:26;;33696:9;33690:4;33686:20;33682:1;33671:9;33667:17;33660:47;33724:131;33850:4;33724:131;:::i;:::-;33716:139;;33443:419;;;:::o;33868:222::-;33961:4;33999:2;33988:9;33984:18;33976:26;;34012:71;34080:1;34069:9;34065:17;34056:6;34012:71;:::i;:::-;33868:222;;;;:::o;34096:332::-;34217:4;34255:2;34244:9;34240:18;34232:26;;34268:71;34336:1;34325:9;34321:17;34312:6;34268:71;:::i;:::-;34349:72;34417:2;34406:9;34402:18;34393:6;34349:72;:::i;:::-;34096:332;;;;;:::o;34434:129::-;34468:6;34495:20;;:::i;:::-;34485:30;;34524:33;34552:4;34544:6;34524:33;:::i;:::-;34434:129;;;:::o;34569:75::-;34602:6;34635:2;34629:9;34619:19;;34569:75;:::o;34650:311::-;34727:4;34817:18;34809:6;34806:30;34803:56;;;34839:18;;:::i;:::-;34803:56;34889:4;34881:6;34877:17;34869:25;;34949:4;34943;34939:15;34931:23;;34650:311;;;:::o;34967:::-;35044:4;35134:18;35126:6;35123:30;35120:56;;;35156:18;;:::i;:::-;35120:56;35206:4;35198:6;35194:17;35186:25;;35266:4;35260;35256:15;35248:23;;34967:311;;;:::o;35284:307::-;35345:4;35435:18;35427:6;35424:30;35421:56;;;35457:18;;:::i;:::-;35421:56;35495:29;35517:6;35495:29;:::i;:::-;35487:37;;35579:4;35573;35569:15;35561:23;;35284:307;;;:::o;35597:308::-;35659:4;35749:18;35741:6;35738:30;35735:56;;;35771:18;;:::i;:::-;35735:56;35809:29;35831:6;35809:29;:::i;:::-;35801:37;;35893:4;35887;35883:15;35875:23;;35597:308;;;:::o;35911:132::-;35978:4;36001:3;35993:11;;36031:4;36026:3;36022:14;36014:22;;35911:132;;;:::o;36049:141::-;36098:4;36121:3;36113:11;;36144:3;36141:1;36134:14;36178:4;36175:1;36165:18;36157:26;;36049:141;;;:::o;36196:114::-;36263:6;36297:5;36291:12;36281:22;;36196:114;;;:::o;36316:98::-;36367:6;36401:5;36395:12;36385:22;;36316:98;;;:::o;36420:99::-;36472:6;36506:5;36500:12;36490:22;;36420:99;;;:::o;36525:113::-;36595:4;36627;36622:3;36618:14;36610:22;;36525:113;;;:::o;36644:184::-;36743:11;36777:6;36772:3;36765:19;36817:4;36812:3;36808:14;36793:29;;36644:184;;;;:::o;36834:168::-;36917:11;36951:6;36946:3;36939:19;36991:4;36986:3;36982:14;36967:29;;36834:168;;;;:::o;37008:169::-;37092:11;37126:6;37121:3;37114:19;37166:4;37161:3;37157:14;37142:29;;37008:169;;;;:::o;37183:148::-;37285:11;37322:3;37307:18;;37183:148;;;;:::o;37337:305::-;37377:3;37396:20;37414:1;37396:20;:::i;:::-;37391:25;;37430:20;37448:1;37430:20;:::i;:::-;37425:25;;37584:1;37516:66;37512:74;37509:1;37506:81;37503:107;;;37590:18;;:::i;:::-;37503:107;37634:1;37631;37627:9;37620:16;;37337:305;;;;:::o;37648:185::-;37688:1;37705:20;37723:1;37705:20;:::i;:::-;37700:25;;37739:20;37757:1;37739:20;:::i;:::-;37734:25;;37778:1;37768:35;;37783:18;;:::i;:::-;37768:35;37825:1;37822;37818:9;37813:14;;37648:185;;;;:::o;37839:191::-;37879:4;37899:20;37917:1;37899:20;:::i;:::-;37894:25;;37933:20;37951:1;37933:20;:::i;:::-;37928:25;;37972:1;37969;37966:8;37963:34;;;37977:18;;:::i;:::-;37963:34;38022:1;38019;38015:9;38007:17;;37839:191;;;;:::o;38036:96::-;38073:7;38102:24;38120:5;38102:24;:::i;:::-;38091:35;;38036:96;;;:::o;38138:90::-;38172:7;38215:5;38208:13;38201:21;38190:32;;38138:90;;;:::o;38234:149::-;38270:7;38310:66;38303:5;38299:78;38288:89;;38234:149;;;:::o;38389:126::-;38426:7;38466:42;38459:5;38455:54;38444:65;;38389:126;;;:::o;38521:77::-;38558:7;38587:5;38576:16;;38521:77;;;:::o;38604:154::-;38688:6;38683:3;38678;38665:30;38750:1;38741:6;38736:3;38732:16;38725:27;38604:154;;;:::o;38764:307::-;38832:1;38842:113;38856:6;38853:1;38850:13;38842:113;;;38941:1;38936:3;38932:11;38926:18;38922:1;38917:3;38913:11;38906:39;38878:2;38875:1;38871:10;38866:15;;38842:113;;;38973:6;38970:1;38967:13;38964:101;;;39053:1;39044:6;39039:3;39035:16;39028:27;38964:101;38813:258;38764:307;;;:::o;39077:320::-;39121:6;39158:1;39152:4;39148:12;39138:22;;39205:1;39199:4;39195:12;39226:18;39216:81;;39282:4;39274:6;39270:17;39260:27;;39216:81;39344:2;39336:6;39333:14;39313:18;39310:38;39307:84;;;39363:18;;:::i;:::-;39307:84;39128:269;39077:320;;;:::o;39403:281::-;39486:27;39508:4;39486:27;:::i;:::-;39478:6;39474:40;39616:6;39604:10;39601:22;39580:18;39568:10;39565:34;39562:62;39559:88;;;39627:18;;:::i;:::-;39559:88;39667:10;39663:2;39656:22;39446:238;39403:281;;:::o;39690:233::-;39729:3;39752:24;39770:5;39752:24;:::i;:::-;39743:33;;39798:66;39791:5;39788:77;39785:103;;;39868:18;;:::i;:::-;39785:103;39915:1;39908:5;39904:13;39897:20;;39690:233;;;:::o;39929:176::-;39961:1;39978:20;39996:1;39978:20;:::i;:::-;39973:25;;40012:20;40030:1;40012:20;:::i;:::-;40007:25;;40051:1;40041:35;;40056:18;;:::i;:::-;40041:35;40097:1;40094;40090:9;40085:14;;39929:176;;;;:::o;40111:180::-;40159:77;40156:1;40149:88;40256:4;40253:1;40246:15;40280:4;40277:1;40270:15;40297:180;40345:77;40342:1;40335:88;40442:4;40439:1;40432:15;40466:4;40463:1;40456:15;40483:180;40531:77;40528:1;40521:88;40628:4;40625:1;40618:15;40652:4;40649:1;40642:15;40669:180;40717:77;40714:1;40707:88;40814:4;40811:1;40804:15;40838:4;40835:1;40828:15;40855:180;40903:77;40900:1;40893:88;41000:4;40997:1;40990:15;41024:4;41021:1;41014:15;41041:183;41076:3;41114:1;41096:16;41093:23;41090:128;;;41152:1;41149;41146;41131:23;41174:34;41205:1;41199:8;41174:34;:::i;:::-;41167:41;;41090:128;41041:183;:::o;41230:117::-;41339:1;41336;41329:12;41353:117;41462:1;41459;41452:12;41476:117;41585:1;41582;41575:12;41599:117;41708:1;41705;41698:12;41722:117;41831:1;41828;41821:12;41845:102;41886:6;41937:2;41933:7;41928:2;41921:5;41917:14;41913:28;41903:38;;41845:102;;;:::o;41953:106::-;41997:8;42046:5;42041:3;42037:15;42016:36;;41953:106;;;:::o;42065:239::-;42205:34;42201:1;42193:6;42189:14;42182:58;42274:22;42269:2;42261:6;42257:15;42250:47;42065:239;:::o;42310:227::-;42450:34;42446:1;42438:6;42434:14;42427:58;42519:10;42514:2;42506:6;42502:15;42495:35;42310:227;:::o;42543:230::-;42683:34;42679:1;42671:6;42667:14;42660:58;42752:13;42747:2;42739:6;42735:15;42728:38;42543:230;:::o;42779:225::-;42919:34;42915:1;42907:6;42903:14;42896:58;42988:8;42983:2;42975:6;42971:15;42964:33;42779:225;:::o;43010:223::-;43150:34;43146:1;43138:6;43134:14;43127:58;43219:6;43214:2;43206:6;43202:15;43195:31;43010:223;:::o;43239:228::-;43379:34;43375:1;43367:6;43363:14;43356:58;43448:11;43443:2;43435:6;43431:15;43424:36;43239:228;:::o;43473:224::-;43613:34;43609:1;43601:6;43597:14;43590:58;43682:7;43677:2;43669:6;43665:15;43658:32;43473:224;:::o;43703:237::-;43843:34;43839:1;43831:6;43827:14;43820:58;43912:20;43907:2;43899:6;43895:15;43888:45;43703:237;:::o;43946:222::-;44086:34;44082:1;44074:6;44070:14;44063:58;44155:5;44150:2;44142:6;44138:15;44131:30;43946:222;:::o;44174:229::-;44314:34;44310:1;44302:6;44298:14;44291:58;44383:12;44378:2;44370:6;44366:15;44359:37;44174:229;:::o;44409:155::-;44549:7;44545:1;44537:6;44533:14;44526:31;44409:155;:::o;44570:182::-;44710:34;44706:1;44698:6;44694:14;44687:58;44570:182;:::o;44758:228::-;44898:34;44894:1;44886:6;44882:14;44875:58;44967:11;44962:2;44954:6;44950:15;44943:36;44758:228;:::o;44992:::-;45132:34;45128:1;45120:6;45116:14;45109:58;45201:11;45196:2;45188:6;45184:15;45177:36;44992:228;:::o;45226:227::-;45366:34;45362:1;45354:6;45350:14;45343:58;45435:10;45430:2;45422:6;45418:15;45411:35;45226:227;:::o;45459:220::-;45599:34;45595:1;45587:6;45583:14;45576:58;45668:3;45663:2;45655:6;45651:15;45644:28;45459:220;:::o;45685:711::-;45724:3;45762:4;45744:16;45741:26;45738:39;;;45770:5;;45738:39;45799:20;;:::i;:::-;45874:1;45856:16;45852:24;45849:1;45843:4;45828:49;45907:4;45901:11;46006:16;45999:4;45991:6;45987:17;45984:39;45951:18;45943:6;45940:30;45924:113;45921:146;;;46052:5;;;;45921:146;46098:6;46092:4;46088:17;46134:3;46128:10;46161:18;46153:6;46150:30;46147:43;;;46183:5;;;;;;46147:43;46231:6;46224:4;46219:3;46215:14;46211:27;46290:1;46272:16;46268:24;46262:4;46258:35;46253:3;46250:44;46247:57;;;46297:5;;;;;;;46247:57;46314;46362:6;46356:4;46352:17;46344:6;46340:30;46334:4;46314:57;:::i;:::-;46387:3;46380:10;;45728:668;;;;;45685:711;;:::o;46402:122::-;46475:24;46493:5;46475:24;:::i;:::-;46468:5;46465:35;46455:63;;46514:1;46511;46504:12;46455:63;46402:122;:::o;46530:116::-;46600:21;46615:5;46600:21;:::i;:::-;46593:5;46590:32;46580:60;;46636:1;46633;46626:12;46580:60;46530:116;:::o;46652:120::-;46724:23;46741:5;46724:23;:::i;:::-;46717:5;46714:34;46704:62;;46762:1;46759;46752:12;46704:62;46652:120;:::o;46778:122::-;46851:24;46869:5;46851:24;:::i;:::-;46844:5;46841:35;46831:63;;46890:1;46887;46880:12;46831:63;46778:122;:::o

Swarm Source

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