Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
0 OHSHOP
Holders
104
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OpenHeadShop
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-14 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (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.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: OpenHeadShop.sol pragma solidity ^0.8.9; contract OpenHeadShop is ERC1155, Ownable { string public name = "Open Head NFT Shop"; string public symbol = "OHSHOP"; uint256 public constant x2Boost = 1; uint256 public constant x5Boost = 2; uint256 public constant x10Boost = 3; uint256 public constant vipBoost = 4; constructor() ERC1155("https://api.openheadnft.com/shop/metadata/{id}.json") { _mint(msg.sender, x2Boost, 60, ""); _mint(msg.sender, x5Boost, 40, ""); _mint(msg.sender, x10Boost, 20, ""); _mint(msg.sender, vipBoost, 1, ""); } function mintItem(uint256 item, uint amount) external onlyOwner { _mint(msg.sender, item, amount, ""); } function setURI(string memory uri) external onlyOwner { _setURI(uri); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"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":[{"internalType":"uint256","name":"item","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vipBoost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x10Boost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x2Boost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x5Boost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280601281526020017f4f70656e2048656164204e46542053686f700000000000000000000000000000815250600490805190602001906200005192919062000714565b506040518060400160405280600681526020017f4f4853484f500000000000000000000000000000000000000000000000000000815250600590805190602001906200009f92919062000714565b50348015620000ad57600080fd5b506040518060600160405280603381526020016200407560339139620000d9816200019460201b60201c565b50620000fa620000ee620001b060201b60201c565b620001b860201b60201c565b6200011f336001603c604051806020016040528060008152506200027e60201b60201c565b620001443360026028604051806020016040528060008152506200027e60201b60201c565b620001693360036014604051806020016040528060008152506200027e60201b60201c565b6200018e3360046001604051806020016040528060008152506200027e60201b60201c565b62000e99565b8060029080519060200190620001ac92919062000714565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415620002f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e8906200084b565b60405180910390fd5b600062000303620001b060201b60201c565b9050600062000318856200046660201b60201c565b905060006200032d856200046660201b60201c565b90506200034683600089858589620004e760201b60201c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003a79190620008a6565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516200042792919062000914565b60405180910390a46200044683600089858589620004ef60201b60201c565b6200045d83600089898989620004f760201b60201c565b50505050505050565b60606000600167ffffffffffffffff81111562000488576200048762000941565b5b604051908082528060200260200182016040528015620004b75781602001602082028036833780820191505090505b5090508281600081518110620004d257620004d162000970565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b620005238473ffffffffffffffffffffffffffffffffffffffff166200070160201b62000cda1760201c565b15620006f9578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016200056c95949392919062000a88565b602060405180830381600087803b1580156200058757600080fd5b505af1925050508015620005bb57506040513d601f19601f82011682018060405250810190620005b8919062000b58565b60015b6200066d57620005ca62000b97565b806308c379a014156200062e5750620005e262000bf2565b80620005ef575062000630565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000625919062000ce0565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006649062000d7a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620006f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ee9062000e12565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054620007229062000e63565b90600052602060002090601f01602090048101928262000746576000855562000792565b82601f106200076157805160ff191683800117855562000792565b8280016001018555821562000792579182015b828111156200079157825182559160200191906001019062000774565b5b509050620007a19190620007a5565b5090565b5b80821115620007c0576000816000905550600101620007a6565b5090565b600082825260208201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600062000833602183620007c4565b91506200084082620007d5565b604082019050919050565b60006020820190508181036000830152620008668162000824565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008b3826200086d565b9150620008c0836200086d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008f857620008f762000877565b5b828201905092915050565b6200090e816200086d565b82525050565b60006040820190506200092b600083018562000903565b6200093a602083018462000903565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009cc826200099f565b9050919050565b620009de81620009bf565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000a2057808201518184015260208101905062000a03565b8381111562000a30576000848401525b50505050565b6000601f19601f8301169050919050565b600062000a5482620009e4565b62000a608185620009ef565b935062000a7281856020860162000a00565b62000a7d8162000a36565b840191505092915050565b600060a08201905062000a9f6000830188620009d3565b62000aae6020830187620009d3565b62000abd604083018662000903565b62000acc606083018562000903565b818103608083015262000ae0818462000a47565b90509695505050505050565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000b328162000afb565b811462000b3e57600080fd5b50565b60008151905062000b528162000b27565b92915050565b60006020828403121562000b715762000b7062000af6565b5b600062000b818482850162000b41565b91505092915050565b60008160e01c9050919050565b600060033d111562000bb95760046000803e62000bb660005162000b8a565b90505b90565b62000bc78262000a36565b810181811067ffffffffffffffff8211171562000be95762000be862000941565b5b80604052505050565b600060443d101562000c045762000c91565b62000c0e62000aec565b60043d036004823e80513d602482011167ffffffffffffffff8211171562000c3857505062000c91565b808201805167ffffffffffffffff81111562000c58575050505062000c91565b80602083010160043d03850181111562000c7757505050505062000c91565b62000c888260200185018662000bbc565b82955050505050505b90565b600081519050919050565b600062000cac8262000c94565b62000cb88185620007c4565b935062000cca81856020860162000a00565b62000cd58162000a36565b840191505092915050565b6000602082019050818103600083015262000cfc818462000c9f565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600062000d62603483620007c4565b915062000d6f8262000d04565b604082019050919050565b6000602082019050818103600083015262000d958162000d53565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600062000dfa602883620007c4565b915062000e078262000d9c565b604082019050919050565b6000602082019050818103600083015262000e2d8162000deb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e7c57607f821691505b6020821081141562000e935762000e9262000e34565b5b50919050565b6131cc8062000ea96000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c8063715018a6116100ad578063a9e1c6a411610071578063a9e1c6a4146102f5578063d281c02a14610313578063e985e9c514610331578063f242432a14610361578063f2fde38b1461037d57610120565b8063715018a6146102755780638da5cb5b1461027f57806395d89b411461029d5780639cd32976146102bb578063a22cb465146102d957610120565b80630e89341c116100f45780630e89341c146101bf5780632eb2c2d6146101ef578063449de7791461020b5780634e1273f41461022757806355d106451461025757610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190611cbe565b610399565b60405161014c9190611d0d565b60405180910390f35b61016f600480360381019061016a9190611d80565b610462565b60405161017c9190611dc8565b60405180910390f35b61019f600480360381019061019a9190611f29565b610544565b005b6101a96105cc565b6040516101b69190611ffa565b60405180910390f35b6101d960048036038101906101d4919061201c565b61065a565b6040516101e69190611ffa565b60405180910390f35b610209600480360381019061020491906121b2565b6106ee565b005b61022560048036038101906102209190612281565b61078f565b005b610241600480360381019061023c9190612384565b61082a565b60405161024e91906124ba565b60405180910390f35b61025f610943565b60405161026c9190611d0d565b60405180910390f35b61027d610948565b005b6102876109d0565b60405161029491906124eb565b60405180910390f35b6102a56109fa565b6040516102b29190611ffa565b60405180910390f35b6102c3610a88565b6040516102d09190611d0d565b60405180910390f35b6102f360048036038101906102ee9190612532565b610a8d565b005b6102fd610aa3565b60405161030a9190611d0d565b60405180910390f35b61031b610aa8565b6040516103289190611d0d565b60405180910390f35b61034b60048036038101906103469190612572565b610aad565b6040516103589190611dc8565b60405180910390f35b61037b600480360381019061037691906125b2565b610b41565b005b61039760048036038101906103929190612649565b610be2565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561040a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610401906126e8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061053d575061053c82610ced565b5b9050919050565b61054c610d57565b73ffffffffffffffffffffffffffffffffffffffff1661056a6109d0565b73ffffffffffffffffffffffffffffffffffffffff16146105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b790612754565b60405180910390fd5b6105c981610d5f565b50565b600480546105d9906127a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610605906127a3565b80156106525780601f1061062757610100808354040283529160200191610652565b820191906000526020600020905b81548152906001019060200180831161063557829003601f168201915b505050505081565b606060028054610669906127a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610695906127a3565b80156106e25780601f106106b7576101008083540402835291602001916106e2565b820191906000526020600020905b8154815290600101906020018083116106c557829003601f168201915b50505050509050919050565b6106f6610d57565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061073c575061073b85610736610d57565b610aad565b5b61077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077290612847565b60405180910390fd5b6107888585858585610d79565b5050505050565b610797610d57565b73ffffffffffffffffffffffffffffffffffffffff166107b56109d0565b73ffffffffffffffffffffffffffffffffffffffff161461080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290612754565b60405180910390fd5b6108263383836040518060200160405280600081525061109b565b5050565b60608151835114610870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610867906128d9565b60405180910390fd5b6000835167ffffffffffffffff81111561088d5761088c611dfe565b5b6040519080825280602002602001820160405280156108bb5781602001602082028036833780820191505090505b50905060005b8451811015610938576109088582815181106108e0576108df6128f9565b5b60200260200101518583815181106108fb576108fa6128f9565b5b6020026020010151610399565b82828151811061091b5761091a6128f9565b5b6020026020010181815250508061093190612957565b90506108c1565b508091505092915050565b600181565b610950610d57565b73ffffffffffffffffffffffffffffffffffffffff1661096e6109d0565b73ffffffffffffffffffffffffffffffffffffffff16146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90612754565b60405180910390fd5b6109ce600061124c565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610a07906127a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a33906127a3565b8015610a805780601f10610a5557610100808354040283529160200191610a80565b820191906000526020600020905b815481529060010190602001808311610a6357829003601f168201915b505050505081565b600481565b610a9f610a98610d57565b8383611312565b5050565b600281565b600381565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b49610d57565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b8f5750610b8e85610b89610d57565b610aad565b5b610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590612a12565b60405180910390fd5b610bdb858585858561147f565b5050505050565b610bea610d57565b73ffffffffffffffffffffffffffffffffffffffff16610c086109d0565b73ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612aa4565b60405180910390fd5b610cd78161124c565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610d75929190611b73565b5050565b8151835114610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490612b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490612bc8565b60405180910390fd5b6000610e37610d57565b9050610e4781878787878761171b565b60005b8451811015610ff8576000858281518110610e6857610e676128f9565b5b602002602001015190506000858381518110610e8757610e866128f9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612c5a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fdd9190612c7a565b9250508190555050505080610ff190612957565b9050610e4a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161106f929190612cd0565b60405180910390a4611085818787878787611723565b61109381878787878761172b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290612d79565b60405180910390fd5b6000611115610d57565b9050600061112285611912565b9050600061112f85611912565b90506111408360008985858961171b565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119f9190612c7a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161121d929190612d99565b60405180910390a461123483600089858589611723565b6112438360008989898961198c565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890612e34565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114729190611dc8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690612bc8565b60405180910390fd5b60006114f9610d57565b9050600061150685611912565b9050600061151385611912565b905061152383898985858961171b565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b190612c5a565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166f9190612c7a565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516116ec929190612d99565b60405180910390a4611702848a8a86868a611723565b611710848a8a8a8a8a61198c565b505050505050505050565b505050505050565b505050505050565b61174a8473ffffffffffffffffffffffffffffffffffffffff16610cda565b1561190a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611790959493929190612ea9565b602060405180830381600087803b1580156117aa57600080fd5b505af19250505080156117db57506040513d601f19601f820116820180604052508101906117d89190612f26565b60015b611881576117e7612f60565b806308c379a0141561184457506117fc612f82565b806118075750611846565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b9190611ffa565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118789061308a565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061311c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561193157611930611dfe565b5b60405190808252806020026020018201604052801561195f5781602001602082028036833780820191505090505b5090508281600081518110611977576119766128f9565b5b60200260200101818152505080915050919050565b6119ab8473ffffffffffffffffffffffffffffffffffffffff16610cda565b15611b6b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016119f195949392919061313c565b602060405180830381600087803b158015611a0b57600080fd5b505af1925050508015611a3c57506040513d601f19601f82011682018060405250810190611a399190612f26565b60015b611ae257611a48612f60565b806308c379a01415611aa55750611a5d612f82565b80611a685750611aa7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c9190611ffa565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad99061308a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b609061311c565b60405180910390fd5b505b505050505050565b828054611b7f906127a3565b90600052602060002090601f016020900481019282611ba15760008555611be8565b82601f10611bba57805160ff1916838001178555611be8565b82800160010185558215611be8579182015b82811115611be7578251825591602001919060010190611bcc565b5b509050611bf59190611bf9565b5090565b5b80821115611c12576000816000905550600101611bfa565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c5582611c2a565b9050919050565b611c6581611c4a565b8114611c7057600080fd5b50565b600081359050611c8281611c5c565b92915050565b6000819050919050565b611c9b81611c88565b8114611ca657600080fd5b50565b600081359050611cb881611c92565b92915050565b60008060408385031215611cd557611cd4611c20565b5b6000611ce385828601611c73565b9250506020611cf485828601611ca9565b9150509250929050565b611d0781611c88565b82525050565b6000602082019050611d226000830184611cfe565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d5d81611d28565b8114611d6857600080fd5b50565b600081359050611d7a81611d54565b92915050565b600060208284031215611d9657611d95611c20565b5b6000611da484828501611d6b565b91505092915050565b60008115159050919050565b611dc281611dad565b82525050565b6000602082019050611ddd6000830184611db9565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e3682611ded565b810181811067ffffffffffffffff82111715611e5557611e54611dfe565b5b80604052505050565b6000611e68611c16565b9050611e748282611e2d565b919050565b600067ffffffffffffffff821115611e9457611e93611dfe565b5b611e9d82611ded565b9050602081019050919050565b82818337600083830152505050565b6000611ecc611ec784611e79565b611e5e565b905082815260208101848484011115611ee857611ee7611de8565b5b611ef3848285611eaa565b509392505050565b600082601f830112611f1057611f0f611de3565b5b8135611f20848260208601611eb9565b91505092915050565b600060208284031215611f3f57611f3e611c20565b5b600082013567ffffffffffffffff811115611f5d57611f5c611c25565b5b611f6984828501611efb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fac578082015181840152602081019050611f91565b83811115611fbb576000848401525b50505050565b6000611fcc82611f72565b611fd68185611f7d565b9350611fe6818560208601611f8e565b611fef81611ded565b840191505092915050565b600060208201905081810360008301526120148184611fc1565b905092915050565b60006020828403121561203257612031611c20565b5b600061204084828501611ca9565b91505092915050565b600067ffffffffffffffff82111561206457612063611dfe565b5b602082029050602081019050919050565b600080fd5b600061208d61208884612049565b611e5e565b905080838252602082019050602084028301858111156120b0576120af612075565b5b835b818110156120d957806120c58882611ca9565b8452602084019350506020810190506120b2565b5050509392505050565b600082601f8301126120f8576120f7611de3565b5b813561210884826020860161207a565b91505092915050565b600067ffffffffffffffff82111561212c5761212b611dfe565b5b61213582611ded565b9050602081019050919050565b600061215561215084612111565b611e5e565b90508281526020810184848401111561217157612170611de8565b5b61217c848285611eaa565b509392505050565b600082601f83011261219957612198611de3565b5b81356121a9848260208601612142565b91505092915050565b600080600080600060a086880312156121ce576121cd611c20565b5b60006121dc88828901611c73565b95505060206121ed88828901611c73565b945050604086013567ffffffffffffffff81111561220e5761220d611c25565b5b61221a888289016120e3565b935050606086013567ffffffffffffffff81111561223b5761223a611c25565b5b612247888289016120e3565b925050608086013567ffffffffffffffff81111561226857612267611c25565b5b61227488828901612184565b9150509295509295909350565b6000806040838503121561229857612297611c20565b5b60006122a685828601611ca9565b92505060206122b785828601611ca9565b9150509250929050565b600067ffffffffffffffff8211156122dc576122db611dfe565b5b602082029050602081019050919050565b60006123006122fb846122c1565b611e5e565b9050808382526020820190506020840283018581111561232357612322612075565b5b835b8181101561234c57806123388882611c73565b845260208401935050602081019050612325565b5050509392505050565b600082601f83011261236b5761236a611de3565b5b813561237b8482602086016122ed565b91505092915050565b6000806040838503121561239b5761239a611c20565b5b600083013567ffffffffffffffff8111156123b9576123b8611c25565b5b6123c585828601612356565b925050602083013567ffffffffffffffff8111156123e6576123e5611c25565b5b6123f2858286016120e3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61243181611c88565b82525050565b60006124438383612428565b60208301905092915050565b6000602082019050919050565b6000612467826123fc565b6124718185612407565b935061247c83612418565b8060005b838110156124ad5781516124948882612437565b975061249f8361244f565b925050600181019050612480565b5085935050505092915050565b600060208201905081810360008301526124d4818461245c565b905092915050565b6124e581611c4a565b82525050565b600060208201905061250060008301846124dc565b92915050565b61250f81611dad565b811461251a57600080fd5b50565b60008135905061252c81612506565b92915050565b6000806040838503121561254957612548611c20565b5b600061255785828601611c73565b92505060206125688582860161251d565b9150509250929050565b6000806040838503121561258957612588611c20565b5b600061259785828601611c73565b92505060206125a885828601611c73565b9150509250929050565b600080600080600060a086880312156125ce576125cd611c20565b5b60006125dc88828901611c73565b95505060206125ed88828901611c73565b94505060406125fe88828901611ca9565b935050606061260f88828901611ca9565b925050608086013567ffffffffffffffff8111156126305761262f611c25565b5b61263c88828901612184565b9150509295509295909350565b60006020828403121561265f5761265e611c20565b5b600061266d84828501611c73565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006126d2602b83611f7d565b91506126dd82612676565b604082019050919050565b60006020820190508181036000830152612701816126c5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061273e602083611f7d565b915061274982612708565b602082019050919050565b6000602082019050818103600083015261276d81612731565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127bb57607f821691505b602082108114156127cf576127ce612774565b5b50919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612831603283611f7d565b915061283c826127d5565b604082019050919050565b6000602082019050818103600083015261286081612824565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006128c3602983611f7d565b91506128ce82612867565b604082019050919050565b600060208201905081810360008301526128f2816128b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061296282611c88565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561299557612994612928565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006129fc602983611f7d565b9150612a07826129a0565b604082019050919050565b60006020820190508181036000830152612a2b816129ef565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a8e602683611f7d565b9150612a9982612a32565b604082019050919050565b60006020820190508181036000830152612abd81612a81565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612b20602883611f7d565b9150612b2b82612ac4565b604082019050919050565b60006020820190508181036000830152612b4f81612b13565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612bb2602583611f7d565b9150612bbd82612b56565b604082019050919050565b60006020820190508181036000830152612be181612ba5565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c44602a83611f7d565b9150612c4f82612be8565b604082019050919050565b60006020820190508181036000830152612c7381612c37565b9050919050565b6000612c8582611c88565b9150612c9083611c88565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cc557612cc4612928565b5b828201905092915050565b60006040820190508181036000830152612cea818561245c565b90508181036020830152612cfe818461245c565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d63602183611f7d565b9150612d6e82612d07565b604082019050919050565b60006020820190508181036000830152612d9281612d56565b9050919050565b6000604082019050612dae6000830185611cfe565b612dbb6020830184611cfe565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e1e602983611f7d565b9150612e2982612dc2565b604082019050919050565b60006020820190508181036000830152612e4d81612e11565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612e7b82612e54565b612e858185612e5f565b9350612e95818560208601611f8e565b612e9e81611ded565b840191505092915050565b600060a082019050612ebe60008301886124dc565b612ecb60208301876124dc565b8181036040830152612edd818661245c565b90508181036060830152612ef1818561245c565b90508181036080830152612f058184612e70565b90509695505050505050565b600081519050612f2081611d54565b92915050565b600060208284031215612f3c57612f3b611c20565b5b6000612f4a84828501612f11565b91505092915050565b60008160e01c9050919050565b600060033d1115612f7f5760046000803e612f7c600051612f53565b90505b90565b600060443d1015612f9257613015565b612f9a611c16565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fc2575050613015565b808201805167ffffffffffffffff811115612fe05750505050613015565b80602083010160043d038501811115612ffd575050505050613015565b61300c82602001850186611e2d565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613074603483611f7d565b915061307f82613018565b604082019050919050565b600060208201905081810360008301526130a381613067565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613106602883611f7d565b9150613111826130aa565b604082019050919050565b60006020820190508181036000830152613135816130f9565b9050919050565b600060a08201905061315160008301886124dc565b61315e60208301876124dc565b61316b6040830186611cfe565b6131786060830185611cfe565b818103608083015261318a8184612e70565b9050969550505050505056fea26469706673582212209ca7f16d9cdc3c09076ac122cceda5af4f72011aee88fefc015fb803b42a0f8d64736f6c6343000809003368747470733a2f2f6170692e6f70656e686561646e66742e636f6d2f73686f702f6d657461646174612f7b69647d2e6a736f6e
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101205760003560e01c8063715018a6116100ad578063a9e1c6a411610071578063a9e1c6a4146102f5578063d281c02a14610313578063e985e9c514610331578063f242432a14610361578063f2fde38b1461037d57610120565b8063715018a6146102755780638da5cb5b1461027f57806395d89b411461029d5780639cd32976146102bb578063a22cb465146102d957610120565b80630e89341c116100f45780630e89341c146101bf5780632eb2c2d6146101ef578063449de7791461020b5780634e1273f41461022757806355d106451461025757610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190611cbe565b610399565b60405161014c9190611d0d565b60405180910390f35b61016f600480360381019061016a9190611d80565b610462565b60405161017c9190611dc8565b60405180910390f35b61019f600480360381019061019a9190611f29565b610544565b005b6101a96105cc565b6040516101b69190611ffa565b60405180910390f35b6101d960048036038101906101d4919061201c565b61065a565b6040516101e69190611ffa565b60405180910390f35b610209600480360381019061020491906121b2565b6106ee565b005b61022560048036038101906102209190612281565b61078f565b005b610241600480360381019061023c9190612384565b61082a565b60405161024e91906124ba565b60405180910390f35b61025f610943565b60405161026c9190611d0d565b60405180910390f35b61027d610948565b005b6102876109d0565b60405161029491906124eb565b60405180910390f35b6102a56109fa565b6040516102b29190611ffa565b60405180910390f35b6102c3610a88565b6040516102d09190611d0d565b60405180910390f35b6102f360048036038101906102ee9190612532565b610a8d565b005b6102fd610aa3565b60405161030a9190611d0d565b60405180910390f35b61031b610aa8565b6040516103289190611d0d565b60405180910390f35b61034b60048036038101906103469190612572565b610aad565b6040516103589190611dc8565b60405180910390f35b61037b600480360381019061037691906125b2565b610b41565b005b61039760048036038101906103929190612649565b610be2565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561040a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610401906126e8565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061053d575061053c82610ced565b5b9050919050565b61054c610d57565b73ffffffffffffffffffffffffffffffffffffffff1661056a6109d0565b73ffffffffffffffffffffffffffffffffffffffff16146105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b790612754565b60405180910390fd5b6105c981610d5f565b50565b600480546105d9906127a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610605906127a3565b80156106525780601f1061062757610100808354040283529160200191610652565b820191906000526020600020905b81548152906001019060200180831161063557829003601f168201915b505050505081565b606060028054610669906127a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610695906127a3565b80156106e25780601f106106b7576101008083540402835291602001916106e2565b820191906000526020600020905b8154815290600101906020018083116106c557829003601f168201915b50505050509050919050565b6106f6610d57565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061073c575061073b85610736610d57565b610aad565b5b61077b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077290612847565b60405180910390fd5b6107888585858585610d79565b5050505050565b610797610d57565b73ffffffffffffffffffffffffffffffffffffffff166107b56109d0565b73ffffffffffffffffffffffffffffffffffffffff161461080b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080290612754565b60405180910390fd5b6108263383836040518060200160405280600081525061109b565b5050565b60608151835114610870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610867906128d9565b60405180910390fd5b6000835167ffffffffffffffff81111561088d5761088c611dfe565b5b6040519080825280602002602001820160405280156108bb5781602001602082028036833780820191505090505b50905060005b8451811015610938576109088582815181106108e0576108df6128f9565b5b60200260200101518583815181106108fb576108fa6128f9565b5b6020026020010151610399565b82828151811061091b5761091a6128f9565b5b6020026020010181815250508061093190612957565b90506108c1565b508091505092915050565b600181565b610950610d57565b73ffffffffffffffffffffffffffffffffffffffff1661096e6109d0565b73ffffffffffffffffffffffffffffffffffffffff16146109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90612754565b60405180910390fd5b6109ce600061124c565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610a07906127a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a33906127a3565b8015610a805780601f10610a5557610100808354040283529160200191610a80565b820191906000526020600020905b815481529060010190602001808311610a6357829003601f168201915b505050505081565b600481565b610a9f610a98610d57565b8383611312565b5050565b600281565b600381565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b49610d57565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b8f5750610b8e85610b89610d57565b610aad565b5b610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc590612a12565b60405180910390fd5b610bdb858585858561147f565b5050505050565b610bea610d57565b73ffffffffffffffffffffffffffffffffffffffff16610c086109d0565b73ffffffffffffffffffffffffffffffffffffffff1614610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590612754565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590612aa4565b60405180910390fd5b610cd78161124c565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190610d75929190611b73565b5050565b8151835114610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490612b36565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490612bc8565b60405180910390fd5b6000610e37610d57565b9050610e4781878787878761171b565b60005b8451811015610ff8576000858281518110610e6857610e676128f9565b5b602002602001015190506000858381518110610e8757610e866128f9565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612c5a565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fdd9190612c7a565b9250508190555050505080610ff190612957565b9050610e4a565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161106f929190612cd0565b60405180910390a4611085818787878787611723565b61109381878787878761172b565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290612d79565b60405180910390fd5b6000611115610d57565b9050600061112285611912565b9050600061112f85611912565b90506111408360008985858961171b565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461119f9190612c7a565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161121d929190612d99565b60405180910390a461123483600089858589611723565b6112438360008989898961198c565b50505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890612e34565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114729190611dc8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690612bc8565b60405180910390fd5b60006114f9610d57565b9050600061150685611912565b9050600061151385611912565b905061152383898985858961171b565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b190612c5a565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461166f9190612c7a565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516116ec929190612d99565b60405180910390a4611702848a8a86868a611723565b611710848a8a8a8a8a61198c565b505050505050505050565b505050505050565b505050505050565b61174a8473ffffffffffffffffffffffffffffffffffffffff16610cda565b1561190a578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611790959493929190612ea9565b602060405180830381600087803b1580156117aa57600080fd5b505af19250505080156117db57506040513d601f19601f820116820180604052508101906117d89190612f26565b60015b611881576117e7612f60565b806308c379a0141561184457506117fc612f82565b806118075750611846565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b9190611ffa565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118789061308a565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061311c565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561193157611930611dfe565b5b60405190808252806020026020018201604052801561195f5781602001602082028036833780820191505090505b5090508281600081518110611977576119766128f9565b5b60200260200101818152505080915050919050565b6119ab8473ffffffffffffffffffffffffffffffffffffffff16610cda565b15611b6b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016119f195949392919061313c565b602060405180830381600087803b158015611a0b57600080fd5b505af1925050508015611a3c57506040513d601f19601f82011682018060405250810190611a399190612f26565b60015b611ae257611a48612f60565b806308c379a01415611aa55750611a5d612f82565b80611a685750611aa7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c9190611ffa565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad99061308a565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b609061311c565b60405180910390fd5b505b505050505050565b828054611b7f906127a3565b90600052602060002090601f016020900481019282611ba15760008555611be8565b82601f10611bba57805160ff1916838001178555611be8565b82800160010185558215611be8579182015b82811115611be7578251825591602001919060010190611bcc565b5b509050611bf59190611bf9565b5090565b5b80821115611c12576000816000905550600101611bfa565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c5582611c2a565b9050919050565b611c6581611c4a565b8114611c7057600080fd5b50565b600081359050611c8281611c5c565b92915050565b6000819050919050565b611c9b81611c88565b8114611ca657600080fd5b50565b600081359050611cb881611c92565b92915050565b60008060408385031215611cd557611cd4611c20565b5b6000611ce385828601611c73565b9250506020611cf485828601611ca9565b9150509250929050565b611d0781611c88565b82525050565b6000602082019050611d226000830184611cfe565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611d5d81611d28565b8114611d6857600080fd5b50565b600081359050611d7a81611d54565b92915050565b600060208284031215611d9657611d95611c20565b5b6000611da484828501611d6b565b91505092915050565b60008115159050919050565b611dc281611dad565b82525050565b6000602082019050611ddd6000830184611db9565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e3682611ded565b810181811067ffffffffffffffff82111715611e5557611e54611dfe565b5b80604052505050565b6000611e68611c16565b9050611e748282611e2d565b919050565b600067ffffffffffffffff821115611e9457611e93611dfe565b5b611e9d82611ded565b9050602081019050919050565b82818337600083830152505050565b6000611ecc611ec784611e79565b611e5e565b905082815260208101848484011115611ee857611ee7611de8565b5b611ef3848285611eaa565b509392505050565b600082601f830112611f1057611f0f611de3565b5b8135611f20848260208601611eb9565b91505092915050565b600060208284031215611f3f57611f3e611c20565b5b600082013567ffffffffffffffff811115611f5d57611f5c611c25565b5b611f6984828501611efb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fac578082015181840152602081019050611f91565b83811115611fbb576000848401525b50505050565b6000611fcc82611f72565b611fd68185611f7d565b9350611fe6818560208601611f8e565b611fef81611ded565b840191505092915050565b600060208201905081810360008301526120148184611fc1565b905092915050565b60006020828403121561203257612031611c20565b5b600061204084828501611ca9565b91505092915050565b600067ffffffffffffffff82111561206457612063611dfe565b5b602082029050602081019050919050565b600080fd5b600061208d61208884612049565b611e5e565b905080838252602082019050602084028301858111156120b0576120af612075565b5b835b818110156120d957806120c58882611ca9565b8452602084019350506020810190506120b2565b5050509392505050565b600082601f8301126120f8576120f7611de3565b5b813561210884826020860161207a565b91505092915050565b600067ffffffffffffffff82111561212c5761212b611dfe565b5b61213582611ded565b9050602081019050919050565b600061215561215084612111565b611e5e565b90508281526020810184848401111561217157612170611de8565b5b61217c848285611eaa565b509392505050565b600082601f83011261219957612198611de3565b5b81356121a9848260208601612142565b91505092915050565b600080600080600060a086880312156121ce576121cd611c20565b5b60006121dc88828901611c73565b95505060206121ed88828901611c73565b945050604086013567ffffffffffffffff81111561220e5761220d611c25565b5b61221a888289016120e3565b935050606086013567ffffffffffffffff81111561223b5761223a611c25565b5b612247888289016120e3565b925050608086013567ffffffffffffffff81111561226857612267611c25565b5b61227488828901612184565b9150509295509295909350565b6000806040838503121561229857612297611c20565b5b60006122a685828601611ca9565b92505060206122b785828601611ca9565b9150509250929050565b600067ffffffffffffffff8211156122dc576122db611dfe565b5b602082029050602081019050919050565b60006123006122fb846122c1565b611e5e565b9050808382526020820190506020840283018581111561232357612322612075565b5b835b8181101561234c57806123388882611c73565b845260208401935050602081019050612325565b5050509392505050565b600082601f83011261236b5761236a611de3565b5b813561237b8482602086016122ed565b91505092915050565b6000806040838503121561239b5761239a611c20565b5b600083013567ffffffffffffffff8111156123b9576123b8611c25565b5b6123c585828601612356565b925050602083013567ffffffffffffffff8111156123e6576123e5611c25565b5b6123f2858286016120e3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61243181611c88565b82525050565b60006124438383612428565b60208301905092915050565b6000602082019050919050565b6000612467826123fc565b6124718185612407565b935061247c83612418565b8060005b838110156124ad5781516124948882612437565b975061249f8361244f565b925050600181019050612480565b5085935050505092915050565b600060208201905081810360008301526124d4818461245c565b905092915050565b6124e581611c4a565b82525050565b600060208201905061250060008301846124dc565b92915050565b61250f81611dad565b811461251a57600080fd5b50565b60008135905061252c81612506565b92915050565b6000806040838503121561254957612548611c20565b5b600061255785828601611c73565b92505060206125688582860161251d565b9150509250929050565b6000806040838503121561258957612588611c20565b5b600061259785828601611c73565b92505060206125a885828601611c73565b9150509250929050565b600080600080600060a086880312156125ce576125cd611c20565b5b60006125dc88828901611c73565b95505060206125ed88828901611c73565b94505060406125fe88828901611ca9565b935050606061260f88828901611ca9565b925050608086013567ffffffffffffffff8111156126305761262f611c25565b5b61263c88828901612184565b9150509295509295909350565b60006020828403121561265f5761265e611c20565b5b600061266d84828501611c73565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006126d2602b83611f7d565b91506126dd82612676565b604082019050919050565b60006020820190508181036000830152612701816126c5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061273e602083611f7d565b915061274982612708565b602082019050919050565b6000602082019050818103600083015261276d81612731565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806127bb57607f821691505b602082108114156127cf576127ce612774565b5b50919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000612831603283611f7d565b915061283c826127d5565b604082019050919050565b6000602082019050818103600083015261286081612824565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006128c3602983611f7d565b91506128ce82612867565b604082019050919050565b600060208201905081810360008301526128f2816128b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061296282611c88565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561299557612994612928565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006129fc602983611f7d565b9150612a07826129a0565b604082019050919050565b60006020820190508181036000830152612a2b816129ef565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a8e602683611f7d565b9150612a9982612a32565b604082019050919050565b60006020820190508181036000830152612abd81612a81565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000612b20602883611f7d565b9150612b2b82612ac4565b604082019050919050565b60006020820190508181036000830152612b4f81612b13565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612bb2602583611f7d565b9150612bbd82612b56565b604082019050919050565b60006020820190508181036000830152612be181612ba5565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000612c44602a83611f7d565b9150612c4f82612be8565b604082019050919050565b60006020820190508181036000830152612c7381612c37565b9050919050565b6000612c8582611c88565b9150612c9083611c88565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612cc557612cc4612928565b5b828201905092915050565b60006040820190508181036000830152612cea818561245c565b90508181036020830152612cfe818461245c565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612d63602183611f7d565b9150612d6e82612d07565b604082019050919050565b60006020820190508181036000830152612d9281612d56565b9050919050565b6000604082019050612dae6000830185611cfe565b612dbb6020830184611cfe565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000612e1e602983611f7d565b9150612e2982612dc2565b604082019050919050565b60006020820190508181036000830152612e4d81612e11565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000612e7b82612e54565b612e858185612e5f565b9350612e95818560208601611f8e565b612e9e81611ded565b840191505092915050565b600060a082019050612ebe60008301886124dc565b612ecb60208301876124dc565b8181036040830152612edd818661245c565b90508181036060830152612ef1818561245c565b90508181036080830152612f058184612e70565b90509695505050505050565b600081519050612f2081611d54565b92915050565b600060208284031215612f3c57612f3b611c20565b5b6000612f4a84828501612f11565b91505092915050565b60008160e01c9050919050565b600060033d1115612f7f5760046000803e612f7c600051612f53565b90505b90565b600060443d1015612f9257613015565b612f9a611c16565b60043d036004823e80513d602482011167ffffffffffffffff82111715612fc2575050613015565b808201805167ffffffffffffffff811115612fe05750505050613015565b80602083010160043d038501811115612ffd575050505050613015565b61300c82602001850186611e2d565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613074603483611f7d565b915061307f82613018565b604082019050919050565b600060208201905081810360008301526130a381613067565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613106602883611f7d565b9150613111826130aa565b604082019050919050565b60006020820190508181036000830152613135816130f9565b9050919050565b600060a08201905061315160008301886124dc565b61315e60208301876124dc565b61316b6040830186611cfe565b6131786060830185611cfe565b818103608083015261318a8184612e70565b9050969550505050505056fea26469706673582212209ca7f16d9cdc3c09076ac122cceda5af4f72011aee88fefc015fb803b42a0f8d64736f6c63430008090033
Deployed Bytecode Sourcemap
40608:799:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25164:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24187:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41319:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40659:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24908:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27103:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41193:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25561:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40747:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;:::i;:::-;;4079:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40707:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40874:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26158:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40789:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40831:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26385:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26625:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25164:231;25250:7;25297:1;25278:21;;:7;:21;;;;25270:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25365:9;:13;25375:2;25365:13;;;;;;;;;;;:22;25379:7;25365:22;;;;;;;;;;;;;;;;25358:29;;25164:231;;;;:::o;24187:310::-;24289:4;24341:26;24326:41;;;:11;:41;;;;:110;;;;24399:37;24384:52;;;:11;:52;;;;24326:110;:163;;;;24453:36;24477:11;24453:23;:36::i;:::-;24326:163;24306:183;;24187:310;;;:::o;41319:85::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41384:12:::1;41392:3;41384:7;:12::i;:::-;41319:85:::0;:::o;40659:41::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24908:105::-;24968:13;25001:4;24994:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24908:105;;;:::o;27103:442::-;27344:12;:10;:12::i;:::-;27336:20;;:4;:20;;;:60;;;;27360:36;27377:4;27383:12;:10;:12::i;:::-;27360:16;:36::i;:::-;27336:60;27314:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;27485:52;27508:4;27514:2;27518:3;27523:7;27532:4;27485:22;:52::i;:::-;27103:442;;;;;:::o;41193:118::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41268:35:::1;41274:10;41286:4;41292:6;41268:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;41193:118:::0;;:::o;25561:524::-;25717:16;25778:3;:10;25759:8;:15;:29;25751:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25847:30;25894:8;:15;25880:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25847:63;;25928:9;25923:122;25947:8;:15;25943:1;:19;25923:122;;;26003:30;26013:8;26022:1;26013:11;;;;;;;;:::i;:::-;;;;;;;;26026:3;26030:1;26026:6;;;;;;;;:::i;:::-;;;;;;;;26003:9;:30::i;:::-;25984:13;25998:1;25984:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25964:3;;;;:::i;:::-;;;25923:122;;;;26064:13;26057:20;;;25561:524;;;;:::o;40747:35::-;40781:1;40747:35;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;40707:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40874:36::-;40909:1;40874:36;:::o;26158:155::-;26253:52;26272:12;:10;:12::i;:::-;26286:8;26296;26253:18;:52::i;:::-;26158:155;;:::o;40789:35::-;40823:1;40789:35;:::o;40831:36::-;40866:1;40831:36;:::o;26385:168::-;26484:4;26508:18;:27;26527:7;26508:27;;;;;;;;;;;;;;;:37;26536:8;26508:37;;;;;;;;;;;;;;;;;;;;;;;;;26501:44;;26385:168;;;;:::o;26625:401::-;26841:12;:10;:12::i;:::-;26833:20;;:4;:20;;;:60;;;;26857:36;26874:4;26880:12;:10;:12::i;:::-;26857:16;:36::i;:::-;26833:60;26811:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26973:45;26991:4;26997:2;27001;27005:6;27013:4;26973:17;:45::i;:::-;26625:401;;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;15480:157::-;15565:4;15604:25;15589:40;;;:11;:40;;;;15582:47;;15480:157;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;31331:88::-;31405:6;31398:4;:13;;;;;;;;;;;;:::i;:::-;;31331:88;:::o;29341:1146::-;29568:7;:14;29554:3;:10;:28;29546:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29660:1;29646:16;;:2;:16;;;;29638:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29717:16;29736:12;:10;:12::i;:::-;29717:31;;29761:60;29782:8;29792:4;29798:2;29802:3;29807:7;29816:4;29761:20;:60::i;:::-;29839:9;29834:421;29858:3;:10;29854:1;:14;29834:421;;;29890:10;29903:3;29907:1;29903:6;;;;;;;;:::i;:::-;;;;;;;;29890:19;;29924:14;29941:7;29949:1;29941:10;;;;;;;;:::i;:::-;;;;;;;;29924:27;;29968:19;29990:9;:13;30000:2;29990:13;;;;;;;;;;;:19;30004:4;29990:19;;;;;;;;;;;;;;;;29968:41;;30047:6;30032:11;:21;;30024:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30180:6;30166:11;:20;30144:9;:13;30154:2;30144:13;;;;;;;;;;;:19;30158:4;30144:19;;;;;;;;;;;;;;;:42;;;;30237:6;30216:9;:13;30226:2;30216:13;;;;;;;;;;;:17;30230:2;30216:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29875:380;;;29870:3;;;;:::i;:::-;;;29834:421;;;;30302:2;30272:47;;30296:4;30272:47;;30286:8;30272:47;;;30306:3;30311:7;30272:47;;;;;;;:::i;:::-;;;;;;;;30332:59;30352:8;30362:4;30368:2;30372:3;30377:7;30386:4;30332:19;:59::i;:::-;30404:75;30440:8;30450:4;30456:2;30460:3;30465:7;30474:4;30404:35;:75::i;:::-;29535:952;29341:1146;;;;;:::o;31805:729::-;31972:1;31958:16;;:2;:16;;;;31950:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32025:16;32044:12;:10;:12::i;:::-;32025:31;;32067:20;32090:21;32108:2;32090:17;:21::i;:::-;32067:44;;32122:24;32149:25;32167:6;32149:17;:25::i;:::-;32122:52;;32187:66;32208:8;32226:1;32230:2;32234:3;32239:7;32248:4;32187:20;:66::i;:::-;32287:6;32266:9;:13;32276:2;32266:13;;;;;;;;;;;:17;32280:2;32266:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32346:2;32309:52;;32342:1;32309:52;;32324:8;32309:52;;;32350:2;32354:6;32309:52;;;;;;;:::i;:::-;;;;;;;;32374:65;32394:8;32412:1;32416:2;32420:3;32425:7;32434:4;32374:19;:65::i;:::-;32452:74;32483:8;32501:1;32505:2;32509;32513:6;32521:4;32452:30;:74::i;:::-;31939:595;;;31805:729;;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;36075:331::-;36230:8;36221:17;;:5;:17;;;;36213:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36333:8;36295:18;:25;36314:5;36295:25;;;;;;;;;;;;;;;:35;36321:8;36295:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36379:8;36357:41;;36372:5;36357:41;;;36389:8;36357:41;;;;;;:::i;:::-;;;;;;;;36075:331;;;:::o;28009:974::-;28211:1;28197:16;;:2;:16;;;;28189:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28268:16;28287:12;:10;:12::i;:::-;28268:31;;28310:20;28333:21;28351:2;28333:17;:21::i;:::-;28310:44;;28365:24;28392:25;28410:6;28392:17;:25::i;:::-;28365:52;;28430:60;28451:8;28461:4;28467:2;28471:3;28476:7;28485:4;28430:20;:60::i;:::-;28503:19;28525:9;:13;28535:2;28525:13;;;;;;;;;;;:19;28539:4;28525:19;;;;;;;;;;;;;;;;28503:41;;28578:6;28563:11;:21;;28555:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28703:6;28689:11;:20;28667:9;:13;28677:2;28667:13;;;;;;;;;;;:19;28681:4;28667:19;;;;;;;;;;;;;;;:42;;;;28752:6;28731:9;:13;28741:2;28731:13;;;;;;;;;;;:17;28745:2;28731:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28807:2;28776:46;;28801:4;28776:46;;28791:8;28776:46;;;28811:2;28815:6;28776:46;;;;;;;:::i;:::-;;;;;;;;28835:59;28855:8;28865:4;28871:2;28875:3;28880:7;28889:4;28835:19;:59::i;:::-;28907:68;28938:8;28948:4;28954:2;28958;28962:6;28970:4;28907:30;:68::i;:::-;28178:805;;;;28009:974;;;;;:::o;37362:221::-;;;;;;;:::o;38538:220::-;;;;;;;:::o;39518:813::-;39758:15;:2;:13;;;:15::i;:::-;39754:570;;;39811:2;39794:43;;;39838:8;39848:4;39854:3;39859:7;39868:4;39794:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39790:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40186:6;40179:14;;;;;;;;;;;:::i;:::-;;;;;;;;39790:523;;;40235:62;;;;;;;;;;:::i;:::-;;;;;;;;39790:523;39967:48;;;39955:60;;;:8;:60;;;;39951:159;;40040:50;;;;;;;;;;:::i;:::-;;;;;;;;39951:159;39874:251;39754:570;39518:813;;;;;;:::o;40339:198::-;40405:16;40434:22;40473:1;40459:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40434:41;;40497:7;40486:5;40492:1;40486:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40524:5;40517:12;;;40339:198;;;:::o;38766:744::-;38981:15;:2;:13;;;:15::i;:::-;38977:526;;;39034:2;39017:38;;;39056:8;39066:4;39072:2;39076:6;39084:4;39017:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39013:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39365:6;39358:14;;;;;;;;;;;:::i;:::-;;;;;;;;39013:479;;;39414:62;;;;;;;;;;:::i;:::-;;;;;;;;39013:479;39151:43;;;39139:55;;;:8;:55;;;;39135:154;;39219:50;;;;;;;;;;:::i;:::-;;;;;;;;39135:154;39090:214;38977:526;38766:744;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:99::-;5994:6;6028:5;6022:12;6012:22;;5942:99;;;:::o;6047:169::-;6131:11;6165:6;6160:3;6153:19;6205:4;6200:3;6196:14;6181:29;;6047:169;;;;:::o;6222:307::-;6290:1;6300:113;6314:6;6311:1;6308:13;6300:113;;;6399:1;6394:3;6390:11;6384:18;6380:1;6375:3;6371:11;6364:39;6336:2;6333:1;6329:10;6324:15;;6300:113;;;6431:6;6428:1;6425:13;6422:101;;;6511:1;6502:6;6497:3;6493:16;6486:27;6422:101;6271:258;6222:307;;;:::o;6535:364::-;6623:3;6651:39;6684:5;6651:39;:::i;:::-;6706:71;6770:6;6765:3;6706:71;:::i;:::-;6699:78;;6786:52;6831:6;6826:3;6819:4;6812:5;6808:16;6786:52;:::i;:::-;6863:29;6885:6;6863:29;:::i;:::-;6858:3;6854:39;6847:46;;6627:272;6535:364;;;;:::o;6905:313::-;7018:4;7056:2;7045:9;7041:18;7033:26;;7105:9;7099:4;7095:20;7091:1;7080:9;7076:17;7069:47;7133:78;7206:4;7197:6;7133:78;:::i;:::-;7125:86;;6905:313;;;;:::o;7224:329::-;7283:6;7332:2;7320:9;7311:7;7307:23;7303:32;7300:119;;;7338:79;;:::i;:::-;7300:119;7458:1;7483:53;7528:7;7519:6;7508:9;7504:22;7483:53;:::i;:::-;7473:63;;7429:117;7224:329;;;;:::o;7559:311::-;7636:4;7726:18;7718:6;7715:30;7712:56;;;7748:18;;:::i;:::-;7712:56;7798:4;7790:6;7786:17;7778:25;;7858:4;7852;7848:15;7840:23;;7559:311;;;:::o;7876:117::-;7985:1;7982;7975:12;8016:710;8112:5;8137:81;8153:64;8210:6;8153:64;:::i;:::-;8137:81;:::i;:::-;8128:90;;8238:5;8267:6;8260:5;8253:21;8301:4;8294:5;8290:16;8283:23;;8354:4;8346:6;8342:17;8334:6;8330:30;8383:3;8375:6;8372:15;8369:122;;;8402:79;;:::i;:::-;8369:122;8517:6;8500:220;8534:6;8529:3;8526:15;8500:220;;;8609:3;8638:37;8671:3;8659:10;8638:37;:::i;:::-;8633:3;8626:50;8705:4;8700:3;8696:14;8689:21;;8576:144;8560:4;8555:3;8551:14;8544:21;;8500:220;;;8504:21;8118:608;;8016:710;;;;;:::o;8749:370::-;8820:5;8869:3;8862:4;8854:6;8850:17;8846:27;8836:122;;8877:79;;:::i;:::-;8836:122;8994:6;8981:20;9019:94;9109:3;9101:6;9094:4;9086:6;9082:17;9019:94;:::i;:::-;9010:103;;8826:293;8749:370;;;;:::o;9125:307::-;9186:4;9276:18;9268:6;9265:30;9262:56;;;9298:18;;:::i;:::-;9262:56;9336:29;9358:6;9336:29;:::i;:::-;9328:37;;9420:4;9414;9410:15;9402:23;;9125:307;;;:::o;9438:410::-;9515:5;9540:65;9556:48;9597:6;9556:48;:::i;:::-;9540:65;:::i;:::-;9531:74;;9628:6;9621:5;9614:21;9666:4;9659:5;9655:16;9704:3;9695:6;9690:3;9686:16;9683:25;9680:112;;;9711:79;;:::i;:::-;9680:112;9801:41;9835:6;9830:3;9825;9801:41;:::i;:::-;9521:327;9438:410;;;;;:::o;9867:338::-;9922:5;9971:3;9964:4;9956:6;9952:17;9948:27;9938:122;;9979:79;;:::i;:::-;9938:122;10096:6;10083:20;10121:78;10195:3;10187:6;10180:4;10172:6;10168:17;10121:78;:::i;:::-;10112:87;;9928:277;9867:338;;;;:::o;10211:1509::-;10365:6;10373;10381;10389;10397;10446:3;10434:9;10425:7;10421:23;10417:33;10414:120;;;10453:79;;:::i;:::-;10414:120;10573:1;10598:53;10643:7;10634:6;10623:9;10619:22;10598:53;:::i;:::-;10588:63;;10544:117;10700:2;10726:53;10771:7;10762:6;10751:9;10747:22;10726:53;:::i;:::-;10716:63;;10671:118;10856:2;10845:9;10841:18;10828:32;10887:18;10879:6;10876:30;10873:117;;;10909:79;;:::i;:::-;10873:117;11014:78;11084:7;11075:6;11064:9;11060:22;11014:78;:::i;:::-;11004:88;;10799:303;11169:2;11158:9;11154:18;11141:32;11200:18;11192:6;11189:30;11186:117;;;11222:79;;:::i;:::-;11186:117;11327:78;11397:7;11388:6;11377:9;11373:22;11327:78;:::i;:::-;11317:88;;11112:303;11482:3;11471:9;11467:19;11454:33;11514:18;11506:6;11503:30;11500:117;;;11536:79;;:::i;:::-;11500:117;11641:62;11695:7;11686:6;11675:9;11671:22;11641:62;:::i;:::-;11631:72;;11425:288;10211:1509;;;;;;;;:::o;11726:474::-;11794:6;11802;11851:2;11839:9;11830:7;11826:23;11822:32;11819:119;;;11857:79;;:::i;:::-;11819:119;11977:1;12002:53;12047:7;12038:6;12027:9;12023:22;12002:53;:::i;:::-;11992:63;;11948:117;12104:2;12130:53;12175:7;12166:6;12155:9;12151:22;12130:53;:::i;:::-;12120:63;;12075:118;11726:474;;;;;:::o;12206:311::-;12283:4;12373:18;12365:6;12362:30;12359:56;;;12395:18;;:::i;:::-;12359:56;12445:4;12437:6;12433:17;12425:25;;12505:4;12499;12495:15;12487:23;;12206:311;;;:::o;12540:710::-;12636:5;12661:81;12677:64;12734:6;12677:64;:::i;:::-;12661:81;:::i;:::-;12652:90;;12762:5;12791:6;12784:5;12777:21;12825:4;12818:5;12814:16;12807:23;;12878:4;12870:6;12866:17;12858:6;12854:30;12907:3;12899:6;12896:15;12893:122;;;12926:79;;:::i;:::-;12893:122;13041:6;13024:220;13058:6;13053:3;13050:15;13024:220;;;13133:3;13162:37;13195:3;13183:10;13162:37;:::i;:::-;13157:3;13150:50;13229:4;13224:3;13220:14;13213:21;;13100:144;13084:4;13079:3;13075:14;13068:21;;13024:220;;;13028:21;12642:608;;12540:710;;;;;:::o;13273:370::-;13344:5;13393:3;13386:4;13378:6;13374:17;13370:27;13360:122;;13401:79;;:::i;:::-;13360:122;13518:6;13505:20;13543:94;13633:3;13625:6;13618:4;13610:6;13606:17;13543:94;:::i;:::-;13534:103;;13350:293;13273:370;;;;:::o;13649:894::-;13767:6;13775;13824:2;13812:9;13803:7;13799:23;13795:32;13792:119;;;13830:79;;:::i;:::-;13792:119;13978:1;13967:9;13963:17;13950:31;14008:18;14000:6;13997:30;13994:117;;;14030:79;;:::i;:::-;13994:117;14135:78;14205:7;14196:6;14185:9;14181:22;14135:78;:::i;:::-;14125:88;;13921:302;14290:2;14279:9;14275:18;14262:32;14321:18;14313:6;14310:30;14307:117;;;14343:79;;:::i;:::-;14307:117;14448:78;14518:7;14509:6;14498:9;14494:22;14448:78;:::i;:::-;14438:88;;14233:303;13649:894;;;;;:::o;14549:114::-;14616:6;14650:5;14644:12;14634:22;;14549:114;;;:::o;14669:184::-;14768:11;14802:6;14797:3;14790:19;14842:4;14837:3;14833:14;14818:29;;14669:184;;;;:::o;14859:132::-;14926:4;14949:3;14941:11;;14979:4;14974:3;14970:14;14962:22;;14859:132;;;:::o;14997:108::-;15074:24;15092:5;15074:24;:::i;:::-;15069:3;15062:37;14997:108;;:::o;15111:179::-;15180:10;15201:46;15243:3;15235:6;15201:46;:::i;:::-;15279:4;15274:3;15270:14;15256:28;;15111:179;;;;:::o;15296:113::-;15366:4;15398;15393:3;15389:14;15381:22;;15296:113;;;:::o;15445:732::-;15564:3;15593:54;15641:5;15593:54;:::i;:::-;15663:86;15742:6;15737:3;15663:86;:::i;:::-;15656:93;;15773:56;15823:5;15773:56;:::i;:::-;15852:7;15883:1;15868:284;15893:6;15890:1;15887:13;15868:284;;;15969:6;15963:13;15996:63;16055:3;16040:13;15996:63;:::i;:::-;15989:70;;16082:60;16135:6;16082:60;:::i;:::-;16072:70;;15928:224;15915:1;15912;15908:9;15903:14;;15868:284;;;15872:14;16168:3;16161:10;;15569:608;;;15445:732;;;;:::o;16183:373::-;16326:4;16364:2;16353:9;16349:18;16341:26;;16413:9;16407:4;16403:20;16399:1;16388:9;16384:17;16377:47;16441:108;16544:4;16535:6;16441:108;:::i;:::-;16433:116;;16183:373;;;;:::o;16562:118::-;16649:24;16667:5;16649:24;:::i;:::-;16644:3;16637:37;16562:118;;:::o;16686:222::-;16779:4;16817:2;16806:9;16802:18;16794:26;;16830:71;16898:1;16887:9;16883:17;16874:6;16830:71;:::i;:::-;16686:222;;;;:::o;16914:116::-;16984:21;16999:5;16984:21;:::i;:::-;16977:5;16974:32;16964:60;;17020:1;17017;17010:12;16964:60;16914:116;:::o;17036:133::-;17079:5;17117:6;17104:20;17095:29;;17133:30;17157:5;17133:30;:::i;:::-;17036:133;;;;:::o;17175:468::-;17240:6;17248;17297:2;17285:9;17276:7;17272:23;17268:32;17265:119;;;17303:79;;:::i;:::-;17265:119;17423:1;17448:53;17493:7;17484:6;17473:9;17469:22;17448:53;:::i;:::-;17438:63;;17394:117;17550:2;17576:50;17618:7;17609:6;17598:9;17594:22;17576:50;:::i;:::-;17566:60;;17521:115;17175:468;;;;;:::o;17649:474::-;17717:6;17725;17774:2;17762:9;17753:7;17749:23;17745:32;17742:119;;;17780:79;;:::i;:::-;17742:119;17900:1;17925:53;17970:7;17961:6;17950:9;17946:22;17925:53;:::i;:::-;17915:63;;17871:117;18027:2;18053:53;18098:7;18089:6;18078:9;18074:22;18053:53;:::i;:::-;18043:63;;17998:118;17649:474;;;;;:::o;18129:1089::-;18233:6;18241;18249;18257;18265;18314:3;18302:9;18293:7;18289:23;18285:33;18282:120;;;18321:79;;:::i;:::-;18282:120;18441:1;18466:53;18511:7;18502:6;18491:9;18487:22;18466:53;:::i;:::-;18456:63;;18412:117;18568:2;18594:53;18639:7;18630:6;18619:9;18615:22;18594:53;:::i;:::-;18584:63;;18539:118;18696:2;18722:53;18767:7;18758:6;18747:9;18743:22;18722:53;:::i;:::-;18712:63;;18667:118;18824:2;18850:53;18895:7;18886:6;18875:9;18871:22;18850:53;:::i;:::-;18840:63;;18795:118;18980:3;18969:9;18965:19;18952:33;19012:18;19004:6;19001:30;18998:117;;;19034:79;;:::i;:::-;18998:117;19139:62;19193:7;19184:6;19173:9;19169:22;19139:62;:::i;:::-;19129:72;;18923:288;18129:1089;;;;;;;;:::o;19224:329::-;19283:6;19332:2;19320:9;19311:7;19307:23;19303:32;19300:119;;;19338:79;;:::i;:::-;19300:119;19458:1;19483:53;19528:7;19519:6;19508:9;19504:22;19483:53;:::i;:::-;19473:63;;19429:117;19224:329;;;;:::o;19559:230::-;19699:34;19695:1;19687:6;19683:14;19676:58;19768:13;19763:2;19755:6;19751:15;19744:38;19559:230;:::o;19795:366::-;19937:3;19958:67;20022:2;20017:3;19958:67;:::i;:::-;19951:74;;20034:93;20123:3;20034:93;:::i;:::-;20152:2;20147:3;20143:12;20136:19;;19795:366;;;:::o;20167:419::-;20333:4;20371:2;20360:9;20356:18;20348:26;;20420:9;20414:4;20410:20;20406:1;20395:9;20391:17;20384:47;20448:131;20574:4;20448:131;:::i;:::-;20440:139;;20167:419;;;:::o;20592:182::-;20732:34;20728:1;20720:6;20716:14;20709:58;20592:182;:::o;20780:366::-;20922:3;20943:67;21007:2;21002:3;20943:67;:::i;:::-;20936:74;;21019:93;21108:3;21019:93;:::i;:::-;21137:2;21132:3;21128:12;21121:19;;20780:366;;;:::o;21152:419::-;21318:4;21356:2;21345:9;21341:18;21333:26;;21405:9;21399:4;21395:20;21391:1;21380:9;21376:17;21369:47;21433:131;21559:4;21433:131;:::i;:::-;21425:139;;21152:419;;;:::o;21577:180::-;21625:77;21622:1;21615:88;21722:4;21719:1;21712:15;21746:4;21743:1;21736:15;21763:320;21807:6;21844:1;21838:4;21834:12;21824:22;;21891:1;21885:4;21881:12;21912:18;21902:81;;21968:4;21960:6;21956:17;21946:27;;21902:81;22030:2;22022:6;22019:14;21999:18;21996:38;21993:84;;;22049:18;;:::i;:::-;21993:84;21814:269;21763:320;;;:::o;22089:237::-;22229:34;22225:1;22217:6;22213:14;22206:58;22298:20;22293:2;22285:6;22281:15;22274:45;22089:237;:::o;22332:366::-;22474:3;22495:67;22559:2;22554:3;22495:67;:::i;:::-;22488:74;;22571:93;22660:3;22571:93;:::i;:::-;22689:2;22684:3;22680:12;22673:19;;22332:366;;;:::o;22704:419::-;22870:4;22908:2;22897:9;22893:18;22885:26;;22957:9;22951:4;22947:20;22943:1;22932:9;22928:17;22921:47;22985:131;23111:4;22985:131;:::i;:::-;22977:139;;22704:419;;;:::o;23129:228::-;23269:34;23265:1;23257:6;23253:14;23246:58;23338:11;23333:2;23325:6;23321:15;23314:36;23129:228;:::o;23363:366::-;23505:3;23526:67;23590:2;23585:3;23526:67;:::i;:::-;23519:74;;23602:93;23691:3;23602:93;:::i;:::-;23720:2;23715:3;23711:12;23704:19;;23363:366;;;:::o;23735:419::-;23901:4;23939:2;23928:9;23924:18;23916:26;;23988:9;23982:4;23978:20;23974:1;23963:9;23959:17;23952:47;24016:131;24142:4;24016:131;:::i;:::-;24008:139;;23735:419;;;:::o;24160:180::-;24208:77;24205:1;24198:88;24305:4;24302:1;24295:15;24329:4;24326:1;24319:15;24346:180;24394:77;24391:1;24384:88;24491:4;24488:1;24481:15;24515:4;24512:1;24505:15;24532:233;24571:3;24594:24;24612:5;24594:24;:::i;:::-;24585:33;;24640:66;24633:5;24630:77;24627:103;;;24710:18;;:::i;:::-;24627:103;24757:1;24750:5;24746:13;24739:20;;24532:233;;;:::o;24771:228::-;24911:34;24907:1;24899:6;24895:14;24888:58;24980:11;24975:2;24967:6;24963:15;24956:36;24771:228;:::o;25005:366::-;25147:3;25168:67;25232:2;25227:3;25168:67;:::i;:::-;25161:74;;25244:93;25333:3;25244:93;:::i;:::-;25362:2;25357:3;25353:12;25346:19;;25005:366;;;:::o;25377:419::-;25543:4;25581:2;25570:9;25566:18;25558:26;;25630:9;25624:4;25620:20;25616:1;25605:9;25601:17;25594:47;25658:131;25784:4;25658:131;:::i;:::-;25650:139;;25377:419;;;:::o;25802:225::-;25942:34;25938:1;25930:6;25926:14;25919:58;26011:8;26006:2;25998:6;25994:15;25987:33;25802:225;:::o;26033:366::-;26175:3;26196:67;26260:2;26255:3;26196:67;:::i;:::-;26189:74;;26272:93;26361:3;26272:93;:::i;:::-;26390:2;26385:3;26381:12;26374:19;;26033:366;;;:::o;26405:419::-;26571:4;26609:2;26598:9;26594:18;26586:26;;26658:9;26652:4;26648:20;26644:1;26633:9;26629:17;26622:47;26686:131;26812:4;26686:131;:::i;:::-;26678:139;;26405:419;;;:::o;26830:227::-;26970:34;26966:1;26958:6;26954:14;26947:58;27039:10;27034:2;27026:6;27022:15;27015:35;26830:227;:::o;27063:366::-;27205:3;27226:67;27290:2;27285:3;27226:67;:::i;:::-;27219:74;;27302:93;27391:3;27302:93;:::i;:::-;27420:2;27415:3;27411:12;27404:19;;27063:366;;;:::o;27435:419::-;27601:4;27639:2;27628:9;27624:18;27616:26;;27688:9;27682:4;27678:20;27674:1;27663:9;27659:17;27652:47;27716:131;27842:4;27716:131;:::i;:::-;27708:139;;27435:419;;;:::o;27860:224::-;28000:34;27996:1;27988:6;27984:14;27977:58;28069:7;28064:2;28056:6;28052:15;28045:32;27860:224;:::o;28090:366::-;28232:3;28253:67;28317:2;28312:3;28253:67;:::i;:::-;28246:74;;28329:93;28418:3;28329:93;:::i;:::-;28447:2;28442:3;28438:12;28431:19;;28090:366;;;:::o;28462:419::-;28628:4;28666:2;28655:9;28651:18;28643:26;;28715:9;28709:4;28705:20;28701:1;28690:9;28686:17;28679:47;28743:131;28869:4;28743:131;:::i;:::-;28735:139;;28462:419;;;:::o;28887:229::-;29027:34;29023:1;29015:6;29011:14;29004:58;29096:12;29091:2;29083:6;29079:15;29072:37;28887:229;:::o;29122:366::-;29264:3;29285:67;29349:2;29344:3;29285:67;:::i;:::-;29278:74;;29361:93;29450:3;29361:93;:::i;:::-;29479:2;29474:3;29470:12;29463:19;;29122:366;;;:::o;29494:419::-;29660:4;29698:2;29687:9;29683:18;29675:26;;29747:9;29741:4;29737:20;29733:1;29722:9;29718:17;29711:47;29775:131;29901:4;29775:131;:::i;:::-;29767:139;;29494:419;;;:::o;29919:305::-;29959:3;29978:20;29996:1;29978:20;:::i;:::-;29973:25;;30012:20;30030:1;30012:20;:::i;:::-;30007:25;;30166:1;30098:66;30094:74;30091:1;30088:81;30085:107;;;30172:18;;:::i;:::-;30085:107;30216:1;30213;30209:9;30202:16;;29919:305;;;;:::o;30230:634::-;30451:4;30489:2;30478:9;30474:18;30466:26;;30538:9;30532:4;30528:20;30524:1;30513:9;30509:17;30502:47;30566:108;30669:4;30660:6;30566:108;:::i;:::-;30558:116;;30721:9;30715:4;30711:20;30706:2;30695:9;30691:18;30684:48;30749:108;30852:4;30843:6;30749:108;:::i;:::-;30741:116;;30230:634;;;;;:::o;30870:220::-;31010:34;31006:1;30998:6;30994:14;30987:58;31079:3;31074:2;31066:6;31062:15;31055:28;30870:220;:::o;31096:366::-;31238:3;31259:67;31323:2;31318:3;31259:67;:::i;:::-;31252:74;;31335:93;31424:3;31335:93;:::i;:::-;31453:2;31448:3;31444:12;31437:19;;31096:366;;;:::o;31468:419::-;31634:4;31672:2;31661:9;31657:18;31649:26;;31721:9;31715:4;31711:20;31707:1;31696:9;31692:17;31685:47;31749:131;31875:4;31749:131;:::i;:::-;31741:139;;31468:419;;;:::o;31893:332::-;32014:4;32052:2;32041:9;32037:18;32029:26;;32065:71;32133:1;32122:9;32118:17;32109:6;32065:71;:::i;:::-;32146:72;32214:2;32203:9;32199:18;32190:6;32146:72;:::i;:::-;31893:332;;;;;:::o;32231:228::-;32371:34;32367:1;32359:6;32355:14;32348:58;32440:11;32435:2;32427:6;32423:15;32416:36;32231:228;:::o;32465:366::-;32607:3;32628:67;32692:2;32687:3;32628:67;:::i;:::-;32621:74;;32704:93;32793:3;32704:93;:::i;:::-;32822:2;32817:3;32813:12;32806:19;;32465:366;;;:::o;32837:419::-;33003:4;33041:2;33030:9;33026:18;33018:26;;33090:9;33084:4;33080:20;33076:1;33065:9;33061:17;33054:47;33118:131;33244:4;33118:131;:::i;:::-;33110:139;;32837:419;;;:::o;33262:98::-;33313:6;33347:5;33341:12;33331:22;;33262:98;;;:::o;33366:168::-;33449:11;33483:6;33478:3;33471:19;33523:4;33518:3;33514:14;33499:29;;33366:168;;;;:::o;33540:360::-;33626:3;33654:38;33686:5;33654:38;:::i;:::-;33708:70;33771:6;33766:3;33708:70;:::i;:::-;33701:77;;33787:52;33832:6;33827:3;33820:4;33813:5;33809:16;33787:52;:::i;:::-;33864:29;33886:6;33864:29;:::i;:::-;33859:3;33855:39;33848:46;;33630:270;33540:360;;;;:::o;33906:1053::-;34229:4;34267:3;34256:9;34252:19;34244:27;;34281:71;34349:1;34338:9;34334:17;34325:6;34281:71;:::i;:::-;34362:72;34430:2;34419:9;34415:18;34406:6;34362:72;:::i;:::-;34481:9;34475:4;34471:20;34466:2;34455:9;34451:18;34444:48;34509:108;34612:4;34603:6;34509:108;:::i;:::-;34501:116;;34664:9;34658:4;34654:20;34649:2;34638:9;34634:18;34627:48;34692:108;34795:4;34786:6;34692:108;:::i;:::-;34684:116;;34848:9;34842:4;34838:20;34832:3;34821:9;34817:19;34810:49;34876:76;34947:4;34938:6;34876:76;:::i;:::-;34868:84;;33906:1053;;;;;;;;:::o;34965:141::-;35021:5;35052:6;35046:13;35037:22;;35068:32;35094:5;35068:32;:::i;:::-;34965:141;;;;:::o;35112:349::-;35181:6;35230:2;35218:9;35209:7;35205:23;35201:32;35198:119;;;35236:79;;:::i;:::-;35198:119;35356:1;35381:63;35436:7;35427:6;35416:9;35412:22;35381:63;:::i;:::-;35371:73;;35327:127;35112:349;;;;:::o;35467:106::-;35511:8;35560:5;35555:3;35551:15;35530:36;;35467:106;;;:::o;35579:183::-;35614:3;35652:1;35634:16;35631:23;35628:128;;;35690:1;35687;35684;35669:23;35712:34;35743:1;35737:8;35712:34;:::i;:::-;35705:41;;35628:128;35579:183;:::o;35768:711::-;35807:3;35845:4;35827:16;35824:26;35821:39;;;35853:5;;35821:39;35882:20;;:::i;:::-;35957:1;35939:16;35935:24;35932:1;35926:4;35911:49;35990:4;35984:11;36089:16;36082:4;36074:6;36070:17;36067:39;36034:18;36026:6;36023:30;36007:113;36004:146;;;36135:5;;;;36004:146;36181:6;36175:4;36171:17;36217:3;36211:10;36244:18;36236:6;36233:30;36230:43;;;36266:5;;;;;;36230:43;36314:6;36307:4;36302:3;36298:14;36294:27;36373:1;36355:16;36351:24;36345:4;36341:35;36336:3;36333:44;36330:57;;;36380:5;;;;;;;36330:57;36397;36445:6;36439:4;36435:17;36427:6;36423:30;36417:4;36397:57;:::i;:::-;36470:3;36463:10;;35811:668;;;;;35768:711;;:::o;36485:239::-;36625:34;36621:1;36613:6;36609:14;36602:58;36694:22;36689:2;36681:6;36677:15;36670:47;36485:239;:::o;36730:366::-;36872:3;36893:67;36957:2;36952:3;36893:67;:::i;:::-;36886:74;;36969:93;37058:3;36969:93;:::i;:::-;37087:2;37082:3;37078:12;37071:19;;36730:366;;;:::o;37102:419::-;37268:4;37306:2;37295:9;37291:18;37283:26;;37355:9;37349:4;37345:20;37341:1;37330:9;37326:17;37319:47;37383:131;37509:4;37383:131;:::i;:::-;37375:139;;37102:419;;;:::o;37527:227::-;37667:34;37663:1;37655:6;37651:14;37644:58;37736:10;37731:2;37723:6;37719:15;37712:35;37527:227;:::o;37760:366::-;37902:3;37923:67;37987:2;37982:3;37923:67;:::i;:::-;37916:74;;37999:93;38088:3;37999:93;:::i;:::-;38117:2;38112:3;38108:12;38101:19;;37760:366;;;:::o;38132:419::-;38298:4;38336:2;38325:9;38321:18;38313:26;;38385:9;38379:4;38375:20;38371:1;38360:9;38356:17;38349:47;38413:131;38539:4;38413:131;:::i;:::-;38405:139;;38132:419;;;:::o;38557:751::-;38780:4;38818:3;38807:9;38803:19;38795:27;;38832:71;38900:1;38889:9;38885:17;38876:6;38832:71;:::i;:::-;38913:72;38981:2;38970:9;38966:18;38957:6;38913:72;:::i;:::-;38995;39063:2;39052:9;39048:18;39039:6;38995:72;:::i;:::-;39077;39145:2;39134:9;39130:18;39121:6;39077:72;:::i;:::-;39197:9;39191:4;39187:20;39181:3;39170:9;39166:19;39159:49;39225:76;39296:4;39287:6;39225:76;:::i;:::-;39217:84;;38557:751;;;;;;;;:::o
Swarm Source
ipfs://9ca7f16d9cdc3c09076ac122cceda5af4f72011aee88fefc015fb803b42a0f8d
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.