Token MiningGame
Overview ERC-1155
Total Supply:
0 MING
Holders:
5,903 addresses
Transfers:
-
Contract:
Official Site:
[ Download CSV Export ]
OVERVIEW
Mining.game is a Free 2 play, Play 2 Earn and Learn 2 Earn crypto mining simulator game centered around the history of cryptocurrencies, replacing power-hungry mining hardware with NFTs.Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MiningGame
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-07 */ // SPDX-License-Identifier: MIT /** ███╗ ███╗██╗███╗ ██╗██╗███╗ ██╗ ██████╗ ██████╗ █████╗ ███╗ ███╗███████╗ ████╗ ████║██║████╗ ██║██║████╗ ██║██╔════╝ ██╔════╝ ██╔══██╗████╗ ████║██╔════╝ ██╔████╔██║██║██╔██╗ ██║██║██╔██╗ ██║██║ ███╗ ██║ ███╗███████║██╔████╔██║█████╗ ██║╚██╔╝██║██║██║╚██╗██║██║██║╚██╗██║██║ ██║ ██║ ██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ╚═╝ ██║██║██║ ╚████║██║██║ ╚████║╚██████╔╝██╗╚██████╔╝██║ ██║██║ ╚═╝ ██║███████╗ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝ www.Mining.game is a Free to play, Play to Earn NFT based mining simulator game. This is the game items contract. @custom:security-contact [email protected] Initial items: Id 1 = Gaming PC, free mint 1 02 2000 5005 001 00 00 Id 2 = Genesis Badge * 1 01 0000 0000 000 10 10 Id 3 = Kirtex XL1 CPU 1 03 0003 7002 002 00 00 Id 4 = Oblivia TX120 GPU 1 04 0005 0010 005 00 00 Id 5 = MAD GP50 GPU 1 04 0010 0016 009 00 00 Explaination of the specs number: Generation Hashrate StakeWeight Efficiency multiplier \ Component | Wattage | Luck Boost / \ \ | | | | / 0 00 0000 0000 000 00 00 Read more on https:mining.game/ */ // File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _ownerBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] -= amounts[i]; } } } } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } } // File: MiningGameFinished.sol pragma solidity ^0.8.2; contract MiningGame is ERC1155, Ownable, ERC1155Burnable, ERC1155Supply { string public name; string public symbol; uint256[] public supplies = [0, 10**18, 100, 10000, 4884, 2611]; uint256[] public minted = [0, 0, 0, 0, 0, 0]; // ether = MATIC uint256[] public rates = [0 ether, 0 ether, 200 ether, 2 ether, 7 ether, 12 ether]; uint256[] public specs = [10, 102200050000000000, 101000000000001010, 103300070000000000, 104500100000000000, 104001000160090000]; mapping(uint => string) public tokenURI; constructor() ERC1155("https://api.mining.game/{id}.json") { name = "MiningGame"; symbol = "MING"; } // Initial address for contract metadata function contractURI() public pure returns (string memory) { return "https://api.mining.game/Storefront-Metadata"; } // Owner function to upgrade address for metadata and images function setURI(uint _id, string calldata _uri) external onlyOwner { require(bytes(_uri).length > 0); tokenURI[_id] = _uri; emit URI(_uri, _id); } // Public free mint function function freemint(uint256 id, uint256 amount) public { require(balanceOf(msg.sender, id) == 0, 'You can only own one FREE PC NFT'); require(id <=1,"Not a free mint"); require(amount <=1,"Only one Gamer PC NFT per address"); require(id !=0, "Token don't exist"); _mint(msg.sender, id, amount, ""); } // Owner mint functions function ownermint(uint256 id, uint256 amount) public onlyOwner { require(id <= supplies.length, "Token don't exist"); require(totalSupply(id) + amount <= supplies[id], "Not enough supply"); _mint(msg.sender, id, amount, ""); } // Owner Batch Minting function ownerBatch(address to, uint256[] memory ids, uint256[] memory amounts) public onlyOwner { _ownerBatch(to, ids, amounts, ""); } // Add new game items function AddItem(uint newsupplies, uint newminted, uint newrate, uint newspecs) public onlyOwner { supplies.push(newsupplies); minted.push(newminted); rates.push(newrate); specs.push(newspecs); } // Check Specs function _specs(uint256 id) public view virtual returns (uint256) { return specs[id]; } // Owner withdraw funds function withdraw() public onlyOwner { require(address(this).balance > 0, "Balance is 0"); payable(owner()).transfer(address(this).balance); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } }
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":"uint256","name":"newsupplies","type":"uint256"},{"internalType":"uint256","name":"newminted","type":"uint256"},{"internalType":"uint256","name":"newrate","type":"uint256"},{"internalType":"uint256","name":"newspecs","type":"uint256"}],"name":"AddItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"_specs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"freemint","outputs":[],"stateMutability":"nonpayable","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":"","type":"uint256"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"ownerBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownermint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"specs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61014060405260006080908152670de0b6b3a764000060a052606460c05261271060e05261131461010052610a3361012052620000419060079060066200025d565b506040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915262000084906008906006620002b8565b506040805160c08101825260008082526020820152680ad78ebc5ac620000091810191909152671bc16d674ec800006060820152676124fee993bc0000608082015267a688906bd8b0000060a0820152620000e4906009906006620002fb565b506040805160c081018252600a80825267016b16676c46f4006020830152670166d2f7025083f29282019290925267016efeddc99f7c00606082015267017342498b7e280060808201526701717c5bced3d79060a08201526200014a919060066200025d565b503480156200015857600080fd5b5060405180606001604052806021815260200162002be4602191396200017e81620001f2565b506200018a336200020b565b60408051808201909152600a808252694d696e696e6747616d6560b01b6020909201918252620001bd9160059162000344565b50604080518082019091526004808252634d494e4760e01b6020909201918252620001eb9160069162000344565b5062000415565b80516200020790600290602084019062000344565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054828255906000526020600020908101928215620002a6579160200282015b82811115620002a657825182906001600160401b03169055916020019190600101906200027e565b50620002b4929150620003c1565b5090565b828054828255906000526020600020908101928215620002a6579160200282015b82811115620002a6578251829060ff16905591602001919060010190620002d9565b828054828255906000526020600020908101928215620002a6579160200282015b82811115620002a657825182906001600160481b03169055916020019190600101906200031c565b8280546200035290620003d8565b90600052602060002090601f016020900481019282620003765760008555620002a6565b82601f106200039157805160ff1916838001178555620002a6565b82800160010185558215620002a6579182015b82811115620002a6578251825591602001919060010190620003a4565b5b80821115620002b45760008155600101620003c2565b600181811c90821680620003ed57607f821691505b602082108114156200040f57634e487b7160e01b600052602260045260246000fd5b50919050565b6127bf80620004256000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80637dc0bf3f11610104578063c87b56dd116100a2578063e985e9c511610071578063e985e9c5146103f8578063f242432a14610434578063f2fde38b14610447578063f5298aca1461045a57600080fd5b8063c87b56dd146103b7578063dd418ae2146103ca578063e75e0a45146103dd578063e8a3d485146103f057600080fd5b806395d89b41116100de57806395d89b4114610369578063a22cb46514610371578063af2de08614610384578063bd85b0391461039757600080fd5b80637dc0bf3f14610328578063862440e21461033b5780638da5cb5b1461034e57600080fd5b80632eb2c2d61161017c57806360d2d54c1161014b57806360d2d54c146102e75780636b20c454146102fa578063715018a61461030d5780637cb5f2631461031557600080fd5b80632eb2c2d61461028a5780633ccfd60b1461029d5780634e1273f4146102a55780634f558e79146102c557600080fd5b806309feb9df116101b857806309feb9df1461023c5780630e89341c1461025157806326f1a1fd146102645780632bcf09ff1461027757600080fd5b8062fdd58e146101de57806301ffc9a71461020457806306fdde0314610227575b600080fd5b6101f16101ec366004611c33565b61046d565b6040519081526020015b60405180910390f35b610217610212366004611c73565b610504565b60405190151581526020016101fb565b61022f610556565b6040516101fb9190611ce4565b61024f61024a366004611dcf565b6105e4565b005b61022f61025f366004611e43565b61062e565b6101f1610272366004611e43565b6106c2565b6101f1610285366004611e43565b6106e3565b61024f610298366004611ed0565b61070a565b61024f6107a1565b6102b86102b3366004611f7a565b610846565b6040516101fb9190612080565b6102176102d3366004611e43565b600090815260046020526040902054151590565b61024f6102f5366004612093565b610970565b61024f610308366004611dcf565b610a5c565b61024f610a9f565b6101f1610323366004611e43565b610ad5565b6101f1610336366004611e43565b610ae5565b61024f6103493660046120c5565b610af5565b6003546040516001600160a01b0390911681526020016101fb565b61022f610b82565b61024f61037f366004612141565b610b8f565b61024f61039236600461217d565b610b9e565b6101f16103a5366004611e43565b60009081526004602052604090205490565b61022f6103c5366004611e43565b610cef565b6101f16103d8366004611e43565b610d08565b61024f6103eb36600461217d565b610d18565b61022f610e09565b61021761040636600461219f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61024f6104423660046121d2565b610e29565b61024f610455366004612237565b610e6e565b61024f610468366004612252565b610f06565b60006001600160a01b0383166104de5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061053557506001600160e01b031982166303a24d0760e21b145b8061055057506301ffc9a760e01b6001600160e01b03198316145b92915050565b6005805461056390612285565b80601f016020809104026020016040519081016040528092919081815260200182805461058f90612285565b80156105dc5780601f106105b1576101008083540402835291602001916105dc565b820191906000526020600020905b8154815290600101906020018083116105bf57829003601f168201915b505050505081565b6003546001600160a01b0316331461060e5760405162461bcd60e51b81526004016104d5906122c0565b61062983838360405180602001604052806000815250610f49565b505050565b60606002805461063d90612285565b80601f016020809104026020016040519081016040528092919081815260200182805461066990612285565b80156106b65780601f1061068b576101008083540402835291602001916106b6565b820191906000526020600020905b81548152906001019060200180831161069957829003601f168201915b50505050509050919050565b600781815481106106d257600080fd5b600091825260209091200154905081565b6000600a82815481106106f8576106f86122f5565b90600052602060002001549050919050565b6001600160a01b03851633148061072657506107268533610406565b61078d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016104d5565b61079a85858585856110a3565b5050505050565b6003546001600160a01b031633146107cb5760405162461bcd60e51b81526004016104d5906122c0565b6000471161080a5760405162461bcd60e51b815260206004820152600c60248201526b042616c616e636520697320360a41b60448201526064016104d5565b6003546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610843573d6000803e3d6000fd5b50565b606081518351146108ab5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016104d5565b6000835167ffffffffffffffff8111156108c7576108c7611cf7565b6040519080825280602002602001820160405280156108f0578160200160208202803683370190505b50905060005b84518110156109685761093b858281518110610914576109146122f5565b602002602001015185838151811061092e5761092e6122f5565b602002602001015161046d565b82828151811061094d5761094d6122f5565b602090810291909101015261096181612321565b90506108f6565b509392505050565b6003546001600160a01b0316331461099a5760405162461bcd60e51b81526004016104d5906122c0565b6007805460018181019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880194909455600880548086019091557ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30192909255600980548085019091557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155600a805492830181556000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910155565b6001600160a01b038316331480610a785750610a788333610406565b610a945760405162461bcd60e51b81526004016104d59061233c565b61062983838361124d565b6003546001600160a01b03163314610ac95760405162461bcd60e51b81526004016104d5906122c0565b610ad360006113db565b565b600a81815481106106d257600080fd5b600881815481106106d257600080fd5b6003546001600160a01b03163314610b1f5760405162461bcd60e51b81526004016104d5906122c0565b80610b2957600080fd5b6000838152600b60205260409020610b42908383611b7e565b50827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8383604051610b75929190612385565b60405180910390a2505050565b6006805461056390612285565b610b9a33838361142d565b5050565b610ba8338361046d565b15610bf55760405162461bcd60e51b815260206004820181905260248201527f596f752063616e206f6e6c79206f776e206f6e652046524545205043204e465460448201526064016104d5565b6001821115610c385760405162461bcd60e51b815260206004820152600f60248201526e139bdd081848199c9959481b5a5b9d608a1b60448201526064016104d5565b6001811115610c935760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f6e652047616d6572205043204e465420706572206164647265736044820152607360f81b60648201526084016104d5565b81610cd45760405162461bcd60e51b8152602060048201526011602482015270151bdad95b88191bdb89dd08195e1a5cdd607a1b60448201526064016104d5565b610b9a3383836040518060200160405280600081525061150e565b600b602052600090815260409020805461056390612285565b600981815481106106d257600080fd5b6003546001600160a01b03163314610d425760405162461bcd60e51b81526004016104d5906122c0565b600754821115610d885760405162461bcd60e51b8152602060048201526011602482015270151bdad95b88191bdb89dd08195e1a5cdd607a1b60448201526064016104d5565b60078281548110610d9b57610d9b6122f5565b906000526020600020015481610dbd8460009081526004602052604090205490565b610dc791906123b4565b1115610cd45760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820737570706c7960781b60448201526064016104d5565b60606040518060600160405280602b815260200161275f602b9139905090565b6001600160a01b038516331480610e455750610e458533610406565b610e615760405162461bcd60e51b81526004016104d59061233c565b61079a85858585856115e4565b6003546001600160a01b03163314610e985760405162461bcd60e51b81526004016104d5906122c0565b6001600160a01b038116610efd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d5565b610843816113db565b6001600160a01b038316331480610f225750610f228333610406565b610f3e5760405162461bcd60e51b81526004016104d59061233c565b610629838383611701565b6001600160a01b038416610f6f5760405162461bcd60e51b81526004016104d5906123cc565b8151835114610f905760405162461bcd60e51b81526004016104d59061240d565b33610fa081600087878787611802565b60005b845181101561103b57838181518110610fbe57610fbe6122f5565b6020026020010151600080878481518110610fdb57610fdb6122f5565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b03168152602001908152602001600020600082825461102391906123b4565b9091555081905061103381612321565b915050610fa3565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161108c929190612455565b60405180910390a461079a81600087878787611810565b81518351146110c45760405162461bcd60e51b81526004016104d59061240d565b6001600160a01b0384166110ea5760405162461bcd60e51b81526004016104d590612483565b336110f9818787878787611802565b60005b84518110156111df576000858281518110611119576111196122f5565b602002602001015190506000858381518110611137576111376122f5565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156111875760405162461bcd60e51b81526004016104d5906124c8565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906111c49084906123b4565b92505081905550505050806111d890612321565b90506110fc565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161122f929190612455565b60405180910390a4611245818787878787611810565b505050505050565b6001600160a01b0383166112735760405162461bcd60e51b81526004016104d590612512565b80518251146112945760405162461bcd60e51b81526004016104d59061240d565b60003390506112b781856000868660405180602001604052806000815250611802565b60005b835181101561137c5760008482815181106112d7576112d76122f5565b6020026020010151905060008483815181106112f5576112f56122f5565b602090810291909101810151600084815280835260408082206001600160a01b038c1683529093529190912054909150818110156113455760405162461bcd60e51b81526004016104d590612555565b6000928352602083815260408085206001600160a01b038b168652909152909220910390558061137481612321565b9150506112ba565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516113cd929190612455565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156114a15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016104d5565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166115345760405162461bcd60e51b81526004016104d5906123cc565b33611554816000876115458861196c565b61154e8861196c565b87611802565b6000848152602081815260408083206001600160a01b0389168452909152812080548592906115849084906123b4565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461079a816000878787876119b7565b6001600160a01b03841661160a5760405162461bcd60e51b81526004016104d590612483565b3361161a8187876115458861196c565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561165b5760405162461bcd60e51b81526004016104d5906124c8565b6000858152602081815260408083206001600160a01b038b81168552925280832087850390559088168252812080548692906116989084906123b4565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116f88288888888886119b7565b50505050505050565b6001600160a01b0383166117275760405162461bcd60e51b81526004016104d590612512565b33611756818560006117388761196c565b6117418761196c565b60405180602001604052806000815250611802565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156117975760405162461bcd60e51b81526004016104d590612555565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b611245868686868686611a72565b6001600160a01b0384163b156112455760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906118549089908990889088908890600401612599565b6020604051808303816000875af192505050801561188f575060408051601f3d908101601f1916820190925261188c918101906125f7565b60015b61193c5761189b612614565b806308c379a014156118d557506118b0612630565b806118bb57506118d7565b8060405162461bcd60e51b81526004016104d59190611ce4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016104d5565b6001600160e01b0319811663bc197c8160e01b146116f85760405162461bcd60e51b81526004016104d5906126ba565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106119a6576119a66122f5565b602090810291909101015292915050565b6001600160a01b0384163b156112455760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906119fb9089908990889088908890600401612702565b6020604051808303816000875af1925050508015611a36575060408051601f3d908101601f19168201909252611a33918101906125f7565b60015b611a425761189b612614565b6001600160e01b0319811663f23a6e6160e01b146116f85760405162461bcd60e51b81526004016104d5906126ba565b6001600160a01b038516611af95760005b8351811015611af757828181518110611a9e57611a9e6122f5565b602002602001015160046000868481518110611abc57611abc6122f5565b602002602001015181526020019081526020016000206000828254611ae191906123b4565b90915550611af0905081612321565b9050611a83565b505b6001600160a01b0384166112455760005b83518110156116f857828181518110611b2557611b256122f5565b602002602001015160046000868481518110611b4357611b436122f5565b602002602001015181526020019081526020016000206000828254611b689190612747565b90915550611b77905081612321565b9050611b0a565b828054611b8a90612285565b90600052602060002090601f016020900481019282611bac5760008555611bf2565b82601f10611bc55782800160ff19823516178555611bf2565b82800160010185558215611bf2579182015b82811115611bf2578235825591602001919060010190611bd7565b50611bfe929150611c02565b5090565b5b80821115611bfe5760008155600101611c03565b80356001600160a01b0381168114611c2e57600080fd5b919050565b60008060408385031215611c4657600080fd5b611c4f83611c17565b946020939093013593505050565b6001600160e01b03198116811461084357600080fd5b600060208284031215611c8557600080fd5b8135611c9081611c5d565b9392505050565b6000815180845260005b81811015611cbd57602081850181015186830182015201611ca1565b81811115611ccf576000602083870101525b50601f01601f19169290920160200192915050565b602081526000611c906020830184611c97565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611d3357611d33611cf7565b6040525050565b600067ffffffffffffffff821115611d5457611d54611cf7565b5060051b60200190565b600082601f830112611d6f57600080fd5b81356020611d7c82611d3a565b604051611d898282611d0d565b83815260059390931b8501820192828101915086841115611da957600080fd5b8286015b84811015611dc45780358352918301918301611dad565b509695505050505050565b600080600060608486031215611de457600080fd5b611ded84611c17565b9250602084013567ffffffffffffffff80821115611e0a57600080fd5b611e1687838801611d5e565b93506040860135915080821115611e2c57600080fd5b50611e3986828701611d5e565b9150509250925092565b600060208284031215611e5557600080fd5b5035919050565b600082601f830112611e6d57600080fd5b813567ffffffffffffffff811115611e8757611e87611cf7565b604051611e9e601f8301601f191660200182611d0d565b818152846020838601011115611eb357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611ee857600080fd5b611ef186611c17565b9450611eff60208701611c17565b9350604086013567ffffffffffffffff80821115611f1c57600080fd5b611f2889838a01611d5e565b94506060880135915080821115611f3e57600080fd5b611f4a89838a01611d5e565b93506080880135915080821115611f6057600080fd5b50611f6d88828901611e5c565b9150509295509295909350565b60008060408385031215611f8d57600080fd5b823567ffffffffffffffff80821115611fa557600080fd5b818501915085601f830112611fb957600080fd5b81356020611fc682611d3a565b604051611fd38282611d0d565b83815260059390931b8501820192828101915089841115611ff357600080fd5b948201945b838610156120185761200986611c17565b82529482019490820190611ff8565b9650508601359250508082111561202e57600080fd5b5061203b85828601611d5e565b9150509250929050565b600081518084526020808501945080840160005b8381101561207557815187529582019590820190600101612059565b509495945050505050565b602081526000611c906020830184612045565b600080600080608085870312156120a957600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000604084860312156120da57600080fd5b83359250602084013567ffffffffffffffff808211156120f957600080fd5b818601915086601f83011261210d57600080fd5b81358181111561211c57600080fd5b87602082850101111561212e57600080fd5b6020830194508093505050509250925092565b6000806040838503121561215457600080fd5b61215d83611c17565b91506020830135801515811461217257600080fd5b809150509250929050565b6000806040838503121561219057600080fd5b50508035926020909101359150565b600080604083850312156121b257600080fd5b6121bb83611c17565b91506121c960208401611c17565b90509250929050565b600080600080600060a086880312156121ea57600080fd5b6121f386611c17565b945061220160208701611c17565b93506040860135925060608601359150608086013567ffffffffffffffff81111561222b57600080fd5b611f6d88828901611e5c565b60006020828403121561224957600080fd5b611c9082611c17565b60008060006060848603121561226757600080fd5b61227084611c17565b95602085013595506040909401359392505050565b600181811c9082168061229957607f821691505b602082108114156122ba57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156123355761233561230b565b5060010190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600082198211156123c7576123c761230b565b500190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6040815260006124686040830185612045565b828103602084015261247a8185612045565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190526000906125c590830186612045565b82810360608401526125d78186612045565b905082810360808401526125eb8185611c97565b98975050505050505050565b60006020828403121561260957600080fd5b8151611c9081611c5d565b600060033d111561262d5760046000803e5060005160e01c5b90565b600060443d101561263e5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561266e57505050505090565b82850191508151818111156126865750505050505090565b843d87010160208285010111156126a05750505050505090565b6126af60208286010187611d0d565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061273c90830184611c97565b979650505050505050565b6000828210156127595761275961230b565b50039056fe68747470733a2f2f6170692e6d696e696e672e67616d652f53746f726566726f6e742d4d65746164617461a26469706673582212209a2e37fd3b986b8d44b8bbdc19c3b81c8e2035e029cf07eb6504b6fa0e06cb5764736f6c634300080c003368747470733a2f2f6170692e6d696e696e672e67616d652f7b69647d2e6a736f6e
Deployed ByteCode Sourcemap
41849:3003:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25346:231;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;25346:231:0;;;;;;;;24369:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;24369:310:0;1019:187:1;41936:18:0;;;:::i;:::-;;;;;;;:::i;43689:174::-;;;;;;:::i;:::-;;:::i;:::-;;25090:105;;;;;;:::i;:::-;;:::i;41994:63::-;;;;;;:::i;:::-;;:::i;44186:101::-;;;;;;:::i;:::-;;:::i;27285:442::-;;;;;;:::i;:::-;;:::i;44321:165::-;;;:::i;25743:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;39792:122::-;;;;;;:::i;:::-;39849:4;39670:16;;;:12;:16;;;;;;-1:-1:-1;;;39792:122:0;43890:272;;;;;;:::i;:::-;;:::i;41417:353::-;;;;;;:::i;:::-;;:::i;4932:103::-;;;:::i;42228:129::-;;;;;;:::i;:::-;;:::i;42064:44::-;;;;;;:::i;:::-;;:::i;42773:166::-;;;;;;:::i;:::-;;:::i;4281:87::-;4354:6;;4281:87;;-1:-1:-1;;;;;4354:6:0;;;8703:51:1;;8691:2;8676:18;4281:87:0;8557:203:1;41961:20:0;;;:::i;26340:155::-;;;;;;:::i;:::-;;:::i;42979:362::-;;;;;;:::i;:::-;;:::i;39581:113::-;;;;;;:::i;:::-;39643:7;39670:16;;;:12;:16;;;;;;;39581:113;42364:39;;;;;;:::i;:::-;;:::i;42135:82::-;;;;;;:::i;:::-;;:::i;43374:282::-;;;;;;:::i;:::-;;:::i;42575:130::-;;;:::i;26567:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26690:27:0;;;26666:4;26690:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;26567:168;26807:401;;;;;;:::i;:::-;;:::i;5190:201::-;;;;;;:::i;:::-;;:::i;41088:321::-;;;;;;:::i;:::-;;:::i;25346:231::-;25432:7;-1:-1:-1;;;;;25460:21:0;;25452:77;;;;-1:-1:-1;;;25452:77:0;;10966:2:1;25452:77:0;;;10948:21:1;11005:2;10985:18;;;10978:30;11044:34;11024:18;;;11017:62;-1:-1:-1;;;11095:18:1;;;11088:41;11146:19;;25452:77:0;;;;;;;;;-1:-1:-1;25547:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;25547:22:0;;;;;;;;;;;;25346:231::o;24369:310::-;24471:4;-1:-1:-1;;;;;;24508:41:0;;-1:-1:-1;;;24508:41:0;;:110;;-1:-1:-1;;;;;;;24566:52:0;;-1:-1:-1;;;24566:52:0;24508:110;:163;;;-1:-1:-1;;;;;;;;;;15809:40:0;;;24635:36;24488:183;24369:310;-1:-1:-1;;24369:310:0:o;41936:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43689:174::-;4354:6;;-1:-1:-1;;;;;4354:6:0;3079:10;4501:23;4493:68;;;;-1:-1:-1;;;4493:68:0;;;;;;;:::i;:::-;43822:33:::1;43834:2;43838:3;43843:7;43822:33;;;;;;;;;;;::::0;:11:::1;:33::i;:::-;43689:174:::0;;;:::o;25090:105::-;25150:13;25183:4;25176:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25090:105;;;:::o;41994:63::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41994:63:0;:::o;44186:101::-;44243:7;44270:5;44276:2;44270:9;;;;;;;;:::i;:::-;;;;;;;;;44263:16;;44186:101;;;:::o;27285:442::-;-1:-1:-1;;;;;27518:20:0;;3079:10;27518:20;;:60;;-1:-1:-1;27542:36:0;27559:4;3079:10;26567:168;:::i;27542:36::-;27496:160;;;;-1:-1:-1;;;27496:160:0;;12256:2:1;27496:160:0;;;12238:21:1;12295:2;12275:18;;;12268:30;12334:34;12314:18;;;12307:62;-1:-1:-1;;;12385:18:1;;;12378:48;12443:19;;27496:160:0;12054:414:1;27496:160:0;27667:52;27690:4;27696:2;27700:3;27705:7;27714:4;27667:22;:52::i;:::-;27285:442;;;;;:::o;44321:165::-;4354:6;;-1:-1:-1;;;;;4354:6:0;3079:10;4501:23;4493:68;;;;-1:-1:-1;;;4493:68:0;;;;;;;:::i;:::-;44401:1:::1;44377:21;:25;44369:50;;;::::0;-1:-1:-1;;;44369:50:0;;12675:2:1;44369:50:0::1;::::0;::::1;12657:21:1::0;12714:2;12694:18;;;12687:30;-1:-1:-1;;;12733:18:1;;;12726:42;12785:18;;44369:50:0::1;12473:336:1::0;44369:50:0::1;4354:6:::0;;44430:48:::1;::::0;-1:-1:-1;;;;;4354:6:0;;;;44456:21:::1;44430:48:::0;::::1;;;::::0;::::1;::::0;;;44456:21;4354:6;44430:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;44321:165::o:0;25743:524::-;25899:16;25960:3;:10;25941:8;:15;:29;25933:83;;;;-1:-1:-1;;;25933:83:0;;13016:2:1;25933:83:0;;;12998:21:1;13055:2;13035:18;;;13028:30;13094:34;13074:18;;;13067:62;-1:-1:-1;;;13145:18:1;;;13138:39;13194:19;;25933:83:0;12814:405:1;25933:83:0;26029:30;26076:8;:15;26062:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26062:30:0;;26029:63;;26110:9;26105:122;26129:8;:15;26125:1;:19;26105:122;;;26185:30;26195:8;26204:1;26195:11;;;;;;;;:::i;:::-;;;;;;;26208:3;26212:1;26208:6;;;;;;;;:::i;:::-;;;;;;;26185:9;:30::i;:::-;26166:13;26180:1;26166:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;26146:3;;;:::i;:::-;;;26105:122;;;-1:-1:-1;26246:13:0;25743:524;-1:-1:-1;;;25743:524:0:o;43890:272::-;4354:6;;-1:-1:-1;;;;;4354:6:0;3079:10;4501:23;4493:68;;;;-1:-1:-1;;;4493:68:0;;;;;;;:::i;:::-;44034:8:::1;:26:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;;44071:6:::1;:22:::0;;;;::::1;::::0;;;;::::1;::::0;;;;44104:5:::1;:19:::0;;;;::::1;::::0;;;;::::1;::::0;44134:5:::1;:20:::0;;;;::::1;::::0;;-1:-1:-1;44134:20:0;;;;::::1;::::0;43890:272::o;41417:353::-;-1:-1:-1;;;;;41582:23:0;;3079:10;41582:23;;:66;;-1:-1:-1;41609:39:0;41626:7;3079:10;26567:168;:::i;41609:39::-;41560:157;;;;-1:-1:-1;;;41560:157:0;;;;;;;:::i;:::-;41730:32;41741:7;41750:3;41755:6;41730:10;:32::i;4932:103::-;4354:6;;-1:-1:-1;;;;;4354:6:0;3079:10;4501:23;4493:68;;;;-1:-1:-1;;;4493:68:0;;;;;;;:::i;:::-;4997:30:::1;5024:1;4997:18;:30::i;:::-;4932:103::o:0;42228:129::-;;;;;;;;;;;;42064:44;;;;;;;;;;;;42773:166;4354:6;;-1:-1:-1;;;;;4354:6:0;3079:10;4501:23;4493:68;;;;-1:-1:-1;;;4493:68:0;;;;;;;:::i;:::-;42857:22;42849:31:::1;;;::::0;::::1;;42887:13;::::0;;;:8:::1;:13;::::0;;;;:20:::1;::::0;42903:4;;42887:20:::1;:::i;:::-;;42929:3;42919:14;42923:4;;42919:14;;;;;;;:::i;:::-;;;;;;;;42773:166:::0;;;:::o;41961:20::-;;;;;;;:::i;26340:155::-;26435:52;3079:10;26468:8;26478;26435:18;:52::i;:::-;26340:155;;:::o;42979:362::-;43065:25;43075:10;43087:2;43065:9;:25::i;:::-;:30;43057:75;;;;-1:-1:-1;;;43057:75:0;;14503:2:1;43057:75:0;;;14485:21:1;;;14522:18;;;14515:30;14581:34;14561:18;;;14554:62;14633:18;;43057:75:0;14301:356:1;43057:75:0;43156:1;43151:2;:6;;43143:33;;;;-1:-1:-1;;;43143:33:0;;14864:2:1;43143:33:0;;;14846:21:1;14903:2;14883:18;;;14876:30;-1:-1:-1;;;14922:18:1;;;14915:45;14977:18;;43143:33:0;14662:339:1;43143:33:0;43204:1;43195:6;:10;;43187:55;;;;-1:-1:-1;;;43187:55:0;;15208:2:1;43187:55:0;;;15190:21:1;15247:2;15227:18;;;15220:30;15286:34;15266:18;;;15259:62;-1:-1:-1;;;15337:18:1;;;15330:31;15378:19;;43187:55:0;15006:397:1;43187:55:0;43261:6;43253:36;;;;-1:-1:-1;;;43253:36:0;;15610:2:1;43253:36:0;;;15592:21:1;15649:2;15629:18;;;15622:30;-1:-1:-1;;;15668:18:1;;;15661:47;15725:18;;43253:36:0;15408:341:1;43253:36:0;43300:33;43306:10;43318:2;43322:6;43300:33;;;;;;;;;;;;:5;:33::i;42364:39::-;;;;;;;;;;;;;;;;:::i;42135:82::-;;;;;;;;;;;;43374:282;4354:6;;-1:-1:-1;;;;;4354:6:0;3079:10;4501:23;4493:68;;;;-1:-1:-1;;;4493:68:0;;;;;;;:::i;:::-;43486:8:::1;:15:::0;43480:21;::::1;;43472:51;;;::::0;-1:-1:-1;;;43472:51:0;;15610:2:1;43472:51:0::1;::::0;::::1;15592:21:1::0;15649:2;15629:18;;;15622:30;-1:-1:-1;;;15668:18:1;;;15661:47;15725:18;;43472:51:0::1;15408:341:1::0;43472:51:0::1;43570:8;43579:2;43570:12;;;;;;;;:::i;:::-;;;;;;;;;43560:6;43542:15;43554:2;39643:7:::0;39670:16;;;:12;:16;;;;;;;39581:113;43542:15:::1;:24;;;;:::i;:::-;:40;;43534:70;;;::::0;-1:-1:-1;;;43534:70:0;;16089:2:1;43534:70:0::1;::::0;::::1;16071:21:1::0;16128:2;16108:18;;;16101:30;-1:-1:-1;;;16147:18:1;;;16140:47;16204:18;;43534:70:0::1;15887:341:1::0;42575:130:0;42619:13;42645:52;;;;;;;;;;;;;;;;;;;42575:130;:::o;26807:401::-;-1:-1:-1;;;;;27015:20:0;;3079:10;27015:20;;:60;;-1:-1:-1;27039:36:0;27056:4;3079:10;26567:168;:::i;27039:36::-;26993:151;;;;-1:-1:-1;;;26993:151:0;;;;;;;:::i;:::-;27155:45;27173:4;27179:2;27183;27187:6;27195:4;27155:17;:45::i;5190:201::-;4354:6;;-1:-1:-1;;;;;4354:6:0;3079:10;4501:23;4493:68;;;;-1:-1:-1;;;4493:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5279:22:0;::::1;5271:73;;;::::0;-1:-1:-1;;;5271:73:0;;16435:2:1;5271:73:0::1;::::0;::::1;16417:21:1::0;16474:2;16454:18;;;16447:30;16513:34;16493:18;;;16486:62;-1:-1:-1;;;16564:18:1;;;16557:36;16610:19;;5271:73:0::1;16233:402:1::0;5271:73:0::1;5355:28;5374:8;5355:18;:28::i;41088:321::-:0;-1:-1:-1;;;;;41228:23:0;;3079:10;41228:23;;:66;;-1:-1:-1;41255:39:0;41272:7;3079:10;26567:168;:::i;41255:39::-;41206:157;;;;-1:-1:-1;;;41206:157:0;;;;;;;:::i;:::-;41376:25;41382:7;41391:2;41395:5;41376;:25::i;32686:736::-;-1:-1:-1;;;;;32865:16:0;;32857:62;;;;-1:-1:-1;;;32857:62:0;;;;;;;:::i;:::-;32952:7;:14;32938:3;:10;:28;32930:81;;;;-1:-1:-1;;;32930:81:0;;;;;;;:::i;:::-;3079:10;33068:66;3079:10;33024:16;33111:2;33115:3;33120:7;33129:4;33068:20;:66::i;:::-;33152:9;33147:103;33171:3;:10;33167:1;:14;33147:103;;;33228:7;33236:1;33228:10;;;;;;;;:::i;:::-;;;;;;;33203:9;:17;33213:3;33217:1;33213:6;;;;;;;;:::i;:::-;;;;;;;33203:17;;;;;;;;;;;:21;33221:2;-1:-1:-1;;;;;33203:21:0;-1:-1:-1;;;;;33203:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;33183:3:0;;-1:-1:-1;33183:3:0;;;:::i;:::-;;;;33147:103;;;;33303:2;-1:-1:-1;;;;;33267:53:0;33299:1;-1:-1:-1;;;;;33267:53:0;33281:8;-1:-1:-1;;;;;33267:53:0;;33307:3;33312:7;33267:53;;;;;;;:::i;:::-;;;;;;;;33333:81;33369:8;33387:1;33391:2;33395:3;33400:7;33409:4;33333:35;:81::i;29369:1074::-;29596:7;:14;29582:3;:10;:28;29574:81;;;;-1:-1:-1;;;29574:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29674:16:0;;29666:66;;;;-1:-1:-1;;;29666:66:0;;;;;;;:::i;:::-;3079:10;29789:60;3079:10;29820:4;29826:2;29830:3;29835:7;29844:4;29789:20;:60::i;:::-;29867:9;29862:421;29886:3;:10;29882:1;:14;29862:421;;;29918:10;29931:3;29935:1;29931:6;;;;;;;;:::i;:::-;;;;;;;29918:19;;29952:14;29969:7;29977:1;29969:10;;;;;;;;:::i;:::-;;;;;;;;;;;;29996:19;30018:13;;;;;;;;;;-1:-1:-1;;;;;30018:19:0;;;;;;;;;;;;29969:10;;-1:-1:-1;30060:21:0;;;;30052:76;;;;-1:-1:-1;;;30052:76:0;;;;;;;:::i;:::-;30172:9;:13;;;;;;;;;;;-1:-1:-1;;;;;30172:19:0;;;;;;;;;;30194:20;;;30172:42;;30244:17;;;;;;;:27;;30194:20;;30172:9;30244:27;;30194:20;;30244:27;:::i;:::-;;;;;;;;29903:380;;;29898:3;;;;:::i;:::-;;;29862:421;;;;30330:2;-1:-1:-1;;;;;30300:47:0;30324:4;-1:-1:-1;;;;;30300:47:0;30314:8;-1:-1:-1;;;;;30300:47:0;;30334:3;30339:7;30300:47;;;;;;;:::i;:::-;;;;;;;;30360:75;30396:8;30406:4;30412:2;30416:3;30421:7;30430:4;30360:35;:75::i;:::-;29563:880;29369:1074;;;;;:::o;34523:891::-;-1:-1:-1;;;;;34675:18:0;;34667:66;;;;-1:-1:-1;;;34667:66:0;;;;;;;:::i;:::-;34766:7;:14;34752:3;:10;:28;34744:81;;;;-1:-1:-1;;;34744:81:0;;;;;;;:::i;:::-;34838:16;3079:10;34838:31;;34882:66;34903:8;34913:4;34927:1;34931:3;34936:7;34882:66;;;;;;;;;;;;:20;:66::i;:::-;34966:9;34961:373;34985:3;:10;34981:1;:14;34961:373;;;35017:10;35030:3;35034:1;35030:6;;;;;;;;:::i;:::-;;;;;;;35017:19;;35051:14;35068:7;35076:1;35068:10;;;;;;;;:::i;:::-;;;;;;;;;;;;35095:19;35117:13;;;;;;;;;;-1:-1:-1;;;;;35117:19:0;;;;;;;;;;;;35068:10;;-1:-1:-1;35159:21:0;;;;35151:70;;;;-1:-1:-1;;;35151:70:0;;;;;;;:::i;:::-;35265:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35265:19:0;;;;;;;;;;35287:20;;35265:42;;34997:3;;;;:::i;:::-;;;;34961:373;;;;35389:1;-1:-1:-1;;;;;35351:55:0;35375:4;-1:-1:-1;;;;;35351:55:0;35365:8;-1:-1:-1;;;;;35351:55:0;;35393:3;35398:7;35351:55;;;;;;;:::i;:::-;;;;;;;;34656:758;34523:891;;;:::o;5551:191::-;5644:6;;;-1:-1:-1;;;;;5661:17:0;;;-1:-1:-1;;;;;;5661:17:0;;;;;;;5694:40;;5644:6;;;5661:17;5644:6;;5694:40;;5625:16;;5694:40;5614:128;5551:191;:::o;35556:331::-;35711:8;-1:-1:-1;;;;;35702:17:0;:5;-1:-1:-1;;;;;35702:17:0;;;35694:71;;;;-1:-1:-1;;;35694:71:0;;19749:2:1;35694:71:0;;;19731:21:1;19788:2;19768:18;;;19761:30;19827:34;19807:18;;;19800:62;-1:-1:-1;;;19878:18:1;;;19871:39;19927:19;;35694:71:0;19547:405:1;35694:71:0;-1:-1:-1;;;;;35776:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35776:46:0;;;;;;;;;;35838:41;;1159::1;;;35838::0;;1132:18:1;35838:41:0;;;;;;;35556:331;;;:::o;31761:569::-;-1:-1:-1;;;;;31914:16:0;;31906:62;;;;-1:-1:-1;;;31906:62:0;;;;;;;:::i;:::-;3079:10;32025:102;3079:10;31981:16;32068:2;32072:21;32090:2;32072:17;:21::i;:::-;32095:25;32113:6;32095:17;:25::i;:::-;32122:4;32025:20;:102::i;:::-;32140:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32140:17:0;;;;;;;;;:27;;32161:6;;32140:9;:27;;32161:6;;32140:27;:::i;:::-;;;;-1:-1:-1;;32183:52:0;;;20131:25:1;;;20187:2;20172:18;;20165:34;;;-1:-1:-1;;;;;32183:52:0;;;;32216:1;;32183:52;;;;;;20104:18:1;32183:52:0;;;;;;;32248:74;32279:8;32297:1;32301:2;32305;32309:6;32317:4;32248:30;:74::i;28191:820::-;-1:-1:-1;;;;;28379:16:0;;28371:66;;;;-1:-1:-1;;;28371:66:0;;;;;;;:::i;:::-;3079:10;28494:96;3079:10;28525:4;28531:2;28535:21;28553:2;28535:17;:21::i;28494:96::-;28603:19;28625:13;;;;;;;;;;;-1:-1:-1;;;;;28625:19:0;;;;;;;;;;28663:21;;;;28655:76;;;;-1:-1:-1;;;28655:76:0;;;;;;;:::i;:::-;28767:9;:13;;;;;;;;;;;-1:-1:-1;;;;;28767:19:0;;;;;;;;;;28789:20;;;28767:42;;28831:17;;;;;;;:27;;28789:20;;28767:9;28831:27;;28789:20;;28831:27;:::i;:::-;;;;-1:-1:-1;;28876:46:0;;;20131:25:1;;;20187:2;20172:18;;20165:34;;;-1:-1:-1;;;;;28876:46:0;;;;;;;;;;;;;;20104:18:1;28876:46:0;;;;;;;28935:68;28966:8;28976:4;28982:2;28986;28990:6;28998:4;28935:30;:68::i;:::-;28360:651;;28191:820;;;;;:::o;33672:648::-;-1:-1:-1;;;;;33799:18:0;;33791:66;;;;-1:-1:-1;;;33791:66:0;;;;;;;:::i;:::-;3079:10;33914:102;3079:10;33945:4;33870:16;33963:21;33981:2;33963:17;:21::i;:::-;33986:25;34004:6;33986:17;:25::i;:::-;33914:102;;;;;;;;;;;;:20;:102::i;:::-;34029:19;34051:13;;;;;;;;;;;-1:-1:-1;;;;;34051:19:0;;;;;;;;;;34089:21;;;;34081:70;;;;-1:-1:-1;;;34081:70:0;;;;;;;:::i;:::-;34187:9;:13;;;;;;;;;;;-1:-1:-1;;;;;34187:19:0;;;;;;;;;;;;34209:20;;;34187:42;;34258:54;;20131:25:1;;;20172:18;;;20165:34;;;34187:19:0;;34258:54;;;;;;20104:18:1;34258:54:0;;;;;;;33780:540;;33672:648;;;:::o;44558:291::-;44775:66;44802:8;44812:4;44818:2;44822:3;44827:7;44836:4;44775:26;:66::i;37824:813::-;-1:-1:-1;;;;;38064:13:0;;6898:20;6946:8;38060:570;;38100:79;;-1:-1:-1;;;38100:79:0;;-1:-1:-1;;;;;38100:43:0;;;;;:79;;38144:8;;38154:4;;38160:3;;38165:7;;38174:4;;38100:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38100:79:0;;;;;;;;-1:-1:-1;;38100:79:0;;;;;;;;;;;;:::i;:::-;;;38096:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38492:6;38485:14;;-1:-1:-1;;;38485:14:0;;;;;;;;:::i;38096:523::-;;;38541:62;;-1:-1:-1;;;38541:62:0;;22358:2:1;38541:62:0;;;22340:21:1;22397:2;22377:18;;;22370:30;22436:34;22416:18;;;22409:62;-1:-1:-1;;;22487:18:1;;;22480:50;22547:19;;38541:62:0;22156:416:1;38096:523:0;-1:-1:-1;;;;;;38261:60:0;;-1:-1:-1;;;38261:60:0;38257:159;;38346:50;;-1:-1:-1;;;38346:50:0;;;;;;;:::i;38645:198::-;38765:16;;;38779:1;38765:16;;;;;;;;;38711;;38740:22;;38765:16;;;;;;;;;;;;-1:-1:-1;38765:16:0;38740:41;;38803:7;38792:5;38798:1;38792:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;38830:5;38645:198;-1:-1:-1;;38645:198:0:o;37072:744::-;-1:-1:-1;;;;;37287:13:0;;6898:20;6946:8;37283:526;;37323:72;;-1:-1:-1;;;37323:72:0;;-1:-1:-1;;;;;37323:38:0;;;;;:72;;37362:8;;37372:4;;37378:2;;37382:6;;37390:4;;37323:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37323:72:0;;;;;;;;-1:-1:-1;;37323:72:0;;;;;;;;;;;;:::i;:::-;;;37319:479;;;;:::i;:::-;-1:-1:-1;;;;;;37445:55:0;;-1:-1:-1;;;37445:55:0;37441:154;;37525:50;;-1:-1:-1;;;37525:50:0;;;;;;;:::i;39989:655::-;-1:-1:-1;;;;;40311:18:0;;40307:160;;40351:9;40346:110;40370:3;:10;40366:1;:14;40346:110;;;40430:7;40438:1;40430:10;;;;;;;;:::i;:::-;;;;;;;40406:12;:20;40419:3;40423:1;40419:6;;;;;;;;:::i;:::-;;;;;;;40406:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40382:3:0;;-1:-1:-1;40382:3:0;;:::i;:::-;;;40346:110;;;;40307:160;-1:-1:-1;;;;;40483:16:0;;40479:158;;40521:9;40516:110;40540:3;:10;40536:1;:14;40516:110;;;40600:7;40608:1;40600:10;;;;;;;;:::i;:::-;;;;;;;40576:12;:20;40589:3;40593:1;40589:6;;;;;;;;:::i;:::-;;;;;;;40576:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;40552:3:0;;-1:-1:-1;40552:3:0;;:::i;:::-;;;40516:110;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1211:472::-;1253:3;1291:5;1285:12;1318:6;1313:3;1306:19;1343:1;1353:162;1367:6;1364:1;1361:13;1353:162;;;1429:4;1485:13;;;1481:22;;1475:29;1457:11;;;1453:20;;1446:59;1382:12;1353:162;;;1533:6;1530:1;1527:13;1524:87;;;1599:1;1592:4;1583:6;1578:3;1574:16;1570:27;1563:38;1524:87;-1:-1:-1;1665:2:1;1644:15;-1:-1:-1;;1640:29:1;1631:39;;;;1672:4;1627:50;;1211:472;-1:-1:-1;;1211:472:1:o;1688:220::-;1837:2;1826:9;1819:21;1800:4;1857:45;1898:2;1887:9;1883:18;1875:6;1857:45;:::i;1913:127::-;1974:10;1969:3;1965:20;1962:1;1955:31;2005:4;2002:1;1995:15;2029:4;2026:1;2019:15;2045:249;2155:2;2136:13;;-1:-1:-1;;2132:27:1;2120:40;;2190:18;2175:34;;2211:22;;;2172:62;2169:88;;;2237:18;;:::i;:::-;2273:2;2266:22;-1:-1:-1;;2045:249:1:o;2299:183::-;2359:4;2392:18;2384:6;2381:30;2378:56;;;2414:18;;:::i;:::-;-1:-1:-1;2459:1:1;2455:14;2471:4;2451:25;;2299:183::o;2487:724::-;2541:5;2594:3;2587:4;2579:6;2575:17;2571:27;2561:55;;2612:1;2609;2602:12;2561:55;2648:6;2635:20;2674:4;2697:43;2737:2;2697:43;:::i;:::-;2769:2;2763:9;2781:31;2809:2;2801:6;2781:31;:::i;:::-;2847:18;;;2939:1;2935:10;;;;2923:23;;2919:32;;;2881:15;;;;-1:-1:-1;2963:15:1;;;2960:35;;;2991:1;2988;2981:12;2960:35;3027:2;3019:6;3015:15;3039:142;3055:6;3050:3;3047:15;3039:142;;;3121:17;;3109:30;;3159:12;;;;3072;;3039:142;;;-1:-1:-1;3199:6:1;2487:724;-1:-1:-1;;;;;;2487:724:1:o;3216:669::-;3343:6;3351;3359;3412:2;3400:9;3391:7;3387:23;3383:32;3380:52;;;3428:1;3425;3418:12;3380:52;3451:29;3470:9;3451:29;:::i;:::-;3441:39;;3531:2;3520:9;3516:18;3503:32;3554:18;3595:2;3587:6;3584:14;3581:34;;;3611:1;3608;3601:12;3581:34;3634:61;3687:7;3678:6;3667:9;3663:22;3634:61;:::i;:::-;3624:71;;3748:2;3737:9;3733:18;3720:32;3704:48;;3777:2;3767:8;3764:16;3761:36;;;3793:1;3790;3783:12;3761:36;;3816:63;3871:7;3860:8;3849:9;3845:24;3816:63;:::i;:::-;3806:73;;;3216:669;;;;;:::o;3890:180::-;3949:6;4002:2;3990:9;3981:7;3977:23;3973:32;3970:52;;;4018:1;4015;4008:12;3970:52;-1:-1:-1;4041:23:1;;3890:180;-1:-1:-1;3890:180:1:o;4075:555::-;4117:5;4170:3;4163:4;4155:6;4151:17;4147:27;4137:55;;4188:1;4185;4178:12;4137:55;4224:6;4211:20;4250:18;4246:2;4243:26;4240:52;;;4272:18;;:::i;:::-;4321:2;4315:9;4333:67;4388:2;4369:13;;-1:-1:-1;;4365:27:1;4394:4;4361:38;4315:9;4333:67;:::i;:::-;4424:2;4416:6;4409:18;4470:3;4463:4;4458:2;4450:6;4446:15;4442:26;4439:35;4436:55;;;4487:1;4484;4477:12;4436:55;4551:2;4544:4;4536:6;4532:17;4525:4;4517:6;4513:17;4500:54;4598:1;4574:15;;;4591:4;4570:26;4563:37;;;;4578:6;4075:555;-1:-1:-1;;;4075:555:1:o;4635:943::-;4789:6;4797;4805;4813;4821;4874:3;4862:9;4853:7;4849:23;4845:33;4842:53;;;4891:1;4888;4881:12;4842:53;4914:29;4933:9;4914:29;:::i;:::-;4904:39;;4962:38;4996:2;4985:9;4981:18;4962:38;:::i;:::-;4952:48;;5051:2;5040:9;5036:18;5023:32;5074:18;5115:2;5107:6;5104:14;5101:34;;;5131:1;5128;5121:12;5101:34;5154:61;5207:7;5198:6;5187:9;5183:22;5154:61;:::i;:::-;5144:71;;5268:2;5257:9;5253:18;5240:32;5224:48;;5297:2;5287:8;5284:16;5281:36;;;5313:1;5310;5303:12;5281:36;5336:63;5391:7;5380:8;5369:9;5365:24;5336:63;:::i;:::-;5326:73;;5452:3;5441:9;5437:19;5424:33;5408:49;;5482:2;5472:8;5469:16;5466:36;;;5498:1;5495;5488:12;5466:36;;5521:51;5564:7;5553:8;5542:9;5538:24;5521:51;:::i;:::-;5511:61;;;4635:943;;;;;;;;:::o;5583:1208::-;5701:6;5709;5762:2;5750:9;5741:7;5737:23;5733:32;5730:52;;;5778:1;5775;5768:12;5730:52;5818:9;5805:23;5847:18;5888:2;5880:6;5877:14;5874:34;;;5904:1;5901;5894:12;5874:34;5942:6;5931:9;5927:22;5917:32;;5987:7;5980:4;5976:2;5972:13;5968:27;5958:55;;6009:1;6006;5999:12;5958:55;6045:2;6032:16;6067:4;6090:43;6130:2;6090:43;:::i;:::-;6162:2;6156:9;6174:31;6202:2;6194:6;6174:31;:::i;:::-;6240:18;;;6328:1;6324:10;;;;6316:19;;6312:28;;;6274:15;;;;-1:-1:-1;6352:19:1;;;6349:39;;;6384:1;6381;6374:12;6349:39;6408:11;;;;6428:148;6444:6;6439:3;6436:15;6428:148;;;6510:23;6529:3;6510:23;:::i;:::-;6498:36;;6461:12;;;;6554;;;;6428:148;;;6595:6;-1:-1:-1;;6639:18:1;;6626:32;;-1:-1:-1;;6670:16:1;;;6667:36;;;6699:1;6696;6689:12;6667:36;;6722:63;6777:7;6766:8;6755:9;6751:24;6722:63;:::i;:::-;6712:73;;;5583:1208;;;;;:::o;6796:435::-;6849:3;6887:5;6881:12;6914:6;6909:3;6902:19;6940:4;6969:2;6964:3;6960:12;6953:19;;7006:2;6999:5;6995:14;7027:1;7037:169;7051:6;7048:1;7045:13;7037:169;;;7112:13;;7100:26;;7146:12;;;;7181:15;;;;7073:1;7066:9;7037:169;;;-1:-1:-1;7222:3:1;;6796:435;-1:-1:-1;;;;;6796:435:1:o;7236:261::-;7415:2;7404:9;7397:21;7378:4;7435:56;7487:2;7476:9;7472:18;7464:6;7435:56;:::i;7502:385::-;7588:6;7596;7604;7612;7665:3;7653:9;7644:7;7640:23;7636:33;7633:53;;;7682:1;7679;7672:12;7633:53;-1:-1:-1;;7705:23:1;;;7775:2;7760:18;;7747:32;;-1:-1:-1;7826:2:1;7811:18;;7798:32;;7877:2;7862:18;7849:32;;-1:-1:-1;7502:385:1;-1:-1:-1;7502:385:1:o;7892:660::-;7972:6;7980;7988;8041:2;8029:9;8020:7;8016:23;8012:32;8009:52;;;8057:1;8054;8047:12;8009:52;8093:9;8080:23;8070:33;;8154:2;8143:9;8139:18;8126:32;8177:18;8218:2;8210:6;8207:14;8204:34;;;8234:1;8231;8224:12;8204:34;8272:6;8261:9;8257:22;8247:32;;8317:7;8310:4;8306:2;8302:13;8298:27;8288:55;;8339:1;8336;8329:12;8288:55;8379:2;8366:16;8405:2;8397:6;8394:14;8391:34;;;8421:1;8418;8411:12;8391:34;8466:7;8461:2;8452:6;8448:2;8444:15;8440:24;8437:37;8434:57;;;8487:1;8484;8477:12;8434:57;8518:2;8514;8510:11;8500:21;;8540:6;8530:16;;;;;7892:660;;;;;:::o;8765:347::-;8830:6;8838;8891:2;8879:9;8870:7;8866:23;8862:32;8859:52;;;8907:1;8904;8897:12;8859:52;8930:29;8949:9;8930:29;:::i;:::-;8920:39;;9009:2;8998:9;8994:18;8981:32;9056:5;9049:13;9042:21;9035:5;9032:32;9022:60;;9078:1;9075;9068:12;9022:60;9101:5;9091:15;;;8765:347;;;;;:::o;9117:248::-;9185:6;9193;9246:2;9234:9;9225:7;9221:23;9217:32;9214:52;;;9262:1;9259;9252:12;9214:52;-1:-1:-1;;9285:23:1;;;9355:2;9340:18;;;9327:32;;-1:-1:-1;9117:248:1:o;9370:260::-;9438:6;9446;9499:2;9487:9;9478:7;9474:23;9470:32;9467:52;;;9515:1;9512;9505:12;9467:52;9538:29;9557:9;9538:29;:::i;:::-;9528:39;;9586:38;9620:2;9609:9;9605:18;9586:38;:::i;:::-;9576:48;;9370:260;;;;;:::o;9635:606::-;9739:6;9747;9755;9763;9771;9824:3;9812:9;9803:7;9799:23;9795:33;9792:53;;;9841:1;9838;9831:12;9792:53;9864:29;9883:9;9864:29;:::i;:::-;9854:39;;9912:38;9946:2;9935:9;9931:18;9912:38;:::i;:::-;9902:48;;9997:2;9986:9;9982:18;9969:32;9959:42;;10048:2;10037:9;10033:18;10020:32;10010:42;;10103:3;10092:9;10088:19;10075:33;10131:18;10123:6;10120:30;10117:50;;;10163:1;10160;10153:12;10117:50;10186:49;10227:7;10218:6;10207:9;10203:22;10186:49;:::i;10246:186::-;10305:6;10358:2;10346:9;10337:7;10333:23;10329:32;10326:52;;;10374:1;10371;10364:12;10326:52;10397:29;10416:9;10397:29;:::i;10437:322::-;10514:6;10522;10530;10583:2;10571:9;10562:7;10558:23;10554:32;10551:52;;;10599:1;10596;10589:12;10551:52;10622:29;10641:9;10622:29;:::i;:::-;10612:39;10698:2;10683:18;;10670:32;;-1:-1:-1;10749:2:1;10734:18;;;10721:32;;10437:322;-1:-1:-1;;;10437:322:1:o;11176:380::-;11255:1;11251:12;;;;11298;;;11319:61;;11373:4;11365:6;11361:17;11351:27;;11319:61;11426:2;11418:6;11415:14;11395:18;11392:38;11389:161;;;11472:10;11467:3;11463:20;11460:1;11453:31;11507:4;11504:1;11497:15;11535:4;11532:1;11525:15;11389:161;;11176:380;;;:::o;11561:356::-;11763:2;11745:21;;;11782:18;;;11775:30;11841:34;11836:2;11821:18;;11814:62;11908:2;11893:18;;11561:356::o;11922:127::-;11983:10;11978:3;11974:20;11971:1;11964:31;12014:4;12011:1;12004:15;12038:4;12035:1;12028:15;13224:127;13285:10;13280:3;13276:20;13273:1;13266:31;13316:4;13313:1;13306:15;13340:4;13337:1;13330:15;13356:135;13395:3;-1:-1:-1;;13416:17:1;;13413:43;;;13436:18;;:::i;:::-;-1:-1:-1;13483:1:1;13472:13;;13356:135::o;13496:405::-;13698:2;13680:21;;;13737:2;13717:18;;;13710:30;13776:34;13771:2;13756:18;;13749:62;-1:-1:-1;;;13842:2:1;13827:18;;13820:39;13891:3;13876:19;;13496:405::o;13906:390::-;14065:2;14054:9;14047:21;14104:6;14099:2;14088:9;14084:18;14077:34;14161:6;14153;14148:2;14137:9;14133:18;14120:48;14217:1;14188:22;;;14212:2;14184:31;;;14177:42;;;;14280:2;14259:15;;;-1:-1:-1;;14255:29:1;14240:45;14236:54;;13906:390;-1:-1:-1;13906:390:1:o;15754:128::-;15794:3;15825:1;15821:6;15818:1;15815:13;15812:39;;;15831:18;;:::i;:::-;-1:-1:-1;15867:9:1;;15754:128::o;16640:397::-;16842:2;16824:21;;;16881:2;16861:18;;;16854:30;16920:34;16915:2;16900:18;;16893:62;-1:-1:-1;;;16986:2:1;16971:18;;16964:31;17027:3;17012:19;;16640:397::o;17042:404::-;17244:2;17226:21;;;17283:2;17263:18;;;17256:30;17322:34;17317:2;17302:18;;17295:62;-1:-1:-1;;;17388:2:1;17373:18;;17366:38;17436:3;17421:19;;17042:404::o;17451:465::-;17708:2;17697:9;17690:21;17671:4;17734:56;17786:2;17775:9;17771:18;17763:6;17734:56;:::i;:::-;17838:9;17830:6;17826:22;17821:2;17810:9;17806:18;17799:50;17866:44;17903:6;17895;17866:44;:::i;:::-;17858:52;17451:465;-1:-1:-1;;;;;17451:465:1:o;17921:401::-;18123:2;18105:21;;;18162:2;18142:18;;;18135:30;18201:34;18196:2;18181:18;;18174:62;-1:-1:-1;;;18267:2:1;18252:18;;18245:35;18312:3;18297:19;;17921:401::o;18327:406::-;18529:2;18511:21;;;18568:2;18548:18;;;18541:30;18607:34;18602:2;18587:18;;18580:62;-1:-1:-1;;;18673:2:1;18658:18;;18651:40;18723:3;18708:19;;18327:406::o;18738:399::-;18940:2;18922:21;;;18979:2;18959:18;;;18952:30;19018:34;19013:2;18998:18;;18991:62;-1:-1:-1;;;19084:2:1;19069:18;;19062:33;19127:3;19112:19;;18738:399::o;19142:400::-;19344:2;19326:21;;;19383:2;19363:18;;;19356:30;19422:34;19417:2;19402:18;;19395:62;-1:-1:-1;;;19488:2:1;19473:18;;19466:34;19532:3;19517:19;;19142:400::o;20210:827::-;-1:-1:-1;;;;;20607:15:1;;;20589:34;;20659:15;;20654:2;20639:18;;20632:43;20569:3;20706:2;20691:18;;20684:31;;;20532:4;;20738:57;;20775:19;;20767:6;20738:57;:::i;:::-;20843:9;20835:6;20831:22;20826:2;20815:9;20811:18;20804:50;20877:44;20914:6;20906;20877:44;:::i;:::-;20863:58;;20970:9;20962:6;20958:22;20952:3;20941:9;20937:19;20930:51;20998:33;21024:6;21016;20998:33;:::i;:::-;20990:41;20210:827;-1:-1:-1;;;;;;;;20210:827:1:o;21042:249::-;21111:6;21164:2;21152:9;21143:7;21139:23;21135:32;21132:52;;;21180:1;21177;21170:12;21132:52;21212:9;21206:16;21231:30;21255:5;21231:30;:::i;21296:179::-;21331:3;21373:1;21355:16;21352:23;21349:120;;;21419:1;21416;21413;21398:23;-1:-1:-1;21456:1:1;21450:8;21445:3;21441:18;21349:120;21296:179;:::o;21480:671::-;21519:3;21561:4;21543:16;21540:26;21537:39;;;21480:671;:::o;21537:39::-;21603:2;21597:9;-1:-1:-1;;21668:16:1;21664:25;;21661:1;21597:9;21640:50;21719:4;21713:11;21743:16;21778:18;21849:2;21842:4;21834:6;21830:17;21827:25;21822:2;21814:6;21811:14;21808:45;21805:58;;;21856:5;;;;;21480:671;:::o;21805:58::-;21893:6;21887:4;21883:17;21872:28;;21929:3;21923:10;21956:2;21948:6;21945:14;21942:27;;;21962:5;;;;;;21480:671;:::o;21942:27::-;22046:2;22027:16;22021:4;22017:27;22013:36;22006:4;21997:6;21992:3;21988:16;21984:27;21981:69;21978:82;;;22053:5;;;;;;21480:671;:::o;21978:82::-;22069:57;22120:4;22111:6;22103;22099:19;22095:30;22089:4;22069:57;:::i;:::-;-1:-1:-1;22142:3:1;;21480:671;-1:-1:-1;;;;;21480:671:1:o;22577:404::-;22779:2;22761:21;;;22818:2;22798:18;;;22791:30;22857:34;22852:2;22837:18;;22830:62;-1:-1:-1;;;22923:2:1;22908:18;;22901:38;22971:3;22956:19;;22577:404::o;22986:561::-;-1:-1:-1;;;;;23283:15:1;;;23265:34;;23335:15;;23330:2;23315:18;;23308:43;23382:2;23367:18;;23360:34;;;23425:2;23410:18;;23403:34;;;23245:3;23468;23453:19;;23446:32;;;23208:4;;23495:46;;23521:19;;23513:6;23495:46;:::i;:::-;23487:54;22986:561;-1:-1:-1;;;;;;;22986:561:1:o;23552:125::-;23592:4;23620:1;23617;23614:8;23611:34;;;23625:18;;:::i;:::-;-1:-1:-1;23662:9:1;;23552:125::o
Swarm Source
ipfs://9a2e37fd3b986b8d44b8bbdc19c3b81c8e2035e029cf07eb6504b6fa0e06cb57